Nginx性能调优
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 "*";
}
}
}
扩展阅读:
转载于:https://my.oschina.net/websec/blog/339917