nginx 优化和安装防盗链以及实验举例

2023-12-13 19:23:56

目录

nginx编译安装常用模块

生产中建议设置

nginx 内核限制文件优化

先将 nginx编译安装直至 systemctl命令使用 nginx服务

安全优化

隐藏 nginx版本号

查看版本号

隐藏版本信息

修改用户与组

限制单个 IP的访问频率和连接数

防盗链相关设置

在源主机里配置防盗链

nginx 日志分割脚本

nginx 内核优化

性能优化,每次更改完要记得重启服务哟

页面缓存时间

设置工作进程数

工作进程静态绑核

设置并发

连接保持超时

网页压缩


nginx编译安装常用模块

http_gzip_module ? ? ? ? ? ? ?#网页压缩模块
http_stub_status_module ? ? ? #状态统计模块
http_auth_basic_module ? ? ? ?#网页用户认证模块
http_fastcgi_module ? ? ? ? ? #fastcgi转发 php-fpm的模块
http_rewrite_module ? ? ? ? ? #URL重写模块
http_ssl_module ? ? ? ? ? ? ? #https安全加密模块
http_limit_conn_module ? ? ? ?#限制最大连接数模块
http_limit_req_module ? ? ? ? #限制最大访问频率模块
http_proxy_module ? ? ? ? ? ? #请求转发模块
http_image_filter_module ? ? ?#图片处理模块
http_upstream_*_module ? ? ? ?#负载均衡服务器列表模块
stream_*_module ? ? ? ? ? ? ? #四层代理转发模块

生产中建议设置

*   soft    noproc          65535 ? ? ? ? 打开的进程数
*   hard    noproc          65535
*   soft    nofile          65535 ? ? ? ? 打开的文件数
*   hard    nofile          65535
*   soft    memlock         unlimited ? ? 不做内存锁定
*   hard    memlock         unlimited

nginx 内核限制文件优化

/etc/security/limits.conf ? ? ? ? ?#内核限制文件路径

先将 nginx编译安装直至 systemctl命令使用 nginx服务

安全优化

隐藏 nginx版本号
查看版本号
#方法一:使用 curl命令访问主机IP
[root@localhost ~]# curl -I http://192.168.88.110
HTTP/1.1 200 OK
Server: nginx/1.25.3 #版本号
Date: Tue, 12 Dec 2023 01:45:11 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 12 Dec 2023 01:23:56 GMT
Connection: keep-alive
ETag: "6577b62c-267"
Accept-Ranges: bytes
?
#方法二
#cd到指定目录
[root@localhost ~]# cd /usr/local/nginx/html/
?
#将一个图片传输到虚拟机中
[root@localhost html]# rz -E
rz waiting to receive.
[root@localhost html]# ls
50x.html  index.html  下载.jpg
?
#如果是中文需要改为自定义英文
[root@localhost html]# mv 下载.jpg  xia.jpg
[root@localhost html]# ls
50x.html  index.html  xia.jpg

—— 进入虚拟机进行操作 ——

隐藏版本信息

方法一

#进入配置文件修改
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf

#检查 nginx语法是否正确
[root@localhost html]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

#重启 nginx服务
[root@localhost html]# systemctl restart nginx.service

#验证版本号是否隐藏
[root@localhost html]# curl -I http://192.168.88.110
HTTP/1.1 200 OK
Server: nginx #已经隐藏
Date: Tue, 12 Dec 2023 03:12:49 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 12 Dec 2023 01:23:56 GMT
Connection: keep-alive
ETag: "6577b62c-267"
Accept-Ranges: bytes

方法二

#cd到安装文件位置
[root@localhost html]# cd /opt

#停止 nginx服务
[root@localhost opt]# systemctl stop nginx.service 

#cd到指定目录
[root@localhost opt]# cd nginx-1.25.3/

#cd到内核文件所在目录
[root@localhost nginx-1.25.3]# cd src/core/

#进入配置文件
[root@localhost core]# vim nginx.h

#查看之前的配置
[root@localhost core]# nginx -V
nginx version: nginx/1.25.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

#cd到指定目录进行编译安装
[root@localhost core]# cd /opt/nginx-1.25.3/
[root@localhost nginx-1.25.3]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost nginx-1.25.3]# make && make install

#进入配置文件进行更改
[root@localhost nginx-1.25.3]# vim /usr/local//nginx/conf/nginx.conf

#重启 nginx服务
[root@localhost nginx-1.25.3]# systemctl restart nginx

#验证
[root@localhost nginx-1.25.3]# curl -I http://192.168.88.110 
HTTP/1.1 200 OK
Server: mhy/123 #显示为自定义内容
Date: Tue, 12 Dec 2023 03:45:37 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 12 Dec 2023 01:23:56 GMT
Connection: keep-alive
ETag: "6577b62c-267"
Accept-Ranges: bytes

修改用户与组
#创建一个自定义用户
[root@localhost nginx-1.25.3]# useradd -s /sbin/nologin mhy
?
#进入配置文件进行更改
[root@localhost nginx-1.25.3]# vim /usr/local//nginx/conf/nginx.conf

#重启 nginx服务
[root@localhost nginx-1.25.3]# systemctl restart nginx.service 

#查看是否修改成功
[root@localhost nginx-1.25.3]# ps aux |grep mhy
mhy       56039  0.0  0.0  23068  1380 ?        S    12:05   0:00 nginx: worker process
root      56041  0.0  0.0 112676   980 pts/1    R+   12:05   0:00 grep --color=auto mhy

