nginx.conf样本

发布时间 2023-10-07 18:16:55作者: 骑着母猪去打猎
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致
worker_rlimit_nofile 65535;
events {
    #默认最大的并发数为1024,如果你的网站访问量过大,已经远远超过1024这个并发数,那你就要修改worker_connecions这个值 ,这个值越大,并发数也有就大
    worker_connections  1024;
}

http {
    geo $limit {
        default 1;
        10.0.0.0/8 0;
        192.168.0.0/24 0;
    }
    map $limit $limit_key {
        0 "";
        1 $binary_remote_addr;
    }

    #限制连接数
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $server_name zone=preserver:10m;
    
    #固定的速度提供服务(2r/s)
    limit_req_zone binary_remote_addr zone=mylimit:10m rate=2000r/s;
    
    # 不显示 nginx 版本号
    server_tokens Off;
    
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    client_header_timeout 150;
    client_body_timeout 1800;
    send_timeout 150;
    proxy_read_timeout 1800;   
    proxy_hide_header X-Powered-By;
    proxy_hide_header Server; 
    
    client_max_body_size 1024m;

    gzip               on;
    gzip_min_length    10k;
    gzip_buffers       4 16k;
    gzip_http_version  1.0;
    gzip_comp_level    2;
    gzip_types         text/plain application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png image/jpg;
    #vary header支持,该选项可以让前端的缓存服务器缓存经过gzip压缩的页面
    gzip_vary          on;
    gzip_disable       "MSIE [1-6]";

    upstream tomcat_servers{
        server 10.1.1.1:22080 weight=1;
        server 10.1.1.2:22080 weight=1;
        server 10.1.1.3:22080 weight=1;
    }
    
    server {
        #表示限制单个IP同时最多能持有20个连接。
        limit_conn perip 40;
        #表示虚拟主机(server) 同时能处理并发连接的总数为100。
        limit_conn preserver 1000;
        
        #burst 表示在超过设定的访问速率后能额外处理的请求数。
        #当 rate=2r/s 时,表示每500ms 可以处理一个请求。
        #burst=5时,如果同时有10个请求到达,nginx 会处理第1个请求,剩余9个请求中,会有5个被放入队列,剩余的4个请求会直接被拒绝。
        #然后每隔500ms从队列中获取一个请求进行处理,此时如果后面继续有请求进来,如果队列中的请求数目超过了5,会被拒绝,不足5的时候会添加到队列中进行等待。
        #nodelay 表示不延迟。设置 nodelay 后,第一个到达的请求和队列中的请求会立即进行处理,不会出现等待的请求。
        limit_req zone=mylimit burst=1000 nodelay;
        
        listen 80;
        listen 9443 ssl;
        server_name localhost;
        ssl_certificate ../cert/cert.pem;
        ssl_certificate_key ../cert/cert.key;
        ssl_session_timeout 30m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
        ssl_prefer_server_ciphers off;            
     #   控制 HTTP 请求头部的缓冲区大小
        large_client_header_buffers 4 16k;

     #  开启HTTP严格传输安全HSTS
        add_header Strict-Transport-Security "max-age=30000000; preload";

        charset utf-8;

        if ( $scheme = http ) {
            return 301 https://$host:9443$request_uri;
        }
        
        location / {
            proxy_pass http://tomcat_servers;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_redirect http:// https://;
 #           proxy_cookie_path / "/; secure; SameSite=Lax";
            client_max_body_size 600m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
            proxy_send_timeout 600;
            proxy_buffer_size 64k;
            proxy_buffers   4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
        }
        
        location /status668887655678tyuiohghjkjhhjwefjkasdffqwerqwff {
            allow 127.0.0.1;
            deny  all;
            stub_status on;
            access_log logs/status.log;
            auth_basic "NginxStatus";
        }

        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}