前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx基本配置介绍(待完善)

Nginx基本配置介绍(待完善)

作者头像
友儿
发布2023-03-13 17:11:42
8740
发布2023-03-13 17:11:42
举报
文章被收录于专栏:友儿

Nginx配置⽂件

  • Nginx主配置⽂件 /etc/nginx/nginx.conf 是⼀个纯⽂本类型的⽂件,整个配置⽂件是以区块的 形式组织的。⼀般,每个区块以⼀对⼤括号 {} 来表示开始与结束。
    • Main位于nginx.conf配置⽂件的最⾼层
    • Main层下可以有Event、HTTP层
    • HTTP层下⾯有允许有多个Server层, ⽤于对不同的⽹站做不同的配置
    • Server层也允许有多个Location, ⽤于对不同的路径进⾏不同模块的配置
  • nginx默认配置语法
代码语言:javascript
复制
user  nginx;                   # 设置nginx服务的系统使⽤⽤户
worker_processes  auto;        # ⼯作进程,配置和CPU个数保持⼀致

error_log  /var/log/nginx/error.log notice;  # 错误⽇志,后⾯接⼊的是存放文件路径
pid        /var/run/nginx.pid;               # Nginx服务启动时的pid,,后⾯接⼊的是存放文件路径

events {
    worker_connections  1024;
}
# ⾮虚拟主机的配置或公共配置定义在http{}段内,    server{}段外
http {        
    # 必须使⽤虚拟机配置站点,    每个虚拟机使⽤⼀个server{}段
    server    {
        listen 80; # 监听端⼝,    默认80
        server_name        localhost;    # 提供服务的域名或主机名
        #控制⽹站访问路径
        location    /    {
            root            /usr/share/nginx/html;            # 存放⽹站路径
            index        index.html    index.htm;                # 默认访问⾸⻚⽂件
        }
                                
        # 指定错误代码,    统⼀定义错误⻚⾯,    错误代码重定向到新的Locaiton
        error_page            500 502 503 504        /50x.html;
        location    =    /50x.html    {
            root html;
        }
    }
    # 第⼆个虚拟主机配置
    server    {
    }
}

Conf

复制

Nginx⽇志配置规范

  • 配置语法包括
    • access.log
    • error.log
  • Nginx默认日志格式设置 log_format main '$remote_addr - $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" "$http_x_forwarded_for"'; Conf 复制
Nginx⽇志变量

参数

说明

$remote_addr

客户端地址

$remote_user

客户端用户名称

$time_local

访问时间和时区

$request

请求的URI和HTTP协议

$http_host

请求地址,即浏览器中你输入的地址(IP或域名)

$status

HTTP请求状态

$upstream_status

upstream状态

$body_bytes_sent

发送给客户端文件内容大小

$http_referer

url跳转来源

$http_user_agent

用户终端浏览器等信息

$ssl_protocol

SSL协议版本

$ssl_cipher

交换数据中的算法

$upstream_addr

后台upstream的地址,即真正提供服务的主机地址

$request_time

整个请求的总时间

$upstream_response_time

请求过程中,upstream响应时间

Nginx状态监控

  • 开启Nginx监控模块 (--with-http_stub_status_module)
  • 具体配置如下 location /mystatus { stub_status on; access_log off; } Conf 复制
  • 状态监控结果 Active connections: 2 server accepts handled requests 2 2 1 Reading: 0 Writing: 1 Waiting: 1 Text 复制
  • 状态监控结果详细解读
    • Active connections: 2 当前nginx正处理的活动连接数
    • server accepts handled requests 3 3 10 总共处理了3次连接,成功创建了3次连接,共请求了10次。总连接数-成功连接数为失败连接数
    • Reading: o Writing: 1 Waiting: 1
      • reading为nginx读取到客户端的header信息数
      • Writing为nginx返回给客户端的Header信息数,Waiting开启 keep-alive的情况下,这个值等于active-(reading+writing),意思指nginx已经处理完正在等候下一次请求的驻留连接

Nginx下载站点

  • autoindex常⽤参数
    • autoindex_exact_size off;
      • 默认为on, 显示出⽂件的确切⼤⼩,单位是bytes。
      • 修改为off,显示出⽂件的⼤概⼤⼩,单位是kB或者MB或者GB。
    • autoindex_localtime on;
      • 默认为off,显示的⽂件时间为GMT时间。
      • 修改为on, 显示的⽂件时间为⽂件的服务器时间。
    • charset utf-8,gbk;
      • 默认中⽂⽬录乱码,添加上解决乱码
  • 配置⽬录浏览功能