限制单个 IP的访问频率和连接数
#进入配置文件并进行添加修改
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=20r/s; limit_conn_zone $binary_remote_addr zone=addr:10m;
...
limit_req zone=req_zone burst=5 nodelay;
limit_conn addr 5;
...


防盗链相关设置
  • 在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费

  • Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理

准备两台虚拟机,编译安装 nginx,源主机:192.168.88.110

盗链主机:192.168.88.60

—— 配置源主机

#cd到指定目录,下载图片
[root@localhost ~]# cd /usr/local/nginx/html/
[root@localhost html]# ls
50x.html  index.html  R-C.jpg

#进入配置文件,添加配置
[root@localhost html]# vim /etc/hosts

#进入配置文件,添加配置
[root@localhost html]# vim index.html

显示结果;源主机上操作

—— 配置盗链主机

#yum安装 httpd服务
[root@localhost ~]# yum install -y httpd

#cd到指定目录
[root@localhost ~]# cd /var/www/html/

#进入配置文件
[root@localhost html]# vim index.html
<html>
<body>
<h1>盗链</h1>
<img src="http://www.wx.com/R-C.jpg"/>
</body>
</html>

#进入配置文件
[root@localhost html]# vim /etc/hosts

#重启 http服务
[root@localhost html]# systemctl restart httpd

在盗链主机上访问本机网址;访问源主机网址

在源主机里配置防盗链
#在指定目录下 /usr/local/nginx/html/添加防盗图片
[root@localhost html]# ls
16212205693486036.jpg  50x.html  index.html  R-C.jpg

#将图片名更改为 error.png
[root@localhost html]# mv  16212205693486036.jpg  error.png
[root@localhost html]# ls
50x.html  error.png  index.html  R-C.jpg

#进入配置文件
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
        location ~* \.(jpg|gif|swf)$ {
                        valid_referers none blocked *.wx.com wx.com;
                        if ( $invalid_referer ) { 
                                rewrite ^/ http://www.wx.com/error.png;
             }   
        }  

#重启 nginx服务
[root@localhost html]# systemctl restart nginx

#检查 nginx配置是否有语法错误
[root@localhost html]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

实验结果

在源主机上访问源主机网址 www.wx.com

在盗链主机上访问源主机网址 www.wx.com以及访问盗链主机自己的网址 www.hi.com,都会显示源主机设定的防盗图片,隐藏真实图片


nginx 日志分割脚本
#cd到指定目录,日志分割脚本要在此目录下
[root@localhost ~]# cd /usr/local/nginx

#编写脚本,自定义脚本名
[root@localhost nginx]# vim nginx_log.sh
#!/bin/bash
#this is used for cutting nginx logs 
##定义日志收集的目录
newlogpath=/var/log/nginx
##定义区分日志的标识,采用时间标记,计划每天一次日志分割
lastday=`date -d "-1 day" +%Y%m%d`
##找到应用程序生成日志的源路径
oldlogpath=/usr/local/nginx/logs
##定义应用程序的pid号 也就是nginx的master进程号
pid=`cat ${oldlogpath}/nginx.pid`
 
##先判断收集日志的目录是否存在,没有则创建,有则进行下一步
[ -d $newlogpath ]||mkdir $newlogpath
 
##使用mv命令进行日志分割,将生成的访问日志和错误日志都移动到收集日志的目录下,并添加时间标记
mv $oldlogpath/access.log $newlogpath/access.log.$lastday
mv $oldlogpath/error.log $newlogpath/error.log.$lastday
 
##重新生成新的日志,便于nginx记录后续访问事务
kill -USR1 $pid
 
##删除大于30天的日志,释放磁盘空间
find $newlogpath -mtime +30 -exec rm -rf {} \;
#给脚本文件添加运行权限
[root@localhost nginx]# chmod +x /usr/local/nginx/nginx_log.sh

#编辑定时任务,每天执行一次
[root@localhost nginx]#crontab -e
 * * */1 * *     /usr/local/nginx/nginx_log.sh

nginx 内核优化
#进入配置文件,添加配置
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 10000
net.ipv4.tcp_keepalive_time = 1200


性能优化,每次更改完要记得重启服务哟

页面缓存时间
#进入配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

#cd到指定目录,并传输一张图片 ha.jpg
[root@localhost ~]# cd /usr/local/nginx/html
[root@localhost html]# ls
50x.html  error.png  ha.jpg  index.html  R-C.jpg

#重启 nginx服务
[root@localhost html]# systemctl restart nginx

实验结果;搜索成功后,电脑键盘按F12,才出现以下右边的界面


设置工作进程数
#进入配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf


工作进程静态绑核
#进入配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

注释:根据虚拟机的处理器个数决定,例:虚拟机有四个处理器,那就是 0001 0010 0100 1000;虚拟机有三个处理器,那就是 001 010 100



设置并发
#进入配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf


连接保持超时
#进入配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf


网页压缩
#进入配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf   
   gzip on;							
   gzip_min_length 1k;      		
   gzip_buffers 4 64k;      		
   gzip_http_version 1.1;   		
   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;
#注释
   gzip on;							#取消注释,开启gzip压缩功能
   gzip_min_length 1k;      		#最小压缩文件大小
   gzip_buffers 4 64k;      		#压缩缓冲区,大小为4个64k缓冲区
   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;		#压缩类型,表示哪些网页文档启用压缩功能

#重启服务
[root@localhost ~]# systemctl restart nginx

实验结果

文章来源:https://blog.csdn.net/WXALY/article/details/134977448
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。