1.Nginx进程
[root@cong11 ~]# ps aux | grep nginx | grep -v "grep"
worker进程是www程序用户,但是master进程还是root,其中,master是监控进程,也叫主进程,worker是工作进程,还有cache相关进程,关系如图:
master进程是管理worker进程,而worker进程才是为用户提供服务的。
2.设置Nginx运行进程个数
运行进程个数一般我们设置CPU的核心或者核心数x2,如果你不了解,top命令之后按1也可以看出来。也可以查看/proc/cpuinfo文件
[root@cong11 ~]
# grep ^processor /proc/cpuinfo | wc -l
2.2查看cpu个数
[root@cong11 ~]# top #按1,可以看到我这里是8 核心
2.3设置nginx中进程
在nginx.conf的全局设置中修改
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
改:
worker_processes 1;
为
worker_processes 8; #我这里查看到是8个cpu,修改为8
2.4重载nginx配置文件
[root@cong11 ~]# nginx -s reload
2.5查看nginx进程数
[root@cong11 ~]# ps -axu | grep nginx | grep -v "grep"
3. Nginx运行CPU亲和力
CPU线程数配置,在高并发情况下,通过设置cpu亲和力来降低由于多CPU核切换带来的性能损耗。
3.2 8核8线程配置
nginx.conf文件全局配置中添加
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
表示第一个进程在第一个和第三个cpu上运行,第二个进程在第二个和第四个cpu上运行,两个进程分别在这两个组合上轮询
4.Nginx最多可以打开文件数
4.2设置nginx最大可打开文件
4.2.1临时修改
-n设定系统最多打开的文件数
[root@cong11 ~]# ulimit -n 102400
[root@cong11 ~]# ulimit -n
4.2.2永久修改
修改linux的软硬件限制文件/etc/security/limits.conf
[root@cong11 ~]# vim /etc/security/limits.conf
在文件尾部添加如下代码
* soft nofile 102400
* hard nofile 102400
用户重新登录生效
[root@cong11 ~]# ulimit -n
5.Nginx事件处理模型
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
events {
use epoll;
worker_connections 65535; #单个进程允许客户端最大并发连接数
}
nginx采用epoll事件模型,处理效率高
worker_connections是单个worker进程允许客户端最大连接数,这个数值一般根
据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections
实际我们填入一个65535,足够了,这些都算并发值,一个网站的并发达到这么
大的数量,也算一个大站了!
5.2单个进程允许客户端最大并发连接数
worker_connections 65535;
这个数值一般根据服务器性能和内存来制定,也就是单个进程最大连接数,实际最大并发值就是work进程数乘以这个数
6.http主体优化
6.1开高效传输模式
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types; #媒体类型
default_type application/octet-stream; #默认媒体类型足够
sendfile on;
tcp_nopush on; #取消注释
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,当nginx是一个静态文件服务器的时候,开启sendfile配置项能大大提高nginx的性能
6.2长连接超时时间
主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 65;
keepalived_timeout 与client的keep-alive连接超时时间,单位是秒。服务器将会在这个时间后关闭连接,长连接可以减少重建连接的开销,如果设置时间过长,用户又多,长时间保持连接会占用大量资源
6.3文件上传大小限制
nginx可以修改上传文件大小限制
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
client_max_body_size 10m; #在40行添加
6.4location匹配
6.4.1正则匹配
Nginx的location通过指定模式来与客户端请求的URI相匹配,location可以把网站的不同部分,定位到不同的处理方式上,基本语法如下
location [=|~|~*|^~] pattern {
……
}
注:中括号中为修饰符,即指令模式。Pattern为url匹配模式
= 表示做精确匹配,即要求请求的地址和匹配路径完全相同
~:正则匹配,区分大小写
~*:正则匹配”不区分大小写
注:nginx支持正则匹配,波浪号(~)表示匹配路径是正则表达式,加上*变成~*后表示大小写不敏感
^~:指令用于字符前缀匹配。例如:location ^~ /images/ {…}
6.4.2精确匹配
location = /text.html {
root /var/www/html;
index text.html;
6.4.3前缀匹配
location ^~ /demo {
rewrite ^ http://google.com;
}
6.4.4 正则匹配
location ~* \.(gif|jpg|swf)$ {
}
6.4.5正常匹配
location /demo {
rewrite ^ http://google.com;
}
6.4.6全匹配
location / {
rewrite ^ http://google.com;
}
6.4.7命名匹配
error_page 404 = @not_found;
location @not_found {
rewrite ^ http://google.com;
}
6.4.8匹配优先级
大原则是关于匹配模式的优先级
精确匹配 > 前缀匹配 > 正则匹配 > 正常匹配 > 全匹配
9.5Fastcgi调优
配置之前。了解几个概念
Cache:写入缓存区
Buffer:读取缓存区
Fastcgi是静态服务和动态服务的一个接口
fastcgi参数解释
fastcgi_connect_timeout 300; #指定连接到后端FastCGI的超时时间。
fastcgi_send_timeout 300; #向FastCGI传送请求的超时时间。
fastcgi_read_timeout 300; #指定接收FastCGI应答的超时时间。
fastcgi_buffer_size 64k; #指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。
fastcgi_buffers 4 64k; #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,如果一个php脚本所产生的页面大小为256KB,那么会分配4个64KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp_path指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于磁盘。一般这个值应该为站点中php脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“8 32K”、“4 64k”等。
fastcgi_busy_buffers_size 128k; #建议设置为fastcgi_buffer的两倍,繁忙时候的buffer
fastcgi_temp_file_write_size 128k; #在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,该数值设置小时若负载上来时可能报502 Bad Gateway
fastcgi_temp_path #缓存临时目录
fastcgi_cache ngx_fcgi_cache; #表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502的错误发生,但是开启缓存也可能会引起其他问题,要很据具体情况选择
fastcgi_cache_valid 200 302 1h; #用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一小时,要和fastcgi_cache配合使用
fastcgi_cache_valid 301 1d; #将301应答缓存一天
fastcgi_cache_valid any 1m; #将其他应答缓存为1分钟
fastcgi_cache_min_uses 1; #该指令用于设置经过多少次请求的相同URL将被缓存。
fastcgi_cache_key http://$host$request_uri; #该指令用来设置web缓存的Key值,nginx根据Key值md5哈希存储.一般根据$host(域名)、$request_uri(请求的路径)等变量组合成proxy_cache_key 。
fastcgi_pass #指定FastCGI服务器监听端口与地址。
fastcgi_cache_path #定义缓存的路径
修改nginx.conf配置文件,在http标签中添加如下内容(server{}之上):
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_temp_path /data/ngx_fcgi_tmp;
fastcgi_cache_path /data/ngx_fcgi_cache levels=1:2 keys_zone= ngx_fcgi_cache:128m inactive=1d max_size=10g;
在server location标签添加如下
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_cache ngx_fcgi_cache;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_cache_key http://$host$request_uri;
}
6.5gzip调优
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/css text/xml application/javascript;
gzip_vary on;
拷贝测试文件
[root@cong11 ~]# cp /etc/passwd /usr/local/nginx/html/passwd.html
[root@cong11 ~]# cd /usr/local/nginx/html
[root@cong11 html]# -sh *
测试
打开浏览器,输入测试网址
http://192.168.1.11/passwd.html
按F12然后刷新网页,在开发人员工具里可以看到,passwd.html大小为927B,在网页标头里可以看到,Accept-Encoding: gzip, deflate启用了gzip压缩
谷歌浏览器
输入网址,按F12在network里点击passwd.html,在标头里找Request Headers,也可以看到Accept-Encoding: gzip, deflate,开启gzip压缩
6.6 expires缓存调优
缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的扩展名列出来!Expires缓存配置在server字段里面.
以扩展名区分
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.con
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 365d;
}
location ~ .*\.(js|css)?$
{
expires 30d;
}
对目录及其进行判断
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
expires 360d;
}
location ~ (robots.txt) {
expires 7d;
break;
}
功能优点
(1)xpires可以降低网站购买的带宽,节约成本
(2)同时提升用户访问体验
(3)减轻服务的压力,节约服务器成本,甚至可以节约人力成本,是web服务非常重要的功能
expire功能缺点
第一个 缩短缓存时间,例如:1天,不彻底,除非更新频率大于1天