美文网首页
nginx_优化建议

nginx_优化建议

作者: 平凡的运维之路 | 来源:发表于2023-12-19 15:04 被阅读0次

    nginx 配置文件

    • nginx 配置文件
    #主配置文件
    [root@nginx_1 conf]# more nginx.conf
    user root;
    worker_processes  4;
    error_log  logs/error.log;
    pid        sbin/nginx.pid;
    
    events {
        use epoll;
        worker_connections  65535;
        multi_accept on;
    }
    
    stream {
        upstream cmp {
        server  192.168.27.38:8080 max_fails=1 fail_timeout=10s;
            server  192.168.27.39:8080 max_fails=1 fail_timeout=10s backup;
       }
       
       server {
       listen 22222;
       proxy_pass cmp;
       }
       
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        types {
            application/pdf;
        }
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" "$upstream_addr"';
        access_log  logs/access.log  main;
        sendfile        on;
        keepalive_timeout  65;
        fastcgi_buffers 8 128k;
        proxy_connect_timeout 1000;
        proxy_send_timeout 1000;
        proxy_read_timeout 1000;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        client_max_body_size 200m;
        server_tokens  off;
        include    vhosts/local_upstream.conf;
        include    vhosts/server.conf;
        proxy_buffering on;
        proxy_buffer_size 256k;
        proxy_buffers   64 256K;
        proxy_busy_buffers_size 512k;
        proxy_temp_file_write_size 512k;
        proxy_temp_path /tmp/temp_buffer;
    
        ########
        # 开启压缩机制
        gzip on;
        # 指定会被压缩的文件类型(也可自己配置其他类型)
        gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
        # 设置压缩级别,越高资源消耗越大,但压缩效果越好
        gzip_comp_level 5;
        # 在头部中添加Vary: Accept-Encoding(建议开启)
        gzip_vary on;
        # 处理压缩请求的缓冲区数量和大小
        gzip_buffers 16 8k;
        # 对于不支持压缩功能的客户端请求不开启压缩机制
        gzip_disable "MSIE [1-6]\."; # 低版本的IE浏览器不支持压缩
        # 设置压缩响应所支持的HTTP最低版本
        gzip_http_version 1.1;
        # 设置触发压缩的最小阈值
        gzip_min_length 10k;
        # 关闭对后端服务器的响应结果进行压缩
        gzip_proxied off;
    }
    
    #server配置文件
    [root@nginx_1 conf]# more  server.conf
    server{
            listen 8099;
            server_name    mirrors.aliyun.com;
            location ~ ^/*{
                     proxy_redirect off;
                     proxy_set_header Host $host;
                     proxy_set_header X-Forwarded-Host $host;
                     proxy_set_header X-Forwarded-Server $host;
                     proxy_set_header X-Real-IP $remote_addr;
                     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_buffering off;
                     chunked_transfer_encoding       off;
                     proxy_pass     http://mirrors.aliyun.com;
                     client_max_body_size 512m;
            }
        }
    
    server {
        listen 443 ssl http2;
        ssl_certificate /home/nginx/conf/crt/9371738__test.com.pem;
        ssl_certificate_key /home/nginx/conf/crt/9371738__test.com.key;
    
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    
        ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
        ssl_prefer_server_ciphers  on;
        
        proxy_read_timeout 3600s;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    
        server_name  cloud.test.com;
        include    vhosts/local.conf;
        #if ($host !~* ^(cloud.test.com|[a-zA-Z0-9].test.com|120.test.com)$) {
        if ($host !~* "^[a-zA-Z0-9_]{3,10}\.test.com$") {
            return 444;
        }
        error_page  404              /error.html;
        error_page   500 502 503 504  /error.html;
        location = /error.html {
            root   html;
        }
    
    server {
        listen 8010 default_server;
        server_name  test.com;
        include    vhosts/local.conf;
        error_page  404              /error.html;
        error_page   500 502 503 504  /error.html;
        location = /error.html {
            root   html;
        }
    }
    
    #local配置文件
    [root@nginx_1 vhosts]# more local.conf 
       location /ws/ {
            proxy_pass              http://ws;
            proxy_redirect          off;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
       }
    
     location /test_api/ {
            proxy_pass              http://test_api;
            proxy_redirect          off;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
      }
    
        location /test_api2{
            proxy_pass      http://test_api2;
            proxy_redirect http:// https://;
            proxy_set_header Host $host:1443;
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_buffer_size 4k;
            proxy_buffers 32 4k;
            proxy_busy_buffers_size 64k;
            #add_header 'Access-Control-Allow-Origin' '*.ccod.com' always;
            add_header Access-Control-Allow-Origin $http_origin;
            add_header X-Content-Type-Options "nosniff";
            add_header X-XSS-Protection "1";
            add_header Set-Cookie "HttpOnly";
            add_header Set-Cookie "Secure";
            add_header X-Frame-Options SAMEORIGIN;
            add_header Content-Security-Policy "default-src *;style-src 'self' 'unsafe-inline';script-src 'self' 'unsafe-inline' 'unsafe-eval';img-src * data:;worker-src * blob:;font-src 'self' data:;";
            add_header 'Access-Control-Allow-Methods' "POST, GET";
        }
    
    #local_upstream配置文件
    [root@nginx_1 vhosts]# more local_upstream.conf 
            upstream        gls{
                sticky;
                server  192.168.1.2:8080;
                server  192.168.1.3:8080;
                check interval=3000 rise=3 fall=5 timeout=1000 type=tcp;
            }
    

    nginx配置文件优化

    • worker_processes nginx进程工作数
    #cat /proc/cpuinfo |grep  processor|wc -l ,或者是设置auto自动根据CPU 核心数来确定 worker 进程的数量都行。
    worker_processes  auto;
    worker_processes  2;
    
    • events 配置优化
    events {
        #采用epoll事件模型,处理效率高。
        use epoll;
        #worker_connections 是单个worker进程允许客户端最大连接数,根据服务器性能和内存来指定,需要服务器系统open files数对应大于worker_connections即可。
        worker_connections  65535;
        #开启多连接处理,Nginx 会使用多线程或多进程的方式来处理多个客户端连接请求,从而提高服务器的性能和响应速度。
        multi_accept on;  
    }
    
    • http块配置优化说明
        sendfile on;
        #启用 Nagle 算法,禁用延迟发送,可以有效地减少 TCP 连接的延迟,提高 Nginx 的性能和响应速度
        tcp_nodelay on;
        #客户端保持会话超时时间,超过该时间,会断开连接
        keepalive_timeout  65;
        # 开启文件缓存,最大缓存文件数为 204800,不活跃缓存时间为 20 秒
        open_file_cache max=204800 inactive=20s; 
        # 设置文件缓存的有效时间为 30 秒
        open_file_cache_valid 30s;
        # 设置文件缓存使用次数的最小值为 1
        open_file_cache_min_uses 1;
        #客户端请求头部缓冲区大小,根据系统分页大小来进行设置;系统命令查看getconf PAGESIZE
        client_header_buffer_size 4k;
        #被设置为 on 时,Nginx 会在客户端与服务器建立连接后,将连接的超时时间重置为默认值。
        #启用连接超时重置功能可能会导致一些性能问题,因为它会增加 Nginx 的负载。因此,在使用该指令时需要谨慎考虑是否真的需要启用该功能。
        #reset_timeout_connection on;
        #设置FastCGI缓冲区的大小为8个缓冲区,每个缓冲区大小为128KB。
        fastcgi_buffers 8 128k;
        #设置代理连接超时时间为600秒。
        proxy_connect_timeout 600s;
        #设置代理发送超时时间为600秒。
        proxy_send_timeout 600s;
        设置代理读取超时时间为600秒。
        proxy_read_timeout 600s;
        fastcgi_connect_timeout 300s;
        fastcgi_send_timeout 300s;
        fastcgi_read_timeout 300s;
        #设置客户端请求体的最大大小为200MB。
        client_max_body_size 200m;
        #关闭服务器令牌功能,隐藏版本信息。
        server_tokens  off;
        include    vhosts/local_upstream.conf;
        include    vhosts/server.conf;
        #开启代理缓冲功能。
        proxy_buffering on;
        #设置代理缓冲区大小为256KB。
        proxy_buffer_size 256k;
        #设置代理缓冲区的数量为64个,每个缓冲区大小为256KB。
        proxy_buffers   64 256K;
        #设置代理繁忙缓冲区的大小为512KB。
        proxy_busy_buffers_size 512k;
        #设置代理临时文件写入大小为512KB。
        proxy_temp_file_write_size 512k;
        #设置代理临时文件路径为/tmp/temp_buffer。
        proxy_temp_path /tmp/temp_buffer;
    
    • expire指令来控制页面缓存
    #ginx还会设置响应头中的“Expires”和“Cache-Control”头标,使浏览器在30天内缓存该页面的内容。如果用户再次访问该页面,Nginx会直接从缓存中读取内容,而不会向后端服务器发送新的请求
    location ~* \.(jpg|jpeg|png|gif|ico|swf|flv|bmp)$
        expires 30d;
        access_log off;
    
    location ~* \.(js|css)$
        expires 7d;
        access_log off;
    
    • 防盗链
    location ~* \.(jpg|jpeg|png|gif|ico|swf|flv|bmp|zip|mp3|mp4|)$ {
        valid_referers none blocked www.test.com *.test123.com;
        if ($invalid_referer) {
            return 403;
        }
    }
    

    nginx服务器内核优化

    • 内核优化
    #表示进程(比如一个worker进程)可以同时打开的最大句柄数,这 个参数直接限制最大并发连接数,需根据实际情况配置
    fs.file-max = 999999
    #设置为1,表示允许将TIME-WAIT状态的socket重新用于新的 TCP连接,这对于服务器来说很有意义,因为服务器上总会有大量TIME-WAIT状态的连接。
    net.ipv4.tcp_tw_reuse = 1
    #表示当keepalive启用时,TCP发送keepalive消息的频度。 默认是2小时,若将其设置得小一些,可以更快地清理无效的连接。
    net.ipv4.tcp_keepalive_time = 15
    #表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间。
    net.ipv4.tcp_fin_timeout = 15
    #操作系统允许TIME_WAIT套接字数量的最大值, 如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为 180000,过多的TIME_WAIT套接字会使Web服务器变慢。
    net.ipv4.tcp_max_tw_buckets = 5000
    #定义了在UDP和TCP连接中本地(不包括连接的远端) 端口的取值范围。
    net.ipv4.ip_local_port_range = 1024 65000
    #定义了TCP接收缓存(用于TCP接收滑动窗口)的最小 值、默认值、最大值。
    net.ipv4.tcp_rmem = 4096 32768 262144
    #定义了TCP发送缓存(用于TCP发送滑动窗口)的最小 值、默认值、最大值。
    net.ipv4.tcp_wmem = 4096 32768 262144
    #选项用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128MB内存的系统而言,此参数的默认值是1024,对小内存的系统则是128。
    net.ipv4.tcp_max_orphans = 262144 
    #当网卡接收数据包的速度大于内核处理的速度时,会有一个队列 保存这些数据包。这个参数表示该队列的最大值。
    net.core.netdev_max_backlog = 262144
    #表示内核套接字接收缓存区默认的大小。
    net.core.rmem_default = 262144
    #表示内核套接字发送缓存区默认的大小。
    net.core.wmem_default = 262144
    #表示内核套接字接收缓存区的最大大小。
    net.core.rmem_max = 2097152
    #表示内核套接字发送缓存区的最大大小。
    net.core.wmem_max = 2097152
    #选项表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目。
    net.core.somaxconn = 262144 
    #设置为 1。该参数与性能无关,用于解决TCP的SYN攻击。
    net.ipv4.tcp_syncookies = 1
    #表示TCP三次握手建立阶段接收SYN请求队列的最大 长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时, Linux不至于丢失客户端发起的连接请求。
    net.ipv4.tcp_max_syn_backlog=262144
    

    相关文章

      网友评论

          本文标题:nginx_优化建议

          本文链接:https://www.haomeiwen.com/subject/qbbzgdtx.html