欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx性能调优

程序员文章站 2022-06-01 12:14:53
...
user www;
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
upstream app{
	server 127.0.0.1:3001;				
}
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
    client_max_body_size 100M;
        #access_log  logs/host.access.log  main;
        location / {
            root   /home/www/music/p;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
			
	location ^~/app/{
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Host $http_host;
		proxy_set_header X-NginX-Proxy true;
		proxy_pass http://app/;
		proxy_redirect off;	
		add_header Access-Control-Allow-Origin "*";	
	}
		
}
}

nginx 主要用于做一个nodejs与静态文件的负载均衡和静动态数据与文件的分发。

服务是购买的阿里云最便宜的服务器。先优化服务器端:

系统:CentOS release 6.5 (Final)

CPU信息:

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 45

model name : Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz

stepping : 7

cpu MHz : 2199.939

cache size : 15360 KB

physical id : 0

siblings : 1

core id : 0

cpu cores : 1

apicid : 0

initial apicid : 0

fpu : yes

fpu_exception : yes

cpuid level : 13

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush mmx fxsr sse sse2 ht syscall nx lm up rep_good unfair_spinlock pni ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm

bogomips : 4399.87

clflush size : 64

cache_alignment : 64

address sizes : 46 bits physical, 48 bits virtual

power management:

内存:512MB

             total       used       free     shared    buffers     cached

Mem:    490        469         21          0        139        146

-/+ buffers/cache:        183        307

所剩内存并不多。21MB

nginx:

worker_processes  1; #这里是默认的为1,可以改为auto,这样如果你的服务器是多核的可以需要多少自动用多少。这里因为只有1核,所以不用修改.

在这条下面添加一条:worker_rlimit_nofile 100000;#这个是现在nginx同时打开的文件数,如果你不设置就是根据系统的默认值(ulimit -a查看)。如果nginx打开的文件超过了系统的默认值就会报too many open file.

然后就是Events模块

events {
    worker_connections  1024;
}

上面是默认的,这里先修改worker_connections参数,这个是nginx的worker进程可以打开的最大进程数,因为我的目前的服务器配置很低,所以就设置为1024。因为我work连接数由系统的socket连接数限制,我再如何的提高也是没有效果的。如果你的服务器配置比较高可以修改为2048,4096,8192成2的倍数增加最好。

然后添加两条:

multi_accept  on;#这里默认是off,这个参数是告诉nginx在接收到连接的时候是否接受更多的连接

use epoll; #如果是*BSD系列就是use kqueue 如果是其他kernel>2.6就使用epoll

如果不理解epoll和kqueue:epoll 或者 kqueue 的原理是什么?

然后是HTTP模块:

 server_tokens off; #这个参数是关闭nginx的版本信息,因为各个版本有不同的安全漏洞,那么我们关闭版本,当入侵者攻击时需要做模糊攻击提高对方攻击应用的复杂度
 sendfile        on; #这个参数是将文件读入到缓存区
  tcp_nopush     on; #告诉nginx在发送数据包的时候一次性把所有文件包含到一个数据包中,不需要一个一个的发送

gzip on; #开启gzip压缩节省带宽
gzip_disable "msie6"; #兼容低版本的浏览器
gzip_proxied any;  #允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。
gzip_min_length 1000; #当文件小于1000b的时候不压缩
gzip_comp_level 5;#这个是压缩级别,共有1-9,9压缩率最高,但是最慢。1则相反.这里我们折中5
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;  #设置被压缩文件的格式

最终版本:

user www;
worker_processes  auto;
worker_rlimit_nofile 100000;

events {
    worker_connections  1024;
    multi_accept on;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server_tokens off;
    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;
gzip on; 
gzip_disable "msie6"; 
gzip_proxied any; 
gzip_min_length 1000; 
gzip_comp_level 4; 
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
		

	upstream app{
				server 127.0.0.1:3001;
				
	}

    server {
        listen       80;
        server_name  localhost;
       #charset koi8-r;

    client_max_body_size 100M;
        location / {
            root   /home/www/music/p;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
		
		
	location ^~/app/{
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Host $http_host;
		proxy_set_header X-NginX-Proxy true;
		proxy_pass http://app/;
		proxy_redirect off;	
		add_header Access-Control-Allow-Origin "*";	
	}
		
}

}

扩展阅读:

高并发下的 Nginx 优化 


转载于:https://my.oschina.net/websec/blog/339917