首页 > 系统相关 >Nginx优化与防盗链

Nginx优化与防盗链

时间:2024-06-19 18:27:42浏览次数:24  
标签:www nginx 优化 Nginx conf gzip root 防盗链

一 .Nginx 服务优化

        在企业信息化应用环境中,服务器的安全性和响应速度需要根据实际情况进行相应参数配置,以达到最优的用户体验。Nginx默认的安装参数只能提供最基本的服务,需要调整如网页缓存时间、连接超时、网页压缩等相应参数,才能发挥出服务器的最大作用。

1.隐藏版本号

        在生产环境中,需要隐藏 Nginx 的版本号,以避免泄漏 Nginx 的版本,使攻击者不能针对特定版本进行攻击。隐藏 Nginx版本号有两种方式,第一种是修改Nginx的主配置文件,第二种是修改 Nginx源码文件,指定不显示版本号。

(1)修改配置文件方式

        将 Nginx 主配置文件中的 server_tokens 选项值设置为 off,如没有该配置项,加上即可。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http {
server_tokens off;关闭版本号
}

在浏览器中用IP地址测试

(2)设置版本信息

        Nginx 源码文件 nginx-1.12.0/src/core/nginx.h 包含了版本信息,可以随意设置,然后重新编译安装,隐藏版本信息。

