【网站架构部署与优化】Nginx优化
文章目录
- Nginx服务优化
- 一、隐藏Nginx版本号,避免安全漏洞泄漏
- 方法一:通过修改配置文件
- 方法二:通过修改源码并重新编译安装
- 修改Nginx的用户和组
- 修改用户与组
- 配置Nginx网页缓存时间
- 配置Nginx连接保持的超时时间
- KeepAlive模式简介
- Nginx中的超时设置
- 配置Nginx日志切割
- Nginx日志切割
- Linux文件时间参数小知识
- 更改Nginx进程数以优化高并发性能
- 背景
- 步骤
- 配置Nginx网页压缩
- 一、网页内容压缩
- 步骤:
- 二、网页图片大小压缩
- 步骤:
- 注意:
- 配置Nginx防盗链
- 配置步骤:
- 网页准备:
- Web源主机(192.168.80.10)配置:
- 盗链网站主机(192.168.80.12)配置:
- 验证防盗链配置:
- FPM参数优化
- 配置步骤:
- 注意
- Nginx常用模块
- HttpProxyModule
- HttpRewriteModule
- HttpSSLModule
- HttpGzipModule
- HttpCacheModule(注意:Nginx标准版中不直接包含名为HttpCacheModule的模块,但可通过proxy_cache等指令实现缓存功能)
- HttpAccessModule(注意:Nginx标准版中不直接称为HttpAccessModule,但功能相似)
- HttpUpstreamModule
- Nginx限流
- 一、正常限制访问频率(正常流量)
- 二、突发限制访问频率(突发流量)
- 三、限制并发连接数
- 总结以及补充
- Nginx配置文件优化
- 系统内核优化
- Nginx模块
Nginx服务优化
一、隐藏Nginx版本号,避免安全漏洞泄漏
Nginx的版本号可能会暴露服务器的一些信息,因此有时我们需要隐藏它以提高安全性。
方法一:通过修改配置文件
- 编辑Nginx配置文件
使用vim
或其他文本编辑器打开Nginx的配置文件:
vim /usr/local/nginx/conf/nginx.conf
- 关闭版本号显示
在http
块中添加或修改以下行:
server_tokens off;
这行代码会告诉Nginx在响应头中不包含版本信息。
3. 重启Nginx服务
保存并退出编辑器后,重启Nginx服务以使更改生效:
systemctl restart nginx
- 验证更改
使用curl
命令检查响应头是否已不再包含版本信息:
curl -I http://192.168.80.10
方法二:通过修改源码并重新编译安装
这种方法更为深入,适用于需要自定义版本号或服务器标识的情况。
- 编辑源码文件
打开Nginx的源码文件nginx.h
:
vim /opt/nginx-1.12.0/src/core/nginx.h
修改以下两行以更改版本号和服务器类型:
#define NGINX_VERSION "1.1.1" // 修改为你想要的版本号
#define NGINX_VER "IIS/" NGINX_VERSION // 修改服务器类型,例如"IIS"
- 重新编译和安装Nginx
在源码目录中运行以下命令以重新配置、编译和安装Nginx:
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
- 启用版本号显示(可选)
如果你想在配置文件中再次启用版本号显示,可以在nginx.conf
中设置:
server_tokens on;
- 重启Nginx服务
保存所有更改并重启Nginx服务:
systemctl restart nginx
- 验证更改
再次使用curl
命令检查响应头:
curl -I http://192.168.80.10
注意:修改源码并重新编译安装是一个更为复杂的过程,通常只在需要深度定制Nginx时采用。对于大多数情况,简单地修改配置文件就足够了。
修改Nginx的用户和组
修改用户与组
为了提高Nginx服务器的安全性,通常建议将Nginx运行在非root用户下。
- 编辑Nginx配置文件
使用vim
或其他文本编辑器打开Nginx的配置文件:
vim /usr/local/nginx/conf/nginx.conf
- 修改用户与组
找到user
指令,并修改为指定的用户和组(例如nginx
):
user nginx nginx;
如果该行被注释掉了,请取消注释。
3. 重启Nginx服务
保存并退出编辑器后,重启Nginx服务以使更改生效:
systemctl restart nginx
- 验证更改
使用以下命令查看Nginx进程的用户与组:
ps aux | grep nginx
你应该能看到主进程由root创建,而子进程由指定的用户(这里是nginx
)创建。
配置Nginx网页缓存时间
设置缓存时间可以加快网页的加载速度,尤其是对于静态内容。
- 编辑Nginx配置文件
同样地,打开Nginx的配置文件:
vim /usr/local/nginx/conf/nginx.conf
- 添加缓存设置
在适当的location
块中添加或修改以下内容,以设置特定文件类型的缓存时间:
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {root html;expires 1d; # 设置缓存时间为1天
}
注意:这里我修正了文件类型中的一个小错误(jepg
应为jpeg
)。
3. 重启Nginx服务
保存并退出编辑器后,再次重启Nginx服务:
systemctl restart nginx
- 验证缓存设置
在浏览器中访问一个设置了缓存的静态资源(例如:http://192.168.80.10/game.jpg
),然后查看响应头信息。你应该能看到类似以下的缓存控制指令:
Cache-Control: max-age=86400
这表示资源已被缓存,且在接下来的86400秒(即1天)内,浏览器会直接从缓存中加载该资源,而不会重新向Nginx服务器发送请求。
通过以上步骤,你可以轻松地修改Nginx的用户与组,并为静态资源设置合适的缓存时间,从而提高服务器的安全性和性能。
配置Nginx连接保持的超时时间
Nginx连接超时设置
KeepAlive模式简介
HTTP的KeepAlive模式允许Web服务器在处理完一个请求后保持TCP连接处于打开状态。这样,如果同一客户端发送后续请求,服务器可以直接利用这个已打开的连接,而无需重新建立新的连接。然而,长时间保持连接会占用服务器资源,如果过多,可能会影响性能。
Nginx中的超时设置
- 编辑Nginx配置文件
使用vim
或其他文本编辑器打开Nginx的配置文件:
vim /usr/local/nginx/conf/nginx.conf
- 设置KeepAlive超时
在http
块中,设置keepalive_timeout
参数来控制KeepAlive连接的超时时间:
keepalive_timeout 60 50;
- 第一个参数(60秒)指定连接最多可以保持多长时间。设置为60秒可以确保与大多数浏览器的默认行为兼容。
- 第二个参数(50秒)是可选的,用于设置响应头
Keep-Alive: timeout=time
中的时间值。这可以帮助浏览器在达到指定时间后主动关闭连接。
如果将第一个参数设置为0,则会禁用KeepAlive连接。
- 设置客户端请求头超时
设置client_header_timeout
来指定客户端发送完整请求头的超时时间:
client_header_timeout 15;
如果在15秒内客户端没有发送完整的请求头,Nginx将返回HTTP 408(Request Timed Out)错误。
4. 设置客户端请求体超时
设置client_body_timeout
来指定客户端发送请求体的超时时间:
client_body_timeout 15;
如果在15秒内客户端没有发送任何请求体内容,Nginx同样会返回HTTP 408错误。
5. 重启Nginx服务
保存并退出编辑器后,重启Nginx服务以使更改生效:
systemctl restart nginx
通过合理设置Nginx的超时参数,可以有效管理服务器资源,提高服务的稳定性和性能。确保这些设置与您的应用需求和客户端行为相匹配,以达到最佳效果。
配置Nginx日志切割
Nginx日志切割
为了管理Nginx日志文件的大小并防止日志文件过大,我们可以使用日志切割脚本定期将旧的日志文件移动到其他位置,并创建新的日志文件。以下是一个简单的日志切割脚本示例:
- 创建日志切割脚本
编辑/opt/fenge.sh
文件,添加以下内容:
#!/bin/bash
# Filename: fenge.shday=$(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}/xy101.com-access.log-$day# 发送USR1信号给Nginx主进程,通知它重新打开日志文件
kill -USR1 $(cat $pid_path)# 删除30天前的日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;
- 赋予脚本执行权限
chmod +x /opt/fenge.sh
- 手动运行脚本测试
/opt/fenge.sh
检查日志文件是否已正确切割和重命名。
4. 设置定时任务
使用crontab
设置每天凌晨1点自动运行日志切割脚本:
crontab -e
添加以下行:
0 1 * * * /opt/fenge.sh
Linux文件时间参数小知识
在Linux操作系统中,每个文件都有三个重要的时间参数:ctime
、atime
和mtime
。
-
ctime (status time):
当文件的权限或属性被修改时,ctime
会更新。它并不表示文件的创建时间,而是表示文件状态的最后更改时间。仅当文件的属性或权限发生变化时,ctime
才会更新,而文件内容的更改不会影响ctime
。 -
atime (access time):
每次访问文件(例如读取文件内容)时,atime
都会更新。这有助于跟踪文件的访问频率和最近的使用情况。 -
mtime (modification time):
当文件的内容被修改时,mtime
会更新。这是文件内容最后一次被更改的时间戳。与ctime
不同,更改文件的权限或属性不会影响mtime
。
更改Nginx进程数以优化高并发性能
背景
在高并发场景下,为了保证服务器能够快速响应用户请求并避免阻塞,可能需要启动更多的Nginx工作进程。合理配置Nginx的工作进程数和CPU亲和性可以显著提升服务器的性能。
步骤
- 查看CPU核数
使用以下命令查看服务器的CPU物理核心数量:
cat /proc/cpuinfo | grep -c "physical id"
这个命令会输出服务器的CPU物理核心数。
2. 查看当前Nginx进程数
运行以下命令查看当前Nginx主进程中包含的子进程数量:
ps aux | grep nginx
这将显示Nginx的工作进程数。
3. 编辑Nginx配置文件
使用vim
或其他文本编辑器打开Nginx的配置文件:
vim /usr/local/nginx/conf/nginx.conf
- 修改工作进程数
根据服务器的CPU核数调整worker_processes
参数。通常情况下,这个数值可以设置为CPU总核数,但一般不超过8个:
worker_processes 2; # 修改为CPU的总核数
- 设置CPU亲和性(可选)
如果希望进一步优化性能,可以通过设置worker_cpu_affinity
参数将每个Nginx工作进程绑定到特定的CPU物理核心上。这样可以减少进程在不同核心间的切换,提高缓存命中率,从而提升性能:
worker_cpu_affinity 01 10; # 当进程数为4时,可以设置为0001 0010 0100 1000
这里的数字是二进制表示,每一位对应一个CPU核心。例如,01
表示第一个核心,10
表示第二个核心。
6. 重启Nginx服务
保存并退出编辑器后,重启Nginx服务以使更改生效:
systemctl restart nginx
- 设置
worker_processes
时,应考虑服务器的内存和CPU资源,避免设置过高导致资源竞争。 - 使用
worker_cpu_affinity
时,应根据实际的CPU核心布局和负载情况进行调整。
配置Nginx网页压缩
一、网页内容压缩
Nginx通过ngx_http_gzip_module
模块提供了网页内容的压缩功能,有助于减少传输数据的大小,节约网站带宽,并提升用户的访问体验。
步骤:
-
编辑Nginx配置文件
打开Nginx的配置文件:vim /usr/local/nginx/conf/nginx.conf
-
启用Gzip压缩及相关优化
在http
块中添加或修改以下配置:gzip on; # 开启gzip压缩功能 gzip_min_length 1k; # 最小压缩文件大小 gzip_buffers 4 16k; # 压缩缓冲区设置 gzip_http_version 1.1; # 识别HTTP协议版本 gzip_comp_level 5; # 压缩比率设置 gzip_vary on; # 支持前端缓存服务器存储压缩页面 gzip_disable "MSIE [1-6]\."; # 禁用IE6及以下版本的gzip压缩 gzip_types text/plain text/javascript text/css text/xml application/x-javascript application/xml application/x-httpd-php application/javascript application/json image/jpeg image/gif image/png; # 指定压缩类型
-
重启Nginx服务
保存并退出编辑器后,重启Nginx服务以应用更改:systemctl restart nginx
二、网页图片大小压缩
Nginx通过http_image_filter_module
模块提供了图片处理功能,可以实时缩放图片等。
步骤:
-
安装依赖
安装gd-devel
库,这是http_image_filter_module
模块所依赖的:yum install -y gd-devel
-
重新编译Nginx
进入Nginx源码目录,并添加http_image_filter_module
模块,然后重新编译安装:cd /opt/nginx-1.12.0/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_image_filter_module make && make install
-
配置图片压缩
在Nginx配置文件的server
块中添加图片压缩规则:location ~* \.(jpg|gif|png)$ {image_filter resize 200 200; # 按等比例缩小图像至指定大小 }
-
测试配置
cd /usr/local/nginx/html 先将game.jpg文件传到/usr/local/nginx/html目录下 vim index.html ...... <img src="game.jpg"/>#网页中插入图片 </body> </html>
5.重启Nginx服务
systemctl restart nginx
在Linux系统中,打开火狐浏览器,右击点查看元素
选择 网络 —> 选择 HTML、WS、其他
访问 http://192.168.80.10 ,双击200响应消息查看响应头中包含 Content-Encoding: gzip
注意:
Nginx的Gzip压缩功能虽然好用,但是下面两类文件资源不太建议启用此压缩功能。
- 图片/视频类型资源 原因:图片如jpg、png文件本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费资源。
- 大文件资源 原因:会消耗大量的cpu资源,且不一定有明显的效果。
配置Nginx防盗链
配置步骤:
- 编辑Nginx配置文件
打开Nginx的配置文件:vim /usr/local/nginx/conf/nginx.conf
- 添加防盗链规则
在server
块中针对图片文件类型(如jpg, gif, swf)添加以下配置:location ~* \.(jpg|gif|swf)$ {valid_referers none blocked *.xy101.com;if ($invalid_referer) {rewrite ^/ http://www.xy101.com/error.png;#return 403;} }
~* \.(jpg|gif|swf)$
:这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件。valid_referers
:设置信任的网站,可以正常使用图片。none
:表示无Referer值的情况。直接访问url,而不使用任何网站或链接的跳转,Referer值是空的。blocked
:表示Referer值被防火墙进行伪装。*.xy101.com
:表示允许请求访问资源的主机名,可以使用通配符"*
"号。
这段配置的作用是检查HTTP请求头中的Referer字段,如果请求不是从指定的主机名或IP地址发起的,则拒绝该请求,即进行 write 地址重写或返回 403 错误页面。
3. 重启Nginx服务
保存并退出编辑器后,重启Nginx服务以应用更改:
systemctl restart nginx
网页准备:
Web源主机(192.168.80.10)配置:
- 将
game.jpg
和error.png
文件放到/usr/local/nginx/html
目录下。 - 编辑
index.html
文件,添加图片链接:…… <img src="game.jpg"/> </body> </html>
- 更新
/etc/hosts
文件,添加域名映射:echo "192.168.80.10 www.xy101.com" >> /etc/hosts
盗链网站主机(192.168.80.12)配置:
- 编辑
index.html
文件,添加指向源站图片的链接:…… <img src="http://www.xy101.com/game.jpg"/> </body> </html>
- 更新
/etc/hosts
文件,添加域名映射:echo "192.168.80.12 www.xy102.com" >> /etc/hosts
验证防盗链配置:
- 在盗图网站主机上打开浏览器,访问
http://www.xy102.com
。 - 应该能看到原本应该显示的图片被替换成了
error.png
,这表明防盗链配置成功。
FPM参数优化
为了提高PHP的处理速度,可以根据服务器的内存与服务负载调整FPM(FastCGI Process Manager)模块的参数。
配置步骤:
- 编辑FPM主配置文件
打开PHP-FPM的主配置文件:
确保vim /usr/local/php/etc/php-fpm.conf
pid
参数指向正确的PID文件路径:pid = run/php-fpm.pid
- 编辑FPM池配置文件
打开具体的FPM池配置文件(例如www.conf
):vim /usr/local/php/etc/php-fpm.d/www.conf
- 调整FPM进程管理参数
根据服务器性能和应用需求调整以下参数:pm
:进程管理方式,可选static
或dynamic
。dynamic
表示动态管理进程数量。pm = dynamic
pm.max_children
:允许的最大子进程数。这个数值应根据服务器的内存大小和PHP脚本的资源消耗来设置。pm.max_children = 100
pm.start_servers
:动态模式下启动时默认开启的进程数。它应该在pm.min_spare_servers
和pm.max_spare_servers
之间。pm.start_servers = 5
pm.min_spare_servers
:动态模式下保持的最小空闲进程数。pm.min_spare_servers = 2
pm.max_spare_servers
:动态模式下保持的最大空闲进程数。pm.max_spare_servers = 8
- 重启PHP-FPM服务
修改配置后,需要重启PHP-FPM服务以使更改生效:
使用以下命令检查FPM是否正在监听9000端口:kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
netstat -anpt | grep 9000
注意
- 参数调整应根据实际服务器性能和应用负载进行测试和优化。
pm.max_children
的值不宜设置过高,以免消耗过多内存资源。- 确保
pm.start_servers
、pm.min_spare_servers
和pm.max_spare_servers
的设置合理,以维持服务的稳定性和响应速度。
Nginx常用模块
HttpProxyModule
功能:作为反向代理服务器,将客户端请求转发到后端服务器。
使用方法:
- 使用
proxy_pass
指令指定后端服务器的地址和端口。 - 可配置负载均衡(如
proxy_pass http://backend;
,其中backend
是upstream模块定义的服务器组)。 - 可启用缓存、SSL/TLS加密等。
HttpRewriteModule
功能:URL重写和重定向。
使用方法:
- 使用
rewrite
指令根据正则表达式匹配请求URI,并进行重写或重定向。 - 示例:
rewrite ^/some/(.*)$ /$1 last;
将/some/example
重写为/example
。
HttpSSLModule
功能:支持SSL/TLS加密。
使用方法:
- 配置SSL证书、密码套件、协议版本等。
- 使用
listen 443 ssl;
设置HTTPS监听端口,并通过ssl_certificate
和ssl_certificate_key
指定证书和密钥。
HttpGzipModule
功能:对响应进行压缩,减少传输数据量。
使用方法:
- 使用
gzip on;
启用gzip压缩。 - 可配置压缩级别(如
gzip_comp_level 6;
)、压缩类型等。
HttpCacheModule(注意:Nginx标准版中不直接包含名为HttpCacheModule的模块,但可通过proxy_cache等指令实现缓存功能)
功能:缓存HTTP响应,减少服务器负载和响应时间。
使用方法:
- 使用
proxy_cache_path
定义缓存目录和缓存参数。 - 在需要缓存的location中使用
proxy_cache
指令启用缓存。
HttpAccessModule(注意:Nginx标准版中不直接称为HttpAccessModule,但功能相似)
功能:访问控制,限制对资源的访问。
使用方法:
- 使用
allow
和deny
指令定义允许或拒绝访问的规则。 - 示例:
allow 192.168.1.0/24; deny all;
仅允许来自192.168.1.0/24子网的访问。
HttpUpstreamModule
功能:实现负载均衡,管理后端服务器组。
使用方法:
- 使用
upstream
指令定义服务器组。 - 在
proxy_pass
中引用该服务器组,Nginx会根据定义的算法(如轮询、最少连接等)分配请求。
Nginx限流
Nginx限流是通过限制用户请求的速度来防止服务器过载的一种策略。
限流主要有三种方式:正常限制访问频率、突发限制访问频率和限制并发连接数。
Nginx的限流实现主要基于漏桶算法。
一、正常限制访问频率(正常流量)
这种限流方式用于限制一个用户发送请求的频率。Nginx使用ngx_http_limit_req_module
模块来实现这一功能,其原理是基于漏桶算法。
配置示例:
# 定义限流维度:一个用户一分钟只能发送一个请求
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;server {location /seckill.html {limit_req zone=one; # 应用限流维度proxy_pass http://lj_seckill;}
}
在这个配置中,1r/m
表示每分钟允许一个请求。如果Nginx还有其他请求未处理,超出限制的请求将被拒绝。
二、突发限制访问频率(突发流量)
为了应对突发流量,Nginx提供了burst
和nodelay
参数。burst
允许在短时间内处理超过设定速率的请求数量,而nodelay
则指示Nginx立即处理这些突发的请求,而不是延迟处理。
配置示例:
# 定义限流维度,并设置burst和nodelay参数
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;server {location /seckill.html {limit_req zone=one burst=5 nodelay; # 允许突发处理最多5个请求proxy_pass http://lj_seckill;}
}
在这个配置下,Nginx会立即处理前五个突发请求,之后的请求将按照漏桶算法慢慢处理。
三、限制并发连接数
Nginx使用ngx_http_limit_conn_module
模块来限制并发连接数。通过limit_conn_zone
和limit_conn
指令,可以设置单个IP和整个虚拟服务器的最大并发连接数。
配置示例:
http {limit_conn_zone $binary_remote_addr zone=myip:10m; # 单个IP的并发连接数限制limit_conn_zone $server_name zone=myServerName:10m; # 整个虚拟服务器的并发连接数限制
}server {location / {limit_conn myip 10; # 单个IP最多允许10个并发连接limit_conn myServerName 100; # 整个虚拟服务器最多允许100个并发连接rewrite / http://www.lijie.net permanent;}
}
这个配置确保了单个IP和整个服务器的并发连接数不会超过设定的上限。
总结以及补充
Nginx配置文件优化
类别 | 配置项 | 描述 |
---|---|---|
性能优化 | gzip on; | 开启网页压缩 |
性能优化 | expires 缓存时间; | 网页缓存 |
性能优化 | keepalive_timeout 服务端超时时间 客户端超时时间; | 连接保持超时 |
性能优化 | keepalive_requests | 连接保持最大请求次数 |
性能优化 | worker_processes(与服务器CPU数量相同或auto) | 工作进程数 |
性能优化 | worker_connections | 工作进程连接数 |
性能优化 | worker_rlimit_nofile | 工作进程打开文件数 |
性能优化 | worker_cpu_affinity | 工作进程静态绑核 |
性能优化 | use epoll; | IO多路复用模型 |
性能优化 | sendfile on; tcp_nopush on; tcp_nodelay; | 启用内核复制模式 |
性能优化 | multi_accept on; | 连接优化,让工作进程可以尽可能多的接收连接请求 |
性能优化 | accept_mutex on; | 连接优化,以串行方式接入新连接,防止惊群问题 |
安全优化 | server_tokens off; | 隐藏版本号 |
安全优化 | valid_referers + if($invalid_referer) | 防盗链 |
安全优化 | deny 攻击主机的IP | 访问控制 |
安全优化 | use 用户名 组名; | 设置运行用户/组 |
安全优化 | limit_conn_zone + limit_conn | 限制连接数 |
安全优化 | limit_req_zone + limit_req | 限制请求速率 |
系统内核优化
文件 | 配置项 | 描述 |
---|---|---|
/etc/security/limits.conf | * soft nofile 65535 | 进程打开文件数限制 |
/etc/security/limits.conf | * hard nofile 65535 | 进程打开文件数硬限制 |
/etc/security/limits.conf | * soft nproc 65535 | 打开的系统进程数限制 |
/etc/security/limits.conf | * hard nproc 65535 | 打开的系统进程数硬限制 |
/etc/sysctl.conf | net.ipv4.tcp_syncookies=1 | 开启SYN Cookies |
/etc/sysctl.conf | net.ipv4.tcp_tw_reuse=1 | 允许TIME-WAIT状态的套接字重新用于新的TCP连接 |
/etc/sysctl.conf | net.ipv4.tcp_tw_recycle=0 | 禁用TIME-WAIT回收 |
/etc/sysctl.conf | net.ipv4.tcp_fin_timeout=30 | 修改MSL值 |
/etc/sysctl.conf | net.ipv4.tcp_keepalive_time=1200 | TCP发送探测消息的频率 |
/etc/sysctl.conf | net.ipv4.ip_local_port_range=“1024 65535” | 设置外向连接的端口范围 |
/etc/sysctl.conf | net.ipv4.tcp_max_syn_backlog=8192 | 设置SYN队列长度 |
/etc/sysctl.conf | net.ipv4.tcp_max_tw_buckets=5000 | 设置TIME-WAIT状态的最大连接数 |
/etc/sysctl.conf | net.core.somaxconn=4096 | 设置TCP端口监听的最大连接队列长度 |
/etc/sysctl.conf | net.ipv4.ip_forward=1 | 开启IP路由转发功能 |
Nginx模块
模块名称 | 描述 |
---|---|
http_stub_status_module | 访问状态统计模块 |
http_rewrite_module | URL地址重写模块 |
http_gzip_module | 网页压缩模块 |
http_ssl_module | HTTPS安全加密模块 |
http_access_module | 访问控制模块 |
http_cache_module | Web网页缓存模块 |
http_proxy_module | 代理转发模块 |
http_upstream_module | 负载均衡模块 |
http_limit_conn_module | 限制连接数模块 |
http_limit_req_module | 限制请求速率模块 |
相关文章:

【网站架构部署与优化】Nginx优化
文章目录 Nginx服务优化一、隐藏Nginx版本号,避免安全漏洞泄漏方法一:通过修改配置文件方法二:通过修改源码并重新编译安装 修改Nginx的用户和组修改用户与组 配置Nginx网页缓存时间配置Nginx连接保持的超时时间KeepAlive模式简介Nginx中的超…...

gitlab修改访问端口
目录 1.找到gitlab.rb文件,一般在/etc/gitlab/路径下 2.打开配置文件,加上代码 3.重新配置 4.重启gitlab 1.找到gitlab.rb文件,一般在/etc/gitlab/路径下 2.打开配置文件,加上代码 打开文件 sudo vi gitlab.rb 加上默认端口配…...

分库分表-分页排序查询
优质博文:IT-BLOG-CN 背景:我们系统上云后,数据根据用户UDL部分数据在国内,部分数据存储在海外,因此需要考虑分库查询的分页排序问题 一、分库后带来的问题 需求根据订单创单时间进行排序分页查询,在单表…...

【openwrt-21.02】openwrt PPTP Passthrough 不生效问题解决方案
Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …...

【编程基础知识】Mysql的各个索引数据结构及其适用场景
一、引言 在数据库的世界中,索引是提升查询速度的超级英雄。就像图书馔的目录帮助我们快速找到书籍一样,MySQL中的索引加速了数据检索的过程。本文将带你深入了解MySQL索引的多种数据结构、它们的适用场景以及如何巧妙地使用它们来优化性能。 二、索引…...

解决IDEA出现:java: 程序包javax.servlet不存在的问题
问题截图: 解决如下: 1. 点击文件——>项目结构 2. 点击库——>点击——>点击java 3. 找到Tomcat的文件夹,找到lib文件夹中的servlet-api.jar,点击确定 4. 选择要添加的模块 5. 点击应用——>确定...

Comfyui控制人物骨骼,细节也能完美调整!
前言 本文涉及的工作流和插件,需要的朋友请扫描免费获取哦~ 在我们利用Comfyui生成图像的工作中,是否常常因为人物的动作无法得到精确的控制而感到苦恼,生成出来的图片常常达不到自己心中满意的效果。 今天给大家分享的这个工作流ÿ…...

mysql学习教程,从入门到精通,SQL LEFT JOIN 语句(23)
1、SQL LEFT JOIN 语句 在SQL中,LEFT JOIN(也称为左连接)是一种将左表(LEFT JOIN左侧的表)的所有记录与右表(LEFT JOIN右侧的表)中匹配的记录结合起来的查询方式。如果左表中的记录在右表中没有…...

VSCode远程切换Python虚拟环境
VSCode远程切换Python虚拟环境 引言 在现代开发环境中,使用虚拟环境来管理项目依赖是一种普遍的做法。它不仅可以避免不同项目间的依赖冲突,还能让开发者更好地控制和隔离各个项目的环境。Visual Studio Code(VSCode)是一款广受…...

【CSS in Depth 2 精译_038】6.2 CSS 定位技术之:绝对定位
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结)第二章 相对单位(已完结)第三章 文档流与盒模型(已完结)第四章 Flexbox 布局(已…...

828 华为云征文|华为 Flexus 云服务器搭建 SamWaf 开源轻量级网站防火墙
在当今数字化高速发展的时代,网络安全问题日益凸显。为了保障网站的稳定运行和数据安全,我们可以借助华为 Flexus 云服务器搭建 SamWaf 开源轻量级网站防火墙。这不仅是一次技术的挑战,更是为网站筑牢安全防线的重要举措。 一、华为 Flexus …...

基于二自由度汽车模型的汽车质心侧偏角估计
一、质心侧偏角介绍 在车辆坐标系中,质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示,u为车辆前进方向,v为质心速度方向,u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点: 1、稳定性…...

前端html+css+js 基础总结
HTML 行级元素 标签分为行级元素与块级元素 行级元素占据区域由其显示内容决定,如span,img(图片),<a></a>基本格式: <a href"链接" target"_blank"></a>用于跳转到其他网站,…...

若依VUE项目安全kind-of postcss vite漏洞扫描和修复
npm install unplugin-auto-import0.16.7 npm install vite3.2.11 升级vite、unplugin-auto-import npm install 报错New major version of npm available! 8.5.5 -> 10.8.3,使用命令npm install --force npm install --force...

C语言实现简单凯撒密码算法
**实验2:传统密码技术 【实验目的】 通过本次实训内容,学习常见的传统密码技术,通过编程实现简单代替密码中的移位密码算法,加深对传统密码技术的了解,为深入学习密码学奠定基础。【技能要求】 分析简单代替密码中的移…...

多态的使用和原理(c++详解)
一、多态的概念 多态顾名思义就是多种形态,它分为编译时的多态(静态多态)和运行时的多态(动态多态),编译时多态(静态多态)就是函数重载,模板等,通过不同的参数…...

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【Trace调测】
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 Trace调测旨在帮助开发者获取内核的运行流程,…...

Lombok 在 IntelliJ IDEA 中的使用步骤
Lombok 是一个非常流行的 Java 库,它通过注解简化 Java 类的开发,特别是在处理 POJO(Plain Old Java Objects)类时,如生成 getter、setter、toString 等常用方法。Lombok 在减少样板代码(boilerplate code&…...

计算机网络 --- Socket 编程
序言 在上一篇文章中,我们介绍了 协议,协议就是一种约定,规范了双方通信需要遵循的规则、格式和流程,以确保信息能够被准确地传递、接收和理解。 在这篇文章中我们将介绍怎么进行跨网络数据传输,在这一过程中相信大家…...

git笔记之在多个分支中复用某个分支提交的更改
git笔记之在多个分支中复用某个分支提交的更改 code review! 文章目录 git笔记之在多个分支中复用某个分支提交的更改1.实现该功能的 Bash 脚本示例2.这个脚本是否可以处理新添加的文件?3.该脚本使用前,应先使用下述脚本重置本地仓库所有分支与远程保持一…...

HTML、CSS
初识web前端 web标准 Web标准也称为网页标准,由一系列的标准组成,大部分由W3C (World Wide Web Consortium,万维网联盟) 负责制定。三个组成部分: HTML: 负责网页的结构(页面元素和内容)。CSS: 负责网页的表现(页面元素的外观、位置等页面样…...

数据文件(0)
一、使用场景 1、字典数据 对于一些数据量不大的配置类数据,放到数据库中占用数据库资源,可以放到代码中维护。比如 (1)字段少业务单一:做成枚举; (2)字段多业务复杂:…...

Go语言并发模式详解:深入理解管道与上下文的高级用法
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在Go语言中,并发编程是其最强大的特性之一。合理地使用并发模式,可以让我们的程序高效而优雅地处理复杂的任务。在本文中,我们将深入探讨Go语言中的一些高级并发模式,包括管道的技巧和上下文包的应用。通过丰…...

标准文档流解析及 CSS 中的相关特性
目录 非 VIP 用户可前往公众号回复“css”进行免费阅读 标准文档流特点 空白折叠现象 高矮不齐、底边对齐 自动换行,一行写不满,换行写 标准文档流中的元素等级 HTML 与 CSS 中的标签分类总结 块级元素和行内元素的相互转换 块级转行内 行内转块级 display 非 VIP…...

水下攻防面试题
水下攻防面试题通常涉及对水下环境的理解、水下安全操作、水下技术应用以及攻防策略等多个方面。由于具体的面试题可能因组织、职位和目的的不同而有所差异,以下是一些可能出现在水下攻防面试中的典型问题及其参考答案框架: 一、基础概念与理解 什么是水下攻防? 水下攻防是…...

vmware 虚拟机多屏幕或添加屏幕
vmware 虚拟机多屏幕或添加屏幕 前置条件 vmware 安装 vmware tools 虚拟机系统支持多屏幕 物理上有至少两个屏幕,就是物理机上接至少一个屏幕 方法 虚拟机上点设置,需要在虚拟机关机时进行 ctrl alt enter 让当前虚拟机全屏 鼠标移动到屏幕虚拟机…...

鹏哥C语言49-51---第6次作业:循环语句 for 和 while
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //-----------------------------------------------------------------------------------------------第六次作业:for循环等 //--------------------------------------------------------------------…...

springboot中药材进存销管理系统
基于springbootvue实现的中药材进存销管理系统 (源码L文ppt)4-079 4 系统总体设计 4.1系统功能结构设计图 根据需求说明设计系统各功能模块。采用模块化设计方法实现一个复杂结构进行简化,分成一个个小的容易解决的板块,然…...

GitHub上图像超分开源项目推荐【持续更新】
SRCNN 介绍:SRCNN(Super-Resolution Convolutional Neural Network)是一种用于图像超分辨率的卷积神经网络。它由Dong等人在2014年提出,是早期的深度学习方法之一,用于提高图像的分辨率。SRCNN通过学习低分辨率&#…...

浅谈软件测试的基础知识(1)
文章目录 一、什么是测试1.1、生活中的测试案例1.2、为什么需要进行软件测试 二、测试和开发的区别2.1、调试和测试的区别 四、测试人员需具备哪些素质五、软件的生命周期六、软件测试的生命周期七、设计测试用例的方法[!]7.1、什么是测试用例7.2、测试用例作用 八、走测试岗位…...