nginx优化

本文介绍了如何隐藏Web服务版本号以增强安全性,包括修改配置文件和源码编译。此外,还涉及修改Nginx用户和组、设置缓存时间、调整超时时间、增加进程数、开启GZIP压缩以及实现防盗链策略,以提高服务器的安全性和效率。

隐藏版本号

由于某些人会根据网页服务的版本号了解这个版本的比较重要的漏洞,然后通过这些漏洞攻击服务器所以需要隐藏版本号。

隐藏版本号有两种方式:
1、在配置文件里把版本号开启变为关闭,然后重载服务
2、对源码文件进行修改,然后重新编译

没有隐藏版本号前可以看到使用的是什么web服务以及版本号
在这里插入图片描述

1、修改配置文件

vim /usr/local/nginx/conf/nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;				#新添加这一段,表示关闭版本号
systemctl restart nginx

访问网页,可以发现只显示用什么web服务不显示版本号
在这里插入图片描述
虽然隐藏了版本号,但是使用了什么web服务任然能看出来,而nginx常用的版本就那么几个所以还是容易受到攻击,所以需要对源码进行修改然后编译。

2、修改源码并编译

vim /opt/nginx-1.15.9/src/core/nginx.h

#define nginx_version      1015009
#define NGINX_VERSION      "1.0.0"						#显示版本号
#define NGINX_VER          "看什么看/" NGINX_VERSION		#显示是什么服务

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

systemctl restart nginx

可以发现变成乱码了,因为./configure没设置中文字符集
在这里插入图片描述

修改用户和组

如果./configure时没有指定用户指定组,那么这个服务默认使用nobody用户,虽然nobody用户的权限较低,但是仍然有一定的隐患,可以通过在配置文件中修改用户和组以提升安全性

vim /usr/local/nginx/conf/nginx.conf
user  nginx nginx;						#配置文件第一行改一下属主属组
worker_processes  1;

chown nginx:nginx /usr/local/nginx

最后查看一下nginx服务的属主是否为nginx
在这里插入图片描述

设置缓存时间

设置缓存时间通常用于静态网页,为了减少服务器压力而设置。

vim /usr/local/nginx/conf/nginx.conf
location / {								
            root   html;
            index  index.html index.htm;
        }
        location ~ \.(gif|jpg|jepg|bmp|ico)$ {		#在文件中新添加这一段
            root   html;
            expires 1d;						#设置1天的缓存时间
        }

vim /usr/local/nginx/html/index.html		#在1415行添加
<h1>Welcome to nginx!</h1>
<img src="xxx.jpg"/>
然后再/usr/local/nginx/html目录下添加xxx.jpg图片
systemctl restart nginx

最后再验证一下
在这里插入图片描述

日志分割

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 -HUP $(cat $pid_path)				#-QUIT  结束进程 -HUP 平滑重启
find $logs_path -mtime +30 | xargs rm -rf

最后给文件可执行权限,然后执行,出现了这个日志文件
在这里插入图片描述

date -s 20210625			#修改系统时间
./rzfg.sh

再执行一次,发现多出一个日志文件
在这里插入图片描述

连接超时

vim /usr/local/nginx/conf/nginx.conf		#进入配置文件,在31行添加
keepalive_timeout  100;						#超时时间100s
client_header_timeout 100;					#请求头的超时时间100s
client_body_timeout 100;					#请求体的超时时间100s
systemctl restart nginx

之后当连接超过100s就会自动断开,再点开网页时会自动刷新一下

更改进程

增加进程数可以减少系统的消耗,提升了服务的速度

vim /usr/local/nginx/conf/nginx.conf			#进入配置文件
worker_processes  4;							#在开头添加
worker_cpu_affinity 0001 0010 0100 1000;

这里表示对4个cpu进行操作,每个cpu对应一个进程,1表示用这个cpu进行工作,0表示不启用这个cpu。

图片压缩

vim /usr/local/nginx/conf/nginx.conf	#在37行写入
gzip on;                  				#开启gzip压缩功能
     gzip_min_length 1k;     			#超过1k就进行压缩
     gzip_buffers 4 16k;     			#压缩的缓存大小为416k缓冲区大小
     gzip_http_version 1.1;  			#压缩版本
     gzip_comp_level 6;					#压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快(建议5-6)
     gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;	
     gzip_disable "MSIE [1-6]\.";		#配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
     gzip_vary on;						#支持前端缓存服务器存储压缩页面

重新访问网页,可以看到出现gzip压缩情况
在这里插入图片描述

盗链与防盗链

盗链

首先先设置盗链端,在另一个linux的ningx主页文件中设置

vim /usr/local/nginx/html/index.html
<h1>okey dokey!</h1>
<img src="http://192.168.214.215/xxx.jpg"/>			#图片指向要盗取的ip地址
重启服务后

访问盗链端可以看到被盗端的图片
在这里插入图片描述

防盗链

[root@localhost conf]# vim nginx.conf		#修改server端主机的nginx 配置文件

 location ~*\.(jpg|gif|swf)$ {				#对location (jpg那一端进行修改)
            valid_referers none blocked www.shiki.com;
            if ( $invalid_referer ) {
               rewrite ^/ http://www.shiki.com/error.png;	#注意一点,error图片的格式必须不在上面的匹配格式中,否则图片会加载不出来
            }
        }

