nginx之配置

 

配置优化点:

复制代码
1) 优化 workprocess,cpu
worker_processes 8;      // 根据CPU核数配置
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000  00100000 01000000 10000000;

2) 事件处理模型优化

nginx的连接处理机制在于不同的操作系统会采用不同的I/O模型,Linux下,nginx使用epoll的I/O多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用/dev/pool方式的IO多路复用模型,在windows使用的icop等等。

要根据系统类型不同选择不同的事务处理模型,我们使用的是Centos,因此将nginx的事件处理模型调整为epoll模型。

events {
    worker_connections  10240;    // 
    use epoll;
}

3) 设置work_connections 连接数
worker_connections  10240;

4) 每个进程的最大文件打开数
worker_rlimit_nofile 65535;  # 一般等于ulimit -n系统值

5) keepalive timeout会话保持时间
keepalive_timeout  60;


6)GZIP压缩性能优化
gzip on;       #表示开启压缩功能
gzip_min_length  1k; #表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会越压越大
gzip_buffers     4 32k; #压缩缓存区大小
gzip_http_version 1.1; #压缩版本
gzip_comp_level 6; #压缩比率, 一般选择4-6,为了性能
gzip_types text/css text/xml application/javascript;  #指定压缩的类型 gzip_vary on; #vary header支持

7)proxy超时设置
proxy_connect_timeout 90;
proxy_send_timeout  90;
proxy_read_timeout  4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Linux系统内核层面:
 
Nginx要达到最好的性能,出了要优化Nginx服务本身之外,还需要在nginx的服务器上的内核参数。
 
这些参数追加到/etc/sysctl.conf,然后执行sysctl -p 生效。
 
1)调节系统同时发起的tcp连接数
 
net.core.somaxconn = 262144
 
2)允许等待中的监听
 
net.core.somaxconn = 4096
 
3) tcp连接快速回收
 
4) tcp连接重用
 
net.ipv4.tcp_tw_recycle = 1
 
net.ipv4.tcp_tw_reuse = 1
 
5)不抵御洪水攻击
 
net.ipv4.tcp_syncookies = 0
 
net.ipv4.tcp_max_orphans = 262144 #该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上,主要目的为防止Ddos攻击
 
6)最大文件打开数
 
ulimit -n 30000

  

 

 

  1)反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器

复制代码
# /etc/nginx/nginx.conf 

http {
    // 当通过 face.danoolive.com:80 端口访问这个服务器时
    // 该请求会被转发到 127.0.0.1:9992
    server {
        listen 80; 
        server_name face.danoolive.com; 
        // 通过访问的路径来处理转发 ...
        location / { 
            // 也不一定是内网 127.0.0.1 ,也可以是另外一个服务器的某个端口等 ...
            proxy_pass http://127.0.0.1:9992;
        }
    }

    // 当通过 res.danoolive.com:80 端口访问这个服务器时
    // 该请求会被转发到 127.0.0.1:9991
    server {
        listen 80; 
        server_name res.danoolive.com; 
        location / { 
            proxy_pass http://127.0.0.1:9991;
        }
    }

}
复制代码

   示例:

1
2
3
4
5
6
7
8
9
10
11
12
server
    {
        listen 80;
        server_name rap.startbaby.xyz ;
        location / {
            #反向代理
            proxy_pass http://0.0.0.0:3333;
            add_header Access-Control-Allow-Origin *;
        }
 
        access_log  /home/wwwlogs/rap.startbaby.xyz.log;
    }

  

  2) 域名重定向

配置多域名, 指定一个域名进行跳转

server_name www.123.com www.456.com www.678.com;
# 判断如果访问域名不等于www.123.com,就指定到www.123.com
if ($host != 'www.123.com') {
    rewrite ^/(.*)$ http://www.123.com/$1 permanent;  // permanent == 301 重定向
}

  

  3)统一跳转https

域名HTTPS跳转

server {
    listen 80;
    server_name www.域名.com;
    rewrite ^(.*)  https://$server_name$1 permanent;
}

 

  4)PHP支持

        location ~ \.php$ {
            root           /www/www.startbaby.xyz;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

 

  5) location配置

a)通过匹配访问指定目录,进行跳转

location ~* /x/(suzhou|glzp) {
    return http://baidu.com;
}


~* 不区分大小写匹配,多次匹配

b)判断参数中指定的数值,进行跳转

复制代码
location ^~ /site/download/ {
    if ( $query_string ~* "appId=24" ) {
        return http://xxx.com/downloadview/index?id=xx1;
    }
    if ( $query_string ~* "appId=10000039" ) {
        return http://xxx.com/downloadview/index?id=xx0;
    }

    proxy_pass http://127.0.0.1:8081;
}

注意点:这里最后都匹配不到的时候, 是否需要正常访问,如果需要则配置proxy_pass,否则会显示404提示
复制代码

1)location的匹配指令:

~ #波浪线表示执行一个正则匹配,区分大小写
~* #表示执行一个正则匹配,不区分大小写
^~ #^~表示普通字符匹配,不是正则匹配。如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
= #进行普通字符精确匹配
@ #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

location 匹配的优先级(与location在配置文件中的顺序无关)

= 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。
最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

 

 

 

 

 

 

配置优化:

  1. 可配置access_log日志的buffer缓冲-刷新描述flush

access_log  logs/request.access.log  main buffer=256k flush=5s;
  说明:
   buffer=size # 存放访问日志的缓冲区大小
flush=time # 设置缓冲区的日志刷到磁盘的时间, 单位为秒
gzip # 标识压缩级别

  nginx日志暂时不刷到磁盘, 而是存在内存汇总 达到256k之后再一次性的写入磁盘,避免高频词对磁盘写操作。

 

 

 

参考文档:

 

posted @   X-Wolf  阅读(335)  评论(0)    收藏  举报
相关博文:
阅读排行:
· c# 批量注入示例代码
· 【Uber 面试真题】SQL :每个星期连续5星评价最多的司机
· .net core workflow流程定义
· 将数据导出 Excel 并异步发送到指定邮箱:一次性能优化实战
· .NET周刊【5月第1期 2025-05-04】
 
点击右上角即可分享
微信分享提示