Nginx服务优化

 查看版本号

方法一:使用Curl命令

curl -I http://192.168.X.X

方法二

#先把图片放到Html目录下
cd /usr/local/nginx/html
#在网页中查看

(1)隐藏版本号

方法一:修改配置文件

1.#修改配置文件
vim /usr/local/nginx/conf/nginx.conf

2.#修改文件内容

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;                              #添加,关闭版本号
    ......
}

2#测试文件语法
nginx -t

3.#重启nginx
systemctl restart nginx
 

4.#查看版本是否被隐藏
curl -I http://192.168.X.X

方法二:修改源文件,重新编译安装

1. #切换至nginx安装包所在目录
cd /opt/
2. #停止nginx服务
systemctl stop nginx.service
3. #切换至安装目录
cd nginx-1.12.0/
4. #切换至内核目录
cd src/core/
5. #进入配置文件
vim nginx.h

#define NGINX_VERSION      "yxp"
#define NGINX_VER          "yyy/" NGINX_VERSION

6. #切换至文件目录
cd ../../

7. #编译
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

8. #安装
make && make install -j4

9. #将配置文件下的之前关闭版本信息开启
vim /usr/local/nginx/conf/nginx.conf
server_tokens on;

10. #重启nginx
systemctl restart nginx

11. #查看版本信息
curl -I http://192.168.59.118

(2)修改用户与组

方法一:在配置Nginx时,./configure后面指定用户与组的参数

./configure
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

方法二:修改配置文件Nginx配置文件 nginx.conf指定组与用户

#到/usr/local/nginx/conf
cd /usr/local/nginx/conf

#编辑nginx.conf
2 user nginx nginx

#重启nginx
systemctl restart nginx

#查看进程运行情况
ps aux | grep nginx

(3)配置网页缓存

当nginx将网页数据返回给客户端后,可设置缓存时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度一般针对静态网页设置,对动态网页不设置缓存时间。

#先将图片放到Nginx的工作目录下,/usr/local/nginx/html


#修改Nginx配置文件,重新复制Location 加入expires
vim /usr/local/nginx/nginx.conf

#修改内容如下
http {
......
	server {
	...... 
		location / {
			root html;
			index index.html index.htm;
		}
		
		location ~ \.(gif|jpg|jepg|png|bmp|ico)$ { 		#加入新的 location,以图片作为缓存对象
			root html;
			expires 1d;							#指定缓存时间,1天
		}
......
	}
}
#重启nginx
systemctl restart nginx

#进入页面测试
http://192.168.x.x

(4)日志切割

随着Nginx运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx的运行状态,需要时刻关注Nginx日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。

1. #写脚本
vim /usr/local/nginx/nginx_log.sh 

#!/bin/bash
#this is for divide nginx log
d=$(date +%F -d -1day)                                       #显示前一天的时间
path="/var/log/nginx"   
pid="/usr/local/nginx/logs/nginx.pid"

[ -d $path ] ||mkdir -p $path                                #创建日志文件目录
mv /usr/local/nginx/logs/access.log ${path}/www.yxp.com-$d   #移动并重命名日志文件
kill -USR1 $(cat $pid)                                       #重建新日志文件
find $path -mtime +30 -delete                                #删除30天之前的日志文件

2. #赋予权限
chmod +x /usr/local/nginx/nginx_log.sh 

3. #计划任务
[root@localhost nginx]#crontab -e

#将下面写入crontab -e 中
30 1 * * * /usr/local/nginx/nginx_log.sh

(5)设置连接超时

nginx 版本查询Windows nginx的版本号怎么查看_nginx 版本查询Windows


HTTP服务有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态若接收到来自同一客户端的其他请求,服务端会利用这个被被关闭的连接,而不需要再次建立一个连接

KeepAlive在一段时间内保持打开状态,它们会在这段时间内占用资源,占用过多就会影响服务器的性能

在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout超时

时间。
 

1. #修改配置文件(server上面)
vim /usr/local/nginx/conf/nginx.conf

    #keepalive_timeout  0;
    keepalive_timeout  65 180;

2. #重启nginx服务
systemctl restart nginx.service

