Nginx深度优化(二)

发布时间:2020-06-21 11:09:11 作者:筱振
来源:网络 阅读:1062

Nginx作为现在最流行的Web应用程序,对其优化十分重要。通过Nginx初步优化、深度优化Nginx(一)已经可以对Nginx进行大量的优化来满足基本的需要,但是作为一名合格的运维工程师来说,仅仅掌握以上对Nginx进行优化的方法显然是远远不足的。所以就需要本篇博文进一步对Nginx进行优化。

博文大纲:
一、安装nginx服务器
二、Nginx配置优化
(1)Nginx 运行工作进程个数
(2)Nginx 事件处理模型
(3)开启高效传输模式
(4)连接超时时间
(5)fastcgi调优
(6)expires 缓存调优
(7)防盗链
(8)内核参数优化

一、安装nginx服务器

获取Nginx软件包

[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel         //安装nginx依赖
[root@localhost ~]# useradd -s /sbin/nologin -M nginx          //创建nginx用户
[root@localhost ~]# tar zxf nginx-1.14.0.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/nginx-1.14.0/
[root@localhost nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --user=nginx \
 --group=nginx --with-http_dav_module --with-http_stub_status_module \
 --with-http_addition_module --with-http_sub_module --with-http_flv_module \
 --with-http_mp4_module --with-pcre --with-http_ssl_module \
 --with-http_gzip_static_module  && make && make install
//对nginx进行编译安装,对源码包进行编译安装时,可以使用./configure --help 来获取配置选项详细介绍

配置选项解释:

[root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin        //创建符号链接
[root@localhost ~]# nginx -t           //检查Nginx配置文件语法
[root@localhost ~]# nginx             //启动Nginx

对于nginx命令常用的几个选项:

二、Nginx配置优化

[root@localhost ~]# ps -ef | grep nginx          //列出Nginx程序所产生的进程
root     120790      1  0 22:49 ?        00:00:00 nginx: master process nginx
nginx    120791 120790  0 22:49 ?        00:00:00 nginx: worker process
root     120873   1928  0 22:57 pts/0    00:00:00 grep --color=auto nginx
//第三条可以忽略,它是因为grep命令所产生的

从显示信息中可以看出,work进程是Nginx程序用户,但master进程是root。其中,master是监控进程,也称为Nginx的主进程;work进程是工作进程,部分情况还会出现cache相关进程。

关系图如下:
Nginx深度优化(二)
从图中也可以看出master是管理员,work进程才是为用户提供服务的!

(1)Nginx 运行工作进程个数

建议:一般设置 CPU 的核心或者核心数 x2 。

[root@localhost ~]# cat /proc/cpuinfo | grep processor | wc -l
1
//通过这条命令可以查看到当前服务器的cpu是一个
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf           //编辑Nginx配置文件
worker_processes  2;       //工作进程数,建议是CPU数或者是CPU个数的两倍,最大可以开启8个
worker_cpu_affinity 01 10;     //运行CPU亲和力
worker_rlimit_nofile 65535;             //最多打开的文件个数
[root@localhost ~]# ulimit -n
1024
//可以看出系统默认限制打文件的个数是1024
文件个数除了nginx配置文件进行限制意外,还需修改文件资源限制文件,如下:
[root@localhost ~]# vim /etc/security/limits.conf 
       ………………                           //省略部分内容
#<domain>      <type>  <item>         <value>
*               soft    nofile          65535                 //添加软限制打开文件的个数
*               hard    nofile          65535               //添加新限制打开文件的个数
*               soft      noproc       65535               //添加软连接可以打开的进程个数
*               hard     noproc       65535              //添加硬限制可以打开的进程个数
[root@localhost ~]# su -                                  //切换用户即可生效
上一次登录:三 12月  4 22:29:45 CST 2019从 192.168.1.253pts/0 上
[root@localhost ~]# ulimit -n
65535
//可以看出文件个数已经变成了65535,证明修改的文件已经生效
[root@localhost ~]# nginx -s reload                 //重新加载nginx服务配置文件
[root@localhost ~]# ps -ef | grep nginx
root     120790      1  0 22:49 ?        00:00:00 nginx: master process nginx
nginx    121276 120790  0 23:21 ?        00:00:00 nginx: worker process
nginx    121277 120790  0 23:21 ?        00:00:00 nginx: worker process
root     121279 121226  0 23:22 pts/0    00:00:00 grep --color=auto nginx
//由于worker_processes设置为2,可以看出当前已经产生了两个work进程

(2)Nginx 事件处理模型

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
       ………………                           //省略部分内容
events {
    use epoll;                         
    worker_connections  65535;          
    multi_accept on;                           
}

配置项解释:

(3)开启高效传输模式

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
       ………………                           //省略部分内容
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush     on;

配置项解释:

(4)连接超时时间

主要目的就是保护服务器资源、CPU、内存、控制连接数,因为建立连接也是需要消耗资源的。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
       ………………                           //省略部分内容
http {

        keepalive_timeout 60;
        tcp_nodelay on;
        client_header_buffer_size 4k;
        open_file_cache max=102400 inactive=20s;
        open_file_cache_valid 30s;
        open_file_cache_min_uses 1;
        client_header_timeout 15;
        client_body_timeout 15;
        reset_timedout_connection on;
        send_timeout 15;
        server_tokens off;
        client_max_body_size 10m;

配置项解释:

(5)fastcgi调优

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
       ………………                           //省略部分内容
http {

        fastcgi_connect_timeout 600;
        fastcgi_send_timeout 600;
        fastcgi_read_timeout 600;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 128k;
        fastcgi_temp_path /usr/local/nginx/nginx_tmp;
        fastcgi_intercept_errors on;
        fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128m
        inactive=1d max_size=10g;

配置项解释:

总结:

(6)expires 缓存调优

缓存,主要针对于图片,css,js 等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存 365d,css,js,html 可以缓存个 10 来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的拓展名列出来。

Expires 缓存配置在 server 字段里面。如下:

location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {
 expires 30d;                             //缓存时间为30天
 #log_not_found off;                 //是否在 error_log 中记录不存在的错误
 access_log off;                            //不记录日志
}
location ~* \.(js|css)$ {
 expires 7d;              
 log_not_found off;    
 access_log off;              
}

expire 功能优点:

网站不希望被缓存的内容
1)网站流量统计工具;
2)更新频繁的文件(google 的 logo);

(7)防盗链

其实Nginx的防盗链与Apache的防盗链原理是一模一样,只是配置文件略微有点不同而已。

location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {     
        valid_referers none blocked  www.benet.com benet.com;     
        if ($invalid_referer) {        
                    #return 302  http://www.benet.com/img/nolink.jpg;        //要么定义到另一个网站,返回状态码为302
                    return 404;                      //要么访问状态码404
                    break;                                
                        }      
                            access_log off;  
                    } 

很简单的,这里就不进行配置验证了,对防盗链不了解的朋友可以参考深度优化Apache其中对Apache的优化有详细的介绍!

(8)内核参数优化

将所需的参数编写在/etc/sysctl.conf 文件中,使其生效即可!

常用的参数有:

———————— 本文至此结束,感谢阅读 ————————

推荐阅读:
  1. Nginx安装及深度优化(3)
  2. Nginx安装、实现反向代理及深度优化(2)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nginx深度优化 ginx

上一篇:go语言中的反射

下一篇:java中复制文件的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》