1.Nginx进程

[root@cong11 ~]# ps aux | grep nginx | grep -v "grep"

nginx 十进制加法 nginx 进程数如何设置_nginx 十进制加法

worker进程是www程序用户,但是master进程还是root,其中,master是监控进程,也叫主进程,worker是工作进程,还有cache相关进程,关系如图:

nginx 十进制加法 nginx 进程数如何设置_linux_02

master进程是管理worker进程,而worker进程才是为用户提供服务的。

2.设置Nginx运行进程个数

运行进程个数一般我们设置CPU的核心或者核心数x2,如果你不了解,top命令之后按1也可以看出来。也可以查看/proc/cpuinfo文件

[root@cong11 ~]# grep ^processor /proc/cpuinfo | wc -l

nginx 十进制加法 nginx 进程数如何设置_缓存_03

2.2查看cpu个数

[root@cong11 ~]# top  #按1,可以看到我这里是8 核心

nginx 十进制加法 nginx 进程数如何设置_nginx 十进制加法_04

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

 

nginx 十进制加法 nginx 进程数如何设置_缓存_05

2.5查看nginx进程数

[root@cong11 ~]# ps -axu | grep nginx | grep -v "grep"

nginx 十进制加法 nginx 进程数如何设置_nginx 十进制加法_06

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

nginx 十进制加法 nginx 进程数如何设置_运维_07

[root@cong11 ~]# ulimit -n

nginx 十进制加法 nginx 进程数如何设置_运维_08

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

nginx 十进制加法 nginx 进程数如何设置_缓存_09

 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 *

nginx 十进制加法 nginx 进程数如何设置_运维_10

测试

打开浏览器,输入测试网址

http://192.168.1.11/passwd.html

nginx 十进制加法 nginx 进程数如何设置_缓存_11

按F12然后刷新网页,在开发人员工具里可以看到,passwd.html大小为927B,在网页标头里可以看到,Accept-Encoding: gzip, deflate启用了gzip压缩

nginx 十进制加法 nginx 进程数如何设置_缓存_12

 

谷歌浏览器

输入网址,按F12在network里点击passwd.html,在标头里找Request Headers,也可以看到Accept-Encoding: gzip, deflate,开启gzip压缩

nginx 十进制加法 nginx 进程数如何设置_运维_13

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天