企业级Nginx优化

Nginx优化

[root@nignx001 ~]# cat /etc/nginx/conf/nginx.conf
#将nginx进程设置为普通用户,为了安全考虑
user  tomcat;
#当前启动的worker进程,官方建议是与系统核心数一致
worker_processes  auto;
#自动分配绑定
worker_cpu_affinity auto;
#日志配置
error_log  logs/error.log  crit;
pid        logs/nginx.pid;
#针对 nginx 句柄的文件限制
worker_rlimit_nofile 65535;
#事件模型
events {
    #使用epoll内核模型
    use epoll;
    #每一个进程可以处理多少个连接,如果是多核可以将连接数调高 worker_processes * 1024
    worker_connections  65535;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    charset  utf-8; #设置字符集
   
    #设置日志输出格式,根据自己的情况设置
    log_format  main  '$http_x_forwarded_for - $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"' '$upstream_status $upstream_response_time $request_time';

    access_log logs/access.log main;

    sendfile        on;    #对静态资源的处理比较有效
    tcp_nopush     on;     #如果做静态资源服务器可以打开

    keepalive_timeout  1800;
    client_max_body_size 50m;
    
    client_body_buffer_size 3069k;
    proxy_ignore_client_abort on;
    proxy_connect_timeout 300s;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
    proxy_buffer_size 128k;
    proxy_http_version 1.1;
    proxy_buffers 32 128k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_intercept_errors on;

    proxy_hide_header X-Powered-By;
    proxy_hide_header Server;

    server_names_hash_bucket_size 256;   
    #Gzip module
    gzip on;     #文件压缩默认可以打开
    gzip_min_length 1k;
    gzip_buffers 4 128k;
    gzip_comp_level 5;
    gzip_types text/plain text/css text/xml application/javascript application/rss+xml application/json;
    gzip_disable "MSIE [1-6]\.";

    client_header_buffer_size 128k;
    large_client_header_buffers 4 128k;
    server_tokens off;

 server {
        listen 80;

        ssl_protocols TLSv1.2;

        location /status {
            stub_status on;
       }
   }

include /home/nginx/conf/*.conf;
include /home/nginx/conf/yunwei/*.conf;   可以添加自己指定的目录
}

1.文件句柄

系统全局性修改和用户局部性修改

vim /etc/security/limits.conf
#在End of file前面添加4个参数
# End of file
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

进程局部性修改

vim /etc/nginx/nginx.conf
#每个进程的最大文件打开数,所以最好与ulimit -n的值保持一致
pid        logs/nginx.pid;
worker_rlimit_nofile 35535; #进程限制

2.cpu的亲和配置

cpu的亲和能够使nginx对于不同的work工作进程绑定到不同的cpu上面去。就能够减少在work间不断切换cpu,把进程通常不会在处理器之间频繁迁移,进程迁移的频率小,来减少性能损耗

具体设置

Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l。

less /etc/nginx/nginx.conf
worker_processes  auto;   #根据需要情况自己分配
worker_cpu_affinity auto;

查看CPU数量

[root@node1 ~]# cat /proc/cpuinfo | grep "physical id"|sort|uniq|wc -l
2

查看CPU核心数

[root@node1 ~]# cat /proc/cpuinfo|grep "cpu cores"
cpu cores	: 1
cpu cores	: 1

查看nginx使用cpu核心和对应的nginx进程号

ps -eo pid,args,psr | grep [n]ginx

3.事件处理模型优化

nginx的连接处理机制在于不同的操作系统会采用不同的I/O模型,Linux下,nginx使用epoll的I/O多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用/dev/pool方式的IO多路复用模型,在windows使用的icop等等。要根据系统类型不同选择不同的事务处理模型,我们使用的是Centos,因此将nginx的事件处理模型调整为epoll模型。

cat /etc/nginx/nginx.conf
events {
    use epoll;
    worker_connections  65535;
}

4.设置work_connections 连接数

worker_connections  10240;

5.keepalive timeout会话保持时间

keepalive_timeout  1800;
经调研得知nginx默认设置的http连接超时时间为75s,超过75s,会断掉当前的http连接,而大文件上传时经常会超过75s,这就导致大文件无法上传成功,当时的解决方案是,设置nginx http连接超时时间为30分钟,即参数keepalive_timeout=1800;文件上传问题基本解决;

6.GZIP压缩性能优化

gzip on;
gzip_min_length 1k;
gzip_buffers 4 128k;
gzip_comp_level 5;
gzip_types text/plain text/css text/xml application/javascript application/rss+xml application/json;
gzip_disable "MSIE [1-6]\.";

7.proxy超时设置

proxy_ignore_client_abort on;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_buffer_size 128k;
proxy_http_version 1.1;
proxy_buffers 32 128k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_intercept_errors on;

proxy_hide_header X-Powered-By;
proxy_hide_header Server;

8.高效传输模式

sendfile        on;   # 开启高效文件传输模式。
tcp_nopush     on;    #需要在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。将响应头和正文的开始部分一起发送,而不一个接一个的发送

9.Linux系统内核层面

Nginx要达到最好的性能,出了要优化Nginx服务本身之外,还需要在nginx的服务器上的内核参数。

这些参数追加到/etc/sysctl.conf,然后执行sysctl -p 生效。

1)调节系统同时发起的tcp连接数
net.core.somaxconn = 262144
2)允许等待中的监听
net.core.somaxconn = 4096 
3) tcp连接重用
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_tw_reuse = 1   
4)不抵御洪水攻击
net.ipv4.tcp_syncookies = 0  
net.ipv4.tcp_max_orphans = 262144  #该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上,主要目的为防止Ddos攻击
5) 最大文件打开数

ulimit -n 30000

10.ab接口压力测试工具

yum install httpd-tools -y
ab -n 2000 -c 2 http://127.0.0.1/

-n :总的请求数
-c :并发数
-k 是否开启长连接

11.nginx做白名单限制

#前端代理    nginx1-nginx2-后端
nginx1
[root@nignx001 ~]# cat /home/nginx/conf/xxxx/xxx.conf 
server
{
    listen 80;
    server_name xxx.xxxx.cn;
    access_log /home/xxx/logs/nginx/xxx/xxx/xxx/xxx_access.log main;

    rewrite ^/(.*)$ https://xxx.sdycsdyc.cn/$1 permanent;

    location / {
        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_pass http://xxxx:8080;
    }
}

server {
    listen       443;
    server_name  xxx.xxxx.cn;
    access_log /home/xxx/logs/nginx/xxx/xxx/nginx001/xxx_ssl_access.log main;

    ssl         on;
    ssl_certificate      /home/xxx/ssl_config/xxxx.pem;
    ssl_certificate_key      /home/xxx/ssl_config/xxxx.key;

        ssl_session_timeout  5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
        ssl_prefer_server_ciphers   on;

    location / {
        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_pass http://xxx:8080;
    }

    include /home/nginx/conf/allow-xxx.conf;
}

#白名单限制
cat /home/nginx/conf/allow-xxx.conf
allow 1.1.1.0/25;
deny all;
nginx2
[root@k-nginx 100qu-test]# cat cashier.conf 
upstream t-cashier {
    server xxxx:8080;
}
server {
    listen      80;
    server_name  xxx.xxx.cn 120.26.6.234;
    access_log /home/100qu/logs/test-nginx/xxx/xxx_access.log main;
    add_header X-Frame-Options SAMEORIGIN;

    if ($request_method !~* GET|POST|OPTIONS) {
        return 403;
    }

#    rewrite ^/(.*)$ https://xxx.xxx.cn/$1 permanent;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://t-cashier;
        proxy_redirect default;
    }
}

server {
    listen      443;
    server_name  xxx.xxx.cn;
    access_log /home/xxx/logs/test-nginx/xxx/xxx_ssl_access.log main;
    add_header X-Frame-Options SAMEORIGIN;

    if ($request_method !~* GET|POST|OPTIONS) {
        return 403;
    }

    ssl         on;
    ssl_certificate      xxx.pem;
    ssl_certificate_key      xxx.key;

        ssl_session_timeout  5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
        ssl_prefer_server_ciphers   on;



    location ~* ^/druid {
        allow 127.0.0.1;
        deny all;
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://t-cashier;
        proxy_redirect default;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值