Skip to content

Latest commit

 

History

History
217 lines (135 loc) · 7.26 KB

config.md

File metadata and controls

217 lines (135 loc) · 7.26 KB

基本使用

  • nginx -t 检测配置文件是否正确
  • nginx -v 版本
  • start nginx 启动
  • nginx -s stop nginx -s reload pkill -9 nginx
  • 添加至linux service管理

nginx.conf

pid logs/pid;  进程pid

worker_process auto; 默认为1 可以设置为cpu核心数

worker_cpu_affinity 0001 0010 0100 1000; 设置cpu粘性,降低cpu切换消耗

worker_rlimit_nofile 65535; 打开的最大文件数(最大连接数) 默认为65535(TCP数据报端口使用16位存储,即2^16-1)

events {

    worker_connections 2048;每一个worker可以处理的最大并发数
    1. 当nginx作为反向代理时,最大连接数为:worker_process * worker_connections / 4
    2. 当nginx作为服务器时,最大连接数为:worker_process * worker_connections / 2

    use epoll; 轮询方法 select poll epoll

    multi_accept on; 在接受一个连接时尽可能多的接收连接,如果开启则将所有当前需处理连接放入队列;否则由其他worker依次接受
}

http {
    include mime.types;

    default_type application/octet-stream; 当文件mime类型不存在时的默认类型,的方式字节流处理(浏览器直接下载)

    send_file on; 普通应用设置为on;重磁盘应用设置为off(平衡网络与磁盘的处理速度)

    keepalive_time 60; 长连接(多个http复用一个tcp)释放时间,单位秒
    短了易频繁创建tcp连接增加消耗
    长了导致连接无法释放,会造成open many files错误
    整个通信过程为 http请求->建立tcp连接(syn)->传输数据->超时时间到,nginx发送fin断开tcp连接

    client_header_timeout 10;
    客户端端向nginx发送完整header的超时时间,10s内未收到完整header,则返回408

    client_body_timeout 10;
    客户端向nginx发送body的超时时间,连续10s内未向客户端发送1字节,则返回408

    client_max_body_size 20m; 最大body大小,超过限制返回413

    client_body_buffer_size 1024k; 请求body的缓冲区大小,如果请求body大于缓冲区,则写入临时目录

    client_header_buffer_size 1k;
    请求头的缓冲区大小,超过则写入更大的缓冲区(large_client_header_buffers)

    large_client_header_buffers 4 32k;
    分配4个8k的缓冲区,如果请求头大于8k则返回414(解决超长url)

    send_timeout 10; 发送数据至客户端超时时间,连续10s内未向客户端发送1字节,则关闭连接


    keepalive_requests 100;
    默认100,一个与客户端的长连接可以处理的最大请求数,达到这个该值时,则nginx会强行关闭这个长连接。导致nginx端出现TIME_WAIT



    //http_proxy

    proxy_connect_timeout 10; nginx连接upstream的超时时间

    proxy_read_timeout 5;
    nginx接收upstream超时时间,连续5s内未接收到upstream的1字节,则断开连接

    proxy_send_timeout 2;
    nginx发送数据至upstream超时时间,连续2s内没有发送1字节,则断开连接

    proxy_buffering on;(默认on)
    on开启情况下,缓冲upstream返回来的数据,边收边传给客户端,如果大小超缓冲区大小,则写入磁盘
    off关闭,则是每次都返回proxy_buffer_size大小

    proxy_pass http://xxxx:3001; 反向代理地址

    proxy_redirect off;
    如果上游服务器返回的是重定向请求,此处可以重设location或refresh字段

    proxy_http_version 1.1; 使用http1.1版本(支持长连接)
    proxy_set_header Connection "";
    启用http1.1长连接,若未开启导致后端server每次关闭连接,高并发下容易出现TIME_WAIT


    proxy_set_header Host $host;
    使后端服务器可以获取客户端的真实host,依次使用如下值
    1. 请求行host
    2. 请求头header中的host
    3. server_name

    proxy_set_header X-Real-Ip $remote_addr;
    仅一层代理模式(Client-Nginx-Server)下获取客户端真实ip

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    追加来源ip($remote_addr),例如经过C-proxy1-proxy2-Server,那么
    X-Forwarded-For:CIp, proxy1Ip  。注意proxy2与Server直接相连,在proxy2处追加proxy1Ip,表示请求来自于proxy1

    // ngx_http_realip_module ,将用户真实ip赋值$remote_addr
    set_real_ip_from 129.1.1.1;上级代理服务器ip段

    real_ip_header X-Forwarded-For;

    real_ip_recursive on; 递归检索


    // http_gzip

    gzip on; 开启压缩功能

    gzip_min_length 1k; 触发压缩的最小字节数

    gzip_http_version 1.1; http版本

    gzip_comp_level 6; 1(压缩比最低)~9(压缩比最高,耗CPU)

    gzip_types text/html text/css text/javascript;压缩类型


    //负载均衡

    upstream backend { 默认采用round-robin算法轮询
        ip_hash;
        server sdk.biaoqing.sogou; weight=5
        server sdk.biaoqing.sogou:5002; max_fails=1
        server 192.168.1.1:5002; backup

        keepalive 300;
        空闲时最大keep alive数量,超过此值时最近最少使用的连接将被关闭
        需要的长连接数量 = qps * 响应时间s * 30%
        此值设置过小,造成nginx频繁关闭,最终导致nginx端出现TIME_WAIT
    }

    weight=5 权重默认为1

    max_fails=1 默认1 fail_timeout=30 默认10s
    如果1次失败,则该服务器不可达,且在之后30秒内不再访问。之后没30秒最多尝试1次。

    backup 备选服务器,当没有被标记为backup、down的服务器都不可达时,分配至此

    down 当前服务器永不可达

    ip_hash 根据ip分配至不同的服务器

    keepalive 300 保持到后端服务器的长连接数


    // 虚拟主机

    server {
        listen 80; 监听端口

        server_name luyufa.com; 虚拟主机域名

        root /root/apps/r;
        指定根目录,请求结果是 root+location
        例如:请求url是/lu/1.html-->/root/apps/r/lu/1.html


        //日志

        log_format main_xxx 日志xxx格式(默认combined)

        $remote_addr 客户端ip
        $time_local 请求时间
        $request 请求行
        $status 状态码
        $body_bytes_sent 返回的body字节数
        $request_time 请求耗时
        $http_user_agent 客户端信息
        $http_x_forwraded_for 代理ip
        $http_referer 请求来源

        access_log off; 关闭日志

        access_log logs/access.log main_xxx buffer=32k flush=5s
        日志存储路径  格式  缓冲区满32k写入文件 5s内必定写入一次

        error_log logs/error.log error
        错误日志存储路径 级别(debug info warn error)


        location /api {
            proxy_pass http://backend;

            deny 192.1.1.1; 禁止
            allow 182.1.1.1; 允许
            deny all; 禁止所有ip访问,自上而下匹配

            alias /root/apps/a/
            指定根目录,结尾必须以"/"结尾,请求结果是alias路径替换location路径,仅能存在于location下
            例如:请求url是/lu/1.html-->/root/apps/a/1.html
        }

        //location规则

        location = /url 精确匹配url,匹配即停止

        location ^~ /url 前缀匹配,特殊,匹配即停止

        location ~ 区分大小写的正则匹配,匹配即停止

        location ~* 不区分大小写的正则匹配,匹配即停止

        location /url 前缀匹配

        location / 通用匹配

    }
}