代码语言:javascript
复制
location /www {
  #root /data;
  alias /data/www/;             # 指定目录 
  autoindex    on;             # 列出整个目录列表
  autoindex_localtime    on;     # 显示的文件时间为文件的服务器时间
  charset utf-8,gbk;        # 解决中文乱码
  autoindex_exact_size    off;    # 以kB或者MB或者GB单位显示出文件的大小,而不是字节
}

Conf

复制

Nginx访问限制

  • nginx 文档地址
  • ngx_http_limit_req_module 模块文档地址
  • 配置
  • http { # http段配置请求限制, rate限制速率,限制⼀秒钟最多⼀个IP请求 limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s; server {} }
    • key 定义用于限制请求的变量,在这个示例中使用的是NGINX的自带变量 $binary_remote_addr(客户端的ip地址)
    • zone 定义用于存储前面定义的key变量,如zone=mylimit:10m 就是一个名为mylimit的大小为10m的共享内存空间
    • rate 允放相同标识的客户端的访问频次, 在这个例子中:就是同一个ip地址在每秒内只能访问1次
  • 使用 server { location / { # limit_req zone=req_zone; # limit_req zone=perip burst=2; limit_req zone=perip burst=2 nodelay; } }
    • burst 如上例子burst=2,允许2个突发,有大量请求时,超过频次限制的请求,会允许2个访问,注意:burst指定的请求数量,不会马上进行处理,而是按照rate指定的值,以固定的速率进行处理。
    • nodelay 只是对放到burst队列中的请求立即处理,但处理完成后队列并不立即清空,队列清空的速度仍然按原来的速度每秒一个清空,所以当再有请求过来时,并不会马上又有两个burst请求被处理。
  • 安装压力测试,以每秒处理1个请求的速率做限制 limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s; # centos sudo yum install -y httpd-tools # ubuntu sudo apt-get install -y apache2-utils Bash 复制
  • 测试1 location / { root /usr/share/nginx/html; index index.html index.htm; limit_req zone=req_zone; }
  • 测试1重启nginx后执行ab vagrant@swarm3:/etc/nginx$ ab -n 10 -c 10 http://192.168.56.3/ Concurrency Level: 10 Time taken for tests: 0.002 seconds Complete requests: 10 Failed requests: 9 (Connect: 0, Receive: 0, Length: 9, Exceptions: 0) Bash 复制
    • 只有一个成功,有9个请求失败,时长是0.002 seconds,同一个ip地址在每秒内只能访问1次
  • 测试2 location / { root /usr/share/nginx/html; index index.html index.htm; limit_req zone=req_zone burst=2; }
  • 测试2重启nginx后执行ab vagrant@swarm3:/etc/nginx$ ab -n 10 -c 10 http://192.168.56.3/ Concurrency Level: 10 Time taken for tests: 2.001 seconds Complete requests: 10 Failed requests: 7 (Connect: 0, Receive: 0, Length: 7, Exceptions: 0) Bash 复制
    • 有7个请求失败,注意时间变成了2.001 seconds,burst=2允许2个突发, 有大量请求时,超过频次限制的请求,会允许2个访问,burst指定的请求数量, 不会马上进行处理, 而是按照rate指定的值,以固定的速率进行处理。
  • 测试3 location / { root /usr/share/nginx/html; index index.html index.htm; limit_req zone=req_zone burst=2 nodelay; }
  • 测试3重启nginx后执行ab vagrant@swarm3:/etc/nginx$ ab -n 10 -c 10 http://192.168.56.3/ Concurrency Level: 10 Time taken for tests: 0.002 seconds Complete requests: 10 Failed requests: 7 (Connect: 0, Receive: 0, Length: 7, Exceptions: 0) Bash 复制
    • 有7个请求失败,注意时间:这次是0.002 seconds,burst的队列虽然可以处理用户的需求,但需要用户按照处理时间等待, 对用户不够友好, nodelay参数允许请求在排队的时候就立即被处理, 这里有一点要注意:因为nodelay允许立即处理,也就是有并发请求时,事实上已经超过了rate设置的处理速率了, 所以要根据机器的实际情况设置这个值

Nginx连接限制

连接限制没有请求限制有效?

  • 多个请求可以建⽴在⼀次的TCP连接之上, 那么我们对请求的精度限制,当然⽐对⼀个连接的限制会更加的有效。
  • 因为同⼀时刻只允许⼀个连接请求进⼊,但是同⼀时刻多个请求可以通过⼀个连接进⼊,所以请求限制才是⽐较优的解决⽅案。

Nginx访问控制

Nginx虚拟主机

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx配置⽂件
  • Nginx⽇志配置规范
    • Nginx⽇志变量
    • Nginx状态监控
    • Nginx下载站点
    • Nginx访问限制
    • Nginx连接限制
    • 连接限制没有请求限制有效?
    • Nginx访问控制
    • Nginx虚拟主机
    相关产品与服务
    轻量应用服务器
    轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档