1. 工作进程数量
#根据cpu个数自动调整工作进程数量
worker_processes auto;
2. Nginx最大打开文件数
这个指令是指当一个nginx worker进程打开的最多文件描述符数目
worker_rlimit_nofile 65535;
注:文件资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。用户重新登录生效(ulimit -n)
1.用户级别限制(用户最大能打开的文件数)
#立即生效配置
ulimit -n 65536
#永久配置,重启生效
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
2.进程级别限制(每个进程最大能打开的文件数)
vim /etc/sysctl.conf
fs.nr_open = 65535
sysctl -p
3.系统级别限制(系统最大能打开的文件数)
vim /etc/sysctl.conf
fs.file-max = 999999
sysctl -p
3. Nginx事件处理模型
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
use epoll;
nginx采用epoll事件模型,处理效率高。
worker_connections 65535;
是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,
理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。实际我们填入一个65535,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了!
multi_accept on;
on:默认值,告诉nginx收到一个新连接通知后接受尽可能多的连接,
当你的服务器连接数不多时,on会导致负载不平衡,但是对于高并发场景下的性能提升非常有帮助
4. 开启高效传输模式
http {
include mime.types;
default_type application/octet-stream;
……
sendfile on;
tcp_nopush on;
……
}
Include mime.types :
Nginx使用mime.types文件来识别和处理各种文件类型的请求,include指令用于在当前文件中包含另一个文件内容。
default_type application/octet-stream :
用于指定响应前端请求时默认的MIME类型。当Nginx遇到未知的文件类型或者没有相应的MIME类型配置时,会使用default_type指定的类型
application/octet-stream是一种通用的二进制数据类型,浏览器通常会将其视为文件并提示用户下载
sendfile on:
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,
对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
注意:如果图片显示不正常把这个改成off。
tcp_nopush on:
必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。)
5. 连接超时时间
主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的。
keepalive_timeout 60;
tcp_nodelay on;
#用于缓存静态文件的元信息,以提升网站访问速度和处理请求的能力
open_file_cache max=102400 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
open_file_cache_errors on;
client_header_buffer_size 4k;
client_header_timeout 15;
client_body_buffer_size 8k;
client_body_timeout 15;
client_max_body_size 10m;
reset_timedout_connection on;
send_timeout 15;
server_tokens off;
keepalive_timeout 60;
HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。
如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。
HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。
若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
Nginx 使用 keepalive_timeout 来指定每个TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,
有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。
tcp_nodelay on;
允许小的TCP包立即发送,减少网络延迟,防止网络阻塞,不过要包涵在keepalived参数才有效。
可能会增加网络负载,需谨慎使用。适用于需要低延迟的场景。实时性要求高的应用,如在线游戏、视频会议等。
需要快速响应的网络服务,如在线交易系统。
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,
不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
---------------------------------缓存相关------------------------------------
句法: open_file_cache off;
open_file_cache max=N [inactive=time];
默认: open_file_cache off;
语境: http,server,locatio
open_file_cache max=65535 inactive=20s;
NGINX缓存将最近使用的文件描述符和相关元数据(如修改时间,大小等)存储在缓存中。缓存不会存储所请求文件的内容
max=64 设置可以缓存的最大文件描述符数量,建议和打开文件数一致,当缓存溢出时,将删除最近最少使用(LRU)的元素
inactive参数定义了缓存项的非活动时长,超过此时长且命中次数未达到min_uses指定的值,缓存项将被视为非活动项并删除。
min_uses和inactive共同决定了缓存项的存活条件和缓存的有效性,二者在配置和使用上是有关联的
句法: open_file_cache_min_uses number;
默认: open_file_cache_min_uses 1;
语境: http,server,location
min_uses参数定义了文件在inactive指定的时间内被访问的最小次数,若访问次数少于此值,文件将从缓存中删除
句法: open_file_cache_valid time;
默认: open_file_cache_valid 60s;
语境: http,server,location
确认经过60s之后再去看看缓存的内容是否有效,如果源内容发生了更新,那么更新缓存。
如果你的静态文件内容变化频繁并且对时效性要求较高,一般应该把 open_file_cache_valid 设置的小一些,以便及时检测和更新。
如果变化相当不频繁的话,那就可以设置大一点,在变化后用 reload nginx 的方式来强制更新缓存
句法: open_file_cache_errors on | off;
默认: open_file_cache_errors off;
语境: http,server,location
文件错误是否也同样缓存,默认是off的,如果启用,则在访问资源时,NGINX会报告相同的错误。
-------------------------------------------------------------------------------------
client_header_timeout 15;
客户端向服务端发送一个完整的 request header 的超时时间。
如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。
client_header_buffer_size 4k;
此设置指定了客户端请求头部的缓冲区大小。4k是一个合理的默认值,但根据实际需求,可以适当调整。
client_header_timeout 15;
此设置定义了客户端请求头读取的超时时间,单位为秒。15秒是一个适中的值,既不会太短导致正常的请求被误判,也不会太长导致资源浪费。
client_body_buffer_size 8k;
设置读取客户端请求正文的缓冲区大小。如果请求正文大于缓冲区,则将整个正文或仅其部分写入临时文件。
默认情况下,缓冲区大小等于两个内存页(getconf PAGE_SIZE)。这在x86、其他32位平台和x86-64上8K。在其他64位平台上通常16K。
client_max_body_size 10m;
客户端上传文件大小限制。
client_body_timeout 15;
指定客户端与服务端建立连接后发送 request body 的超时时间。
如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。
reset_timedout_connection on;
告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
send_timeout 15;
服务端向客户端传输数据,在这个超时时间内,未收到客户端确认收到数据的消息,则断开连接
server_tokens off;
并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
6. proxy调优
proxy buffering的作用主要是实现被代理服务器和客户端之间的请求异步处理,通过缓冲区暂存响应数据,再按需发送给客户端,有助于提升处理效率和并发能力
proxy_cache 作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态。 缓存减少了nginx与后端通信的次数,节省了传输时间和后端宽带
proxy_set_header Host $http_host; # 请求头带上的域名
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 客户端真实IP
#此配置用于定义Nginx在何种情况下会将请求传递给下一个上游服务器
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
#表示设置Nginx与后端服务器建立连接的超时时间为30秒
proxy_connect_timeout 30;
# nginx代理等待后端服务器的响应时间
proxy_send_timeout 60;
# 后端服务器数据回传给nginx代理超时时间
proxy_read_timeout 60;
#缓冲区设置
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 4k;
proxy_temp_path /tmp/nginx_proxy 1 2;
proxy_max_temp_file_size 20M;
proxy_temp_file_write_size 8k;
#缓存设置
//在全局配置http部分中添加,定义一个proxy_cache
http {
proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=50M;
}
//在虚拟主机server的location中
proxy_cache my_zone;
proxy_cache_valid 200 302 1h;
#缓冲区设置
proxy_buffering作用主要是实现被代理服务器和客户端的请求异步
proxy_buffering on;:启用代理缓冲功能。
proxy_buffer_size 4k; 设置读取响应头的缓冲区为4KB。
proxy_buffers 2 4k;:设置读取响应体的缓冲区为2个4KB。
proxy_busy_buffers_size 4k;:设置忙时缓冲区大小为4KB。
proxy_temp_path /tmp/nginx_proxy 1 2;:设置临时文件路径及权限。
proxy_max_temp_file_size 20M;:设置最大临时文件大小为20MB。
proxy_temp_file_write_size 8k;:设置写入临时文件的大小为8KB。
#缓存设置
proxy_cache作用是将从C上获取的数据根据预设的规则存放到B上留着备用, 当下次A再次请求相同数据的时候可以不用再到C上取,当然有一个时间限定。
proxy_cache:默认off,开启的话不是on,而是写一个存放缓存的区域名称,例如:proxy_cache my_zone;
proxy_cache_bypass:设置什么请求不读取cache,一定要从C中获取,这是从安全考虑。比如果proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment
proxy_no_cache:设定什么情况不缓存,作用和上面的类似。
proxy_cache_key: 保持默认就行,不设置。
proxy_cache_path:
例如:proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g
依次是存放位置,层级目录,zone的名称和大小,失效时间,最大缓存数据
proxy_cache_valid 200 302 1h :#表示将200和302应答缓存一小时,要和proxy_cache配合使用。
7. fastcgi 调优
FastCGI buffer通过将FastCGI应用程序的响应内容先缓冲在Nginx服务器上,再一次性发送给客户端,减少了Nginx与后端FastCGI服务器之间的交互次数,从而提高了整体的处理性能。
fastcgi_cache 缓存fastcgi生成的内容,很多情况是php生成的动态的内容。缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力。
#指定fastcgi的ip和端口
fastcgi_pass 172.18.50.65:9000;
#fastcgi默认的主页资源
fastcgi_index index.php;
#/app/php为存放php代码的目录
fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;
#加载fastcgi参数
include fastcgi_params;
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_temp_path /usr/local/nginx1.10/nginx_tmp;
fastcgi_intercept_errors on;
fastcgi_cache_path /usr/local/nginx1.10/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128minactive=1d max_size=10g;
fastcgi_connect_timeout 600 :指定连接到后端FastCGI的超时时间。
fastcgi_send_timeout 600 :向FastCGI传送请求的超时时间。
fastcgi_read_timeout 600 :指定接收FastCGI应答的超时时间。
fastcgi_buffer_size 64k : 设置读取响应头的缓冲区为64KB。
fastcgi_buffers 4 64k : 设置读取响应体的缓冲区为4个64KB。
fastcgi_busy_buffers_size 128k :建议设置为fastcgi_buffers的两倍,繁忙时候的buffer。
fastcgi_temp_file_write_size 128k :
在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,该数值设置小时若负载上来时可能报502BadGateway。
fastcgi_temp_path :缓存临时目录。
fastcgi_intercept_errors on :
这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
注:静态文件不存在会返回404页面,但是php页面则返回空白页!
fastcgi_cache_path /usr/local/nginx1.10/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g
定义缓存文件的存储路径、缓存大小、缓存有效期、缓存键的哈希表大小等。
/usr/local/nginx1.10/fastcgi_cache 缓存文件的存储路径。
levels=1:2 缓存目录的层次结构,这里表示首先按第一个字符分目录,然后在这些目录中再按前两个字符分目录。
keys_zone=cache_fastcgi:128m 为缓存区命名(这里是 cache_fastcgi)并设置其大小(这里是 128MB)。
inactive=1d 缓存项在不被访问后多久被视为“非活动”的,之后它们可以被清理器线程删除
max_size=10g 表示最多用多少硬盘空间。
fastcgi_cache cache_fastcgi:
启用上面创建的名为cache_fastcgi缓存。可以有效降低CPU的负载,并且防止502的错误放生。
fastcgi_cache_valid 200 302 1h :#用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一小时,要和fastcgi_cache配合使用。
fastcgi_cache_valid 301 1d :将301应答缓存一天。
fastcgi_cache_valid any 1m :将其他应答缓存为1分钟。
fastcgi_cache_min_uses 1 :该指令用于设置经过多少次请求的相同URL将被缓存。
fastcgi_cache_key http://$host$request_uri :该指令用来设置web缓存的Key值,nginx根据Key值md5哈希存储.一般根据$host(域名)、$request_uri(请求的路径)等变量组合成proxy_cache_key 。
fastcgi_pass :指定FastCGI服务器监听端口与地址,可以是本机或者其它。
8. gzip 调优
将响应报⽂发送⾄客户端之前可以启⽤压缩功能,这能够有效地节 约带宽,并提⾼响应⾄客户端的速度。Gzip压缩可以配置 http,server和location模块下。Nginx开启Gzip压缩参数说明:
Nginx启用压缩功能需要你来ngx_http_gzip_module模块,apache使用的是mod_deflate。
一般我们需要压缩的内容有:文本,js,html,css,
对于图片,视频,flash什么的不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!
gzip on;
gzip_min_length 2k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_proxied any;
gzip on; 开启压缩功能
gzip_min_length 2k :
设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是0,
不管页面多大都进行压缩,建议设置成大于1K,如果小与1K可能会越压越大。
gzip_buffers 4 32k :压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version 1.1 :压缩版本,用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_comp_level 6 :压缩比例,用来指定GZIP压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但是处理慢,也比较消耗CPU资源。
gzip_types text/css text/xml application/javascript :
用来指定压缩的类型,‘text/html’类型总是会被压缩。默认值: gzip_types text/html (默认不对js/css文件进行压缩)
压缩类型,匹配MIME型进行压缩;不能用通配符 text/*;text/html默认已经压缩 (无论是否指定);设置哪压缩种文本文件可参考 conf/mime.types。
gzip_vary on :增加响应头"Vary: Accept-Encoding",客户端响应头看到Content-Encoding:gzip 说明开启了gzip压缩。
gzip_proxied any; 表示所有来自代理服务器的请求都将启用压缩,经过CDN回源的请求也压缩
9. expires 缓存调优
原理:当nginx设置了expires后,例如设置为:expires 10d; 那么,所在的location或if的内容,用户在10天内请求的时候,都只会访问浏览器中的缓存,而不会去请求nginx
缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的拓展名列出来, Expires缓存配置在server字段里面。
location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {
expires 30d;
#log_not_found off;
access_log off;
}
location ~* \.(js|css)$ {
expires 7d;
log_not_found off;
access_log off;
}
注:log_not_found off;是否在error_log中记录不存在的错误。默认是。
总结:
expire功能优点:
expires可以降低网站购买的带宽,节约成本;同时提升用户访问体验;
减轻服务的压力,节约服务器成本,是web服务非常重要的功能。
expire功能缺点:
被缓存的页面或数据更新了,用户看到的可能还是旧的内容,反而影响用户体验。
解决办法:
第一个缩短缓存时间,例如:1天,但不彻底,除非更新频率大于1天;
第二个对缓存的对象改名。
expires 24h; 24小时过期
expires modified +24h; 文件修改后24小时过期
expires @24h; “@”前缀指定一天中的时间,@24表示今天的24点过期
expires 0; 设置为0意味着Cookie立即过期,浏览器将删除它
expires -1; 等同Cache-Control: no-cache,不缓存
expires epoch; 等同Cache-Control: no-cache,不缓存
expires $expires;
add_header Cache-Control private; 设置缓存头为private
add_header Cache-Control no-cache; 不缓存
10. 防盗链
防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法由几种:
- 水印,品牌宣传,你的带宽,服务器足够;
- 防火墙,直接控制,前提是你知道IP来源;
- 防盗链策略下面的方法是直接给予404的错误提示。
location ~*^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers server_names *.example.com example.* www.example.org ~\.google\;
if($invalid_referer)
{
return 404;
break;
}
#对于某些不需要记录访问日志的请求,可以单独配置关闭访问日志
access_log off;
}
Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
valid_referers 指令可以配置什么为合法的referers
none :$http_referer变量的值是空的, 是直接访问url,没有使用任何网站或链接的跳转
blocked :请求标头中存在“ Referer”字段,但其值已被防火墙或代理服务器删除;
这些值是不以“ http://”或“ https://”开头的字符串;
server_names :配置域名列表,为一个或多个域名,支配通配符、正则表达式写法
11. 内核参数优化
vim /etc/sysctl.conf ,执行sysctl -p使内核修改生效
fs.file-max = 999999
fs.nr_open = 65535
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.core.wmem_default = 8388608
net.core.wmem_max = 16777216
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 40960
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
fs.file-max = 999999
这个参数设置了系统级别上所有进程能够打开的文件句柄的最大数量。
将其设置为999999意味着系统允许打开的文件句柄总数可以达到近一百万,这有助于提升系统处理大量并发文件操作的能力。
kernel.sysrq = 0
此参数用于控制SysRq键的功能。设置为0表示禁用SysRq键,这意味着无法通过按下SysRq键组合来执行紧急系统命令。
kernel.core_uses_pid = 1
当这个参数设置为1时,核心转储文件(core dump file)的名称会包含产生该文件的进程的PID(进程标识符)。
这有助于在发生错误时更容易地识别是哪个进程产生了核心转储文件。
kernel.msgmnb = 65536
这个参数定义了单个消息队列的最大字节数。消息队列是进程间通信的一种方式,此设置限制了队列中可以存储的消息总大小。
kernel.msgmax = 65536
此参数设置了消息队列中单个消息的最大大小。与kernel.msgmnb一起,它们共同控制了消息队列的容量和消息的大小。
kernel.shmmax = 68719476736
这个参数定义了共享内存段的最大大小。共享内存是进程间通信的另一种方式,允许多个进程访问同一块内存区域。此设置限制了单个共享内存段的大小。
kernel.shmall = 4294967296
此参数设置了系统范围内所有共享内存段的总页数。它与kernel.shmmax一起,控制了共享内存的总量和单个段的大小。
以下是一组针对网络性能优化的内核参数设置:
net.core.wmem_default = 8388608 :默认发送缓冲区大小 设置为8388608字节,影响套接字发送缓冲区的默认大小。
net.core.wmem_max = 16777216:最大发送缓冲区大小 设置为16777216字节,控制套接字发送缓冲区的最大大小。
net.core.rmem_default = 8388608 :默认接收缓冲区大小设置为8388608字节,影响套接字接收缓冲区的默认大小。
net.core.rmem_max = 16777216 :最大接收缓冲区大小设置为16777216字节,控制套接字接收缓冲区的最大大小。
net.core.netdev_max_backlog = 262144 :网络设备接收队列的最大长度设置为262144,影响网络设备接收队列能够存储的最大数据包数量。
net.core.somaxconn = 40960 :套接字监听队列的最大长度设置为40960,控制套接字监听队列的最大连接数
net.ipv4.ip_forward = 0:表示Linux系统当前禁止IP转发。这可能会影响Docker容器与外部通信,因为Docker容器通常依赖宿主机进行IP转发实现网络通信。要解决这个问题,需要将此值设置为1,即开启IP转发12。
net.ipv4.conf.default.rp_filter = 1:表示开启严格的反向路径校验,确保数据包的最佳路径。
net.ipv4.conf.default.accept_source_route = 0:表示关闭源地址路由功能,增强系统安全性。
net.ipv4.tcp_syncookies = 1:此参数与TCP同步标签(syncookies)有关,用于防止SYN flood攻击,增强TCP连接的稳定性。
net.ipv4.tcp_max_tw_buckets = 6000:控制TIME_WAIT状态的最大数量,有助于管理TCP连接的生命周期。
net.ipv4.tcp_sack = 1:启用SACK(Selective Acknowledgments)功能,提高TCP连接的效率和可靠性。
net.ipv4.tcp_window_scaling = 1:启用TCP窗口缩放功能,有助于在高速网络环境下提高TCP连接的性能。
net.ipv4.tcp_rmem:表示TCP接收buffer的配置,有三个值,分别为TCP接收buffer的最少字节数、默认值、最大字节数。
net.ipv4.tcp_wmem:表示TCP发送buffer的配置,同样有三个值,分别为TCP发送buffer的最少字节数、默认值、最大字节数。
net.ipv4.tcp_max_orphans:表示系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。
net.ipv4.tcp_max_syn_backlog:表示对于那些依然还未获得客户端确认的连接请求,需要保持的最大队列长度。
net.ipv4.tcp_timestamps:用于控制TCP时间戳的使用,设置为0表示禁用时间戳。
net.ipv4.tcp_synack_retries:表示在内核放弃建立连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_syn_retries:表示在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_tw_recycle:设置为1表示开启TCP连接中TIME-WAIT sockets的快速回收,有助于减少TIME_WAIT状态的数量,但需要注意,在某些情况下可能会导致连接问题,如在NAT环境下
net.ipv4.tcp_tw_reuse:设置为1表示允许将TIME-WAIT sockets重新用于新的TCP连接,这有助于提升TCP连接的效率
net.ipv4.tcp_mem:这是一个系统全局参数,表示所有TCP的buffer配置,有三个值,分别为TCP buffer值的下限、内存压力模式开始对buffer进行压力的上限、以及内存使用的上限
net.ipv4.tcp_fin_timeout:设置为1表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_keepalive_time:设置为30表示当keepalive启用时,TCP发送keepalive消息的频度,缺省值为2小时
net.ipv4.ip_local_port_range:设置为1024 65000表示用于向外连接的端口范围,缺省情况下范围较小,改为1024到65000可以扩大可用端口范围
版权归原作者 linux行者 所有, 如有侵权,请联系我们删除。