【网站架构部署与优化】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.confpid参数指向正确的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 = dynamicpm.max_children:允许的最大子进程数。这个数值应根据服务器的内存大小和PHP脚本的资源消耗来设置。pm.max_children = 100pm.start_servers:动态模式下启动时默认开启的进程数。它应该在pm.min_spare_servers和pm.max_spare_servers之间。pm.start_servers = 5pm.min_spare_servers:动态模式下保持的最小空闲进程数。pm.min_spare_servers = 2pm.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.该脚本使用前,应先使用下述脚本重置本地仓库所有分支与远程保持一…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