[root@www ~## vim nginx-1.12.0/src/coreinginx.h/编辑源码文件
#define NGINX VERSION    “1.1.1”                        //修改版本号
#define NGINX VER        "IIS" NGINX VERSION            //修改服务器类型


[root@www ~]# cd nginx-1.12.0/
[root@www nginx-1.12.0]#./configure --prefix/usr/local/nginx --user=nginx --group=nginx --with.http_stub_status_module && make && make install
[root@www nginx-1.12.0]# cd /usr/local/nginx/conf/
[root@www conf]# vim nginx.conf
http {
indude mime.types;
default_type application/octet-stream;
server_tokens on;                                        //打开版本号 on
[root@www conf]#systemctl restart nginx
[root@localhost core]# curl -i http://192.168.10.101
HTTP/1.1 200 OK
Server: IIS1.1.1

二.配置网页缓存时间

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

        修改Nginx的配置文件,在新location段加入expires参数,指定缓存时间,1d为一天

[root@www conf]# vi nginx.conf

location / {
    root html; 
    index index.html index.htm;
}

location ~\.(gif|jpg|jepg|png|bmp|ico)$ {        //加入新的 location
            root html;
            expires 1d;                          //指定缓存时间
}

三.日志切割

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

Nginx没有类似Apache的cronlog日志分割处理功能,但是可以通过Nginx的信号控制功能脚本来实现日志的自动切割,并将脚本加入到Linux的计划任务中,让脚本在每天的固定时间执行,便可实现日志切割功能。

(1)编写脚本/opt/fenge.sh,把Nginx的日志文件/usr/local/nginx/logs/access.log移动到目录/varog/nginx下面,以当前时间做为日志文件的名称,然后用kil-USR1创建新的日志文件/usr/local/nginx/logs/access.log, 最后删除30天之前的日志文件。

[root@www ~]# vim /opt/fenge.sh 
#!/bin/bash 
# Filename: fenge.sh 
d=$(date -d "-1 day" "+%Y%m%d") 
logs_path="/var/log/nginx" 
pid_path="/usr/local/nginx/logs/nginx.pid" 
[ -d $logs_path ] || mkdir -p $logs_path 
mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d 
kill -USR1 $(cat $pid_path) 
find $logs_path -mtime +30 |xargs rm -rf 

[root@www ~]# chmod +x /opt/fenge.sh //添加执行权
[root@www ~]# /opt/fenge.sh

备注:

  • kill -USR1 $(cat $pid_path)         ##重建新日志文件

  • find $logs_path -mtime +30 |xargs rm -rf         ##删除 30 天之前的日志文件

  • xargs:可以读取标准输入和管道中的数据,用于弥补有些命令(如echo、kill、rm)不能从管道中读取数据的不足。

  • kill -USR1 :停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。

(2)设置 crontab 任务,定期执行脚本自动进行日志分割

[root@www ~]# crontab -e 
30 1 * * *   /opt/fenge.sh

四.设置连接超时

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

keepalive_timeou设置连接超时

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
http {

    #keepalive_timeout  0;
    keepalive_timeout  65 180;


    client_header_timeout 80; 
    client_body_timeout 80;
}

备注:keepalive_timeo

第一个参数指定了与客户端的 keep-alive 连接超时时间,服务器将会在这个时间后关闭连接。第二个参数(可选)指定了在响应头 Keep-Alive: timeout=time 中的 time 值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。

        Client_header_timeout参数可用于指定等待客户端发送请求头的超时时间,Client_body_timeout 参数可用于指定请求体读超时时间

五.更改进程数

1.ps aux查看进程

        在高并发环境中,需要启动更多的Nginx进程以保证快速响应,用以处理用户的请求,避免造成阻塞。使用ps  aux命令查看Nginx运行进程的个数。从命令执行结果可以看出master process是Nginx的主进程,开启了1个:worker process是子进程,子进程也是开启了1个。

 [root@www con#] ps aux | grep nginx
       root    12410.00.020220 616       SS  17:06  0:00nginx:nast /usr/local/sbin/nginx
       nginx   1242 0.0 0.020664 1540 ?  S   17:06  0:00nginx:worker proces
       root      17355  0.0  0.0 112824   976 pts/3    R+   20:39   0:00 grep --color=auto nginx

2.修改Nginx配置文件的worker_processes参数

(1)查看主机cpu数量

[root@www ~]# cat /proc/cpuinfo | grep -c "physical"

(2)修改 Nginx 的配置文件的 worker_processes 参数

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
user  nginx;
worker_processes  4;

[root@www ~]# systemctl restart nginx
[root@www ~]# ps aux | grep nginx
root      17374  0.0  0.0  20548   644 ?        Ss   20:47   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     17376  0.0  0.0  20912  1344 ?        S    20:47   0:00 nginx: worker process
nginx     17377  0.0  0.0  20912  1344 ?        S    20:47   0:00 nginx: worker process
nginx     17376  0.0  0.0  20912  1344 ?        S    20:47   0:00 nginx: worker process
nginx     17377  0.0  0.0  20912  1344 ?        S    20:47   0:00 nginx: worker process
root      17400  0.0  0.0 112824   980 pts/3    S+   20:47   0:00 grep --color=auto nginx

(2)以设置每个进程分别由不同的 CPU 核心处理,达到 CPU 的性能最大化

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
user  nginx;
worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;

六.配置网页压缩

1.修改 Nginx 的配置文件,加入压缩功能参数

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
http {
#去掉gzip  on;前面的注释,增加其他的参数
    gzip  on;
    gzip_buffers 4 64k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_min_length 1k;
    gzip_vary on;
    gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpeg image/gif image/png;
}

[root@www ~]# systemctl restart nginx
  • gzip on:开启 gzip 压缩输出;
  • gzip_buffers 4 16k:表示申请 4 个单位为 16k 的内存作为压缩结果流缓存,默认值 是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果;
  • gzip_http_version 1.0:用于设置识别 http 协议版本,默认是 1.1,目前大部分浏览 器已经支持 gzip 解压,但处理较慢,也比较消耗服务器 CPU 资源;
  • gzip_comp_level 2:用来指定 gzip 压缩比,1 压缩比最小,处理速度最快;9 压缩 比最大,传输速度快,但处理速度最慢,使用默认即可;
  • gzip_min_length1k:用于设置允许压缩的页面最小字节数;
  • gzip_vary on:选项可以让前端的缓存服务器缓存经过 gzip 压缩的页面。
  • gzip_types text/plain:压缩类型,是对哪些网页文档启用压缩功能;

2.使用浏览器访问网址验证,http://192.168.10.101/

备注:

如果看不到压缩,将nginx配置文件中页面缓存的参数去掉,清空一下浏览器,再测试

七.配置防盗链

和前面配置Apache基本相同,不同的就是规则配置格式

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf

   location ~* \.(gif|jpg|jpeg)$ {
            valid_referers *.henan.com henan.com;
            if ($invalid_referer) {
                rewrite ^/ http://www.henan.com/error.png;
            }
        }

八.FPM

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

(1)安装带 FPM 模块的 PHP 环境,保证 PHP 可以正常运行

(2)FPM 进程的两种启动方式

Static 的方式可以使用 pm.max_children 指定启动的进程数量

Dynamic 方式的参数要根据服务器的内存与服务负载进行调整

(3)优化

        现有云服务器,运行了个人论坛,内存为 1.5G,fpm 进程数为 20,内存消耗近1G,处理比较慢,对参数进行优化处理。

root@www etc]# cd /usr/local/php5/etc/

[root@www etc]# vi php-fpm.conf 
pm=dynamic 
pm.max_children=20 
pm.start_servers=5 
pm.min_spare_servers=2 
pm.max_spare_servers=8

注释:

FPM 启动时有 5 个进程,最小空闲 2 个进程,最大空闲 8 个进程,最多可以有 20 个进程存在

标签:www,nginx,优化,Nginx,conf,gzip,root,防盗链
From: https://blog.csdn.net/henanxiaoman/article/details/139769402

相关文章