3. #在网页中测试
http://192.168.59.118/game.png

Nginx优化深入

(1)更改进程数

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞

1. #统计cpu核数
cat /proc/cpuinfo |grep processor|wc -l
或
cat /proc/cpuinfo |grep -c processor

2. #查看目前有的核数
ps -aux |grep nginx


3. #修改 Nginx 的配置文件worker_processes 参数,一般设为 CPU 的个数或者核数,在高并发的情况下可设置为 CPU 个数或者核数的 2 倍,可以查看 CPU 的核数以确定参数。(第三行修改)
vim /usr/local/nginx/conf/nginx.conf

worker_processes  16;

4. #重启服务并查看nginx系统运行情况
systemctl restart nginx.service
ps -aux |grep nginx

(2)配置网页压缩

  • Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
  • 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
1. #修改配置文件(添加一下内容)
  gzip on;                          #取消注释,开启gzip压缩功能
   gzip_min_length 1k;              #最小压缩文件大小
   gzip_buffers 4 16k;              #压缩缓冲区,大小为4个16k缓冲区
   gzip_http_version 1.1;           #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
   gzip_comp_level 6;               #压缩比率
   gzip_vary on;                    #支持前端缓存服务器存储压缩页面
   gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;       #压缩类型,表示哪些网页文档启用压缩功能

2. #重启服务
systemctl restart nginx.service 


3. #网页查看(后面是你放的图片)
http://192.168.x.x/game.png

(3)配置防盗链

  • 在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。
  • Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。
网页准备




##盗链网站主机(192.168..59.108)网页准备
1. #再开一台centos服务器,安装httpd
yum install -y httpd


2. #切换至/var/www/html
cd /var/www/html
vim index.html 

<html>
<body>
<h1>this is yxp
<img src="http://www.yxp.com/game.jpg"/>
</body>
</html>

3. #在Web源主机(192.168.59.118)添加域名
vim /etc/hosts

192.168.59.118 www.yxp.com

4. #在Web源主机(192.168.59.118)添加图片
vim /usr/local/nginx/html/index.html 

<img src="game.png">

5. #在盗链网站主机(192.168..59.108)添加域名
192.168.59.118 www.yxp.com
192.168.59.108 www.dhc.com


6. #在盗链网站开启服务,并在网页中测试
systemctl start httpd
1. #在Web源主机(192.168.59.118)
vim /usr/local/nginx/conf/nginx.conf

     location ~* \.(jpg|swf)$ { 
                  valid_referers none blocked *.yxp.com yxp.com;
            if ( $invalid_referer ) {
                           rewrite ^/ http://www.yxp.com/error.png;
                           }
}
        

~* \.(jpg|swf)$:以正则表达式表示,匹配不区分大小写,以jpg或者swf结尾的文件
valid_referers :设置信任的网站,可以正常使用图片
none:浏览器中referer为空,就是直接在浏览器访问图片
blocked:浏览器中referer不为空的情况,但是值被代理或防火墙删除,这些不易http//或者https://开头
后面的网址或者域名:referer中包含相关字符串的网址

2. #检查语法是否有错
nginx -t

3. #将盗图图片拖进去
cd /usr/local/nginx/html/

4. #重启服务
systemctl restart nginx.service

5. #在网页测试
源主机网页:  http://www.yxp.com/
盗链主机网页: http://www.dhc.com/

(4)FPM参数优化

Nginx的php解析功能实现如果是交由fpm处理,为了提高php的处理速度,可对FPM进行参数调整。

1》首先安装带fpm模块的php环境,保证php可以正常运行

2》FPM进程的两种方式,有pm参数指定。

staic:将产生固定数据的fpm进程。

dybamic:将以动态的方式产生fpm进程。

#到/usr/local/php  /etc 下
cd /usr/local/php(php+版本号)/etc 

#修改配置文件
vim php-fpm.conf
pm=dynamic
pm.max_children=20 #指定启动的进程的最大核数
pm.start_servers=5 #动态方式下初适化的ftpm进程数量
pm.min_spare_servers=2 #动态方式下最小的fpm空闲进程数量
pm.max_spare_servers=8 #动态方式下最大的fpm空闲进程数量