valid_referers:设置信任的网站,即能引用相应图片的网站(白名单)
none:浏览器中 Referer为空的情况,就是直接在浏览器访问图片
blocked:referer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或者https://开头
后面的网址或者域名:referer中包含相关字符串的网址
if语句:如果链接的来源域名不在 valid_referers所列出的列表中, $invalid_referer为1,则执行后面的操作

重启服务,最后验证一下
在这里插入图片描述

为了优化 Nginx 的性能,以下是一些经过验证的最佳实践,涵盖了配置调整、网络优化和安全加固等多个方面: ### 调整 Nginx 工作进程和连接数 Nginx 的性能优化通常从调整其工作进程数和连接数开始。在多核系统上,建议将 `worker_processes` 设置为 CPU 核心数,以充分利用多核性能: ```nginx worker_processes auto; ``` 同时,每个工作进程可以处理的连接数可以通过 `worker_connections` 参数调整,该参数应根据系统资源进行设置。例如: ```nginx events { worker_connections 10240; use epoll; } ``` 这里的 `use epoll` 是针对 Linux 系统的高性能事件模型,可以显著提升高并发场景下的性能[^1]。 ### 启用 `sendfile` 和 `tcp_nopush`/`tcp_nodelay` 在 Nginx 的配置中启用 `sendfile` 可以减少数据在内核空间和用户空间之间的复制,提高文件传输效率: ```nginx sendfile on; ``` 此外,`tcp_nopush` 和 `tcp_nodelay` 用于优化 TCP 数据传输行为。`tcp_nopush` 适用于大文件传输,而 `tcp_nodelay` 适用于需要低延迟的交互式应用: ```nginx tcp_nopush on; tcp_nodelay on; ``` 这些设置能够减少网络延迟,提高数据传输效率[^1]。 ### 调整缓冲区大小 Nginx 的缓冲区大小对性能有直接影响。可以通过以下配置调整客户端请求头和请求体的缓冲区大小: ```nginx client_body_buffer_size 10K; client_header_buffer_size 1k; ``` 这些设置可以减少磁盘 I/O 操作,提升处理效率。对于高流量的站点,还可以考虑增加 `client_max_body_size` 以支持更大的上传文件: ```nginx client_max_body_size 20M; ``` 这些调整可以显著提升处理大请求时的性能表现[^1]。 ### 启用 Gzip 压缩 Gzip 压缩可以减少传输数据量,降低带宽占用。在 Nginx 中启用 Gzip 压缩可以通过以下配置实现: ```nginx gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_min_length 1024; gzip_comp_level 6; ``` 这些设置确保了常见文本类型的压缩,同时避免了对小文件进行压缩带来的额外开销。压缩可以显著减少客户端下载时间,尤其是在带宽受限的情况下。 ### 启用 HTTP/2 和 TLS 优化 HTTP/2 提供了更高效的多路复用机制,能够显著减少页面加载时间。为了启用 HTTP/2,需要配置 TLS 证书,并在 Nginx 中启用相应的模块: ```nginx listen 443 ssl http2; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ``` 此外,选择合适的 TLS 协议和加密套件可以提升安全性,同时不影响性能。TLS 1.3 是当前推荐的协议版本,它提供了更快的握手过程。 ### 启用缓存和负载均衡 Nginx 可以作为反向代理和负载均衡器使用,通过缓存静态资源来减少后端服务器的负载。例如,可以通过以下配置启用缓存: ```nginx location ~ \.(jpg|jpeg|gif|png|css|js|ico)$ { expires 30d; add_header Cache-Control "public, no-transform"; } ``` 此外,Nginx 支持多种负载均衡算法(如轮询、最少连接数、IP 哈希等),可以根据实际需求选择合适的策略: ```nginx upstream backend { least_conn; server backend1.example.com; server backend2.example.com; server backend3.example.com; } ``` 这些设置可以显著提升系统的整体性能和可用性[^3]。 ### 安全加固 在优化性能的同时,安全加固也是不可忽视的一部分。例如,确保 SELinux 或 AppArmor 等安全模块启用,可以防止未经授权的访问: ```bash # 查看 SELinux 状态 sestatus ``` 此外,设置正确的文件权限可以防止 Nginx 进程被攻击者利用。建议将 Nginx 文档根目录的权限设置为非 Nginx 用户拥有,并确保 Nginx 用户仅具有读取权限: ```bash # 查找由 nginx 用户拥有的文件 find /usr/local/nginx/html -user nginx # 修改文件所有权 chown root:root /usr/local/nginx/html/* ``` 这些设置可以有效提升系统的安全性[^2]。 ### 启用 WAF(Web 应用防火墙) 为了进一步提升安全性,可以集成 WAF(如 NAXSI 或 ModSecurity)来过滤恶意请求。例如,使用 NAXSI 可以阻止常见的 Web 攻击(如 SQL 注入、XSS 等): ```nginx location / { # 启用 NAXSI 规则 include /etc/nginx/naxsi.rules; proxy_pass http://backend; } ``` 这些规则可以显著提升系统的安全性,同时不影响性能。 ### 启用日志分析和监控 最后,启用日志分析和监控可以帮助及时发现性能瓶颈。可以通过以下配置启用访问日志和错误日志: ```nginx access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ``` 结合外部工具(如 Prometheus、Grafana 等),可以实时监控 Nginx 的性能指标,并进行调优[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值