linux nginx module模块配置
时间: 20181118
个人小站: www.winthcloud.top
目录
ngx_http_access_module
allow
deny
ngx_http_auth_basic_module
auth_basic
auth_basic_user_file
ngx_http_stub_status_module
stub_status
ngx_http_log_module
log_format
access_log
open_log_file_cache
ngx_http_gzip_module
gzip
gzip_comp_level
gzip_disable
gzip_min_length
gzip_http_version
gzip_buffers
gzip_types
gzip_vary
gzip_proxied
ngz_http_ssl_module
ssl
ssl_certificate
ssl_certificate_key
ssl_protocols
ssl_session_cache
ssl_session_timeout
ngz_http_rewrite_module
rewrite
return
rewrite_log
set $variable
if (condition) {}
ngx_http_referer_module
valid_referers
if($invalid_referer){return 403 ...}
ngx_http_proxy_module
proxy_pass
proxy_set_header
proxy_cache_path
proxy_cache_key
proxy_cache
proxy_cache_valid
proxy_cache_use_stale
proxy_cache_methods
proxy_hide_header
proxy_connect_timeout
proxy_send_timeout
proxy_read_timeout
ngx_http_headers_module
add_header
add_trailer
ngx_http_fastcgi_module
fastcgi_pass
fastcgi_index
fastcgi_param
fastcgi_cache_path
fastcgi_cache
fastcgi_cache_key
fastcgi_cache_methods
fastcgi_cache_min_uses
fastcgi_keep_conn
fastcgi_cache_valid
ngx_http_upstream_module
upstream name {}
server ADDRESS [parameters]
ip_hash
least_conn
hash $request_url consistent
keepalive
health_check
match name {...}
consistent 一致性hash算法(用来解决缓存雪崩)重点!!!!!!!!!!
实现Nginx高并发Linux内核优化
fs.file-max
net.ipv4.tcp_tw_reuse
net.ipv4.tcp_keepalive_time
net.ipv4.tcp_fin_timeout
net.ipv4.tcp_max_tw_buckets
net.ipv4.ip_local_port_range
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.core.netdev_max_backlog
net.core.rmem_default
net.core.wmem_default
net.core.rmem_max
net.core.wmem_max
net.ipv4.tcp_syncookies
net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_tw_recycle
net.core.somaxconn
net.ipv4.tcp_max_orphans
nginx 编译安装
总结
ngx_http_access_module
可实现基于ip的访问控制功能
1、allow address | CIDR | unix: | all;
2、deny address | CIDR | unix: | all;
http, server, location, limit_except
自上而下检查,一旦匹配,将生效,条件严格的置前
示例:
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
ngx_http_auth_basic_module
实现基于用户的访问控制,使用basic机制进行用户认证
1、auth_basic string | off;
2、auth_basic_user_file file;
location /admin/ {
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.ngxpasswd;
}
用户口令文件:
1、明文文本:格式name:password:comment
2、加密文本:由htpasswd命令实现
httpd-tools所提供
3、可以使用openssl passwd命令来生成密码
ngx_http_stub_status_module模块
用于输出nginx的基本状态信息
输出信息示例:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
上面三个数字分别对应accepts,handled,requests三个值
Reading: 6 Writing: 179 Waiting: 106
Active connections:当前状态,活动状态的连接数
accepts:统计总值,已经接受的客户端请求的总数
handled:统计总值,已经处理完成的客户端请求的总数
requests:统计总值,客户端发来的总的请求数
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
Writing:当前状态,正在向客户端发送响应报文过程中的连接数
Waiting:当前状态,正在等待客户端发出请求的空闲连接数
1、stub_status;
示例:location /status {
stub_status;
allow 172.16.0.0/16;
deny all;
}
ngx_http_log_module模块
指定日志格式记录请求
1、log_format name string ...;
string可以使用nginx核心模块及其它模块内嵌的变量
2、access_log path [format [buffer=size] [gzip[=level]] [flush=time]
[if=condition]];
access_log off;
访问日志文件路径,格式及相关的缓冲的配置
buffer=size
flush=time
3、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
缓存各日志文件相关的元数据信息
max:缓存的最大文件描述符数量
min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项
inactive:非活动时长
valid:验证缓存中各缓存项是否为活动项的时间间隔
ngx_http_gzip_module
用gzip方法压缩响应数据,节约带宽
1、gzip on | off;
启用或禁用gzip压缩
2、gzip_comp_level level;
压缩比由低到高:1 到 9
默认:1
3、gzip_disable regex ...;
匹配到客户端浏览器不执行压缩
4、gzip_min_length length;
启用压缩功能的响应报文大小阈值
5、gzip_http_version 1.0 | 1.1;
设定启用压缩功能时,协议的最小版本
默认:1.1
6、gzip_buffers number size;
支持实现压缩功能时缓冲区数量及每个缓存区的大小
默认:32 4k 或 16 8k
7、gzip_types mime-type ...;
指明仅对哪些类型的资源执行压缩操作;即压缩过滤器
默认包含有text/html,不用显示指定,否则出错
8、gzip_vary on | off;
如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”
9、gzip_proxied off | expired | no-cache | no-store | private |
no_last_modified | no_etag | auth | any ...;
nginx充当代理服务器时,对于后端服务器的响应报文,在何种条件下启用压
缩功能
off:不启用压缩
expired,no-cache, no-store,private:对后端服务器的响应报文首部
Cache-Control值任何一个,启用压缩功能
示例:
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/javascript;
ngx_http_ssl_module
1、ssl on | off;
为指定虚拟机启用HTTPS protocol, 建议用listen指令代替,高版本后已经废弃
2、ssl_certificate file;
当前虚拟主机使用PEM格式的证书文件
3、ssl_certificate_key file;
当前虚拟主机上与其证书匹配的私钥文件
4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssl协议版本,默认为后三个
5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
none: 通知客户端支持ssl session cache,但实际不支持
builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
[shared:name:size]:在各worker之间使用一个共享的缓存
6、ssl_session_timeout time
客户端连接可以复用ssl session cache中缓存的有效时长,默认5m
示例:
server {
listen 443 ssl;
server_name www.winthcloud.com;
root /vhosts/ssl/htdocs;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
}
apache不支持同一台物理主机多个虚拟主机使用加密,只能支持一个,而nginx
可以多个即多个https 支持TLS SNI support enabled
ngx_http_rewrite_module
将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换
即地址重写
示例:
http://www.winthcloud.com/hn --> http://www.winthcloud.com/henan
http://www.winthcloud.com --> https://www.winthcloud.com/
1. rewrite regex replacement [flag]
将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为
replacement指定的新的URI
注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;
被某条件规则替换完成后,会重新一轮的替换检查
隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]
所表示的标志位用于控制此循环机制
如果replacement是以http://或https://开头,则替换结果会直接以重定向返
回给客户端, 即永久重定向301
[flag]:
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,
而后对新的URI启动新一轮重写检查;提前重启新一轮循环,不建议在
location中使用
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,
而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location
中使用
redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的
新URI给客户端,由客户端重新发起请求;使用相对路径,或者http://或
https://开头,状态码:302
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客
户端,由客户端重新发起请求,状态码:301
2、return
return code [text];
return code URL;
return URL;
停止处理,并返回给客户端指定的响应码,对 301, 302, 303, 307, 308跳转到URL
3、rewrite_log on | off;
是否开启重写日志, 发送至error_log(notice level)
4、set $variable value;
用户自定义变量
注意:变量定义和调用都要以$开头
5、if (condition) { ... }
条件满足时,执行配置块中的配置指令;server, location
condition:
比较操作符:
= 相同 != 不同
~ 模式匹配,区分字符大小写
~* 模式匹配,不区分字符大小写
!~ 模式不匹配,区分字符大小写
!~* 模式不匹配,不区分字符大小写
文件及目录存在性判断:
-e,!-e 存在与否(包括文件,目录,软链接)
-f,!-f 文件 -d,!-d 目录 -x,!-x 执行
示例 跳转http至https 加条件判断是因为如果不加直接重定向会导致死循环
location / {
if ( $scheme = http){
rewrite / https:www.winthcloud.com redirect;
}
}
ngx_http_referer_module
用来阻止Referer首部无有效值的请求访问,可防止盗链
请求连接是由其它网站上过来的
1、valid_referers none|blocked|server_names|string ...;
定义referer首部的合法可用值,不能匹配的将是非法值
none:请求报文首部没有referer首部
blocked:请求报文有referer首部,但无有效值
server_names:referer首部中包含本主机名
arbitrary_string:任意字符串,但可使用*作通配符
regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,
例如: ~.*\.winthcloud\.com
示例:
valid_referers none block server_names *.winthcloud.com
winthcloud.* ~\.baidu\. ~\.google\. ~\.winthcloud\.;
if ($invalid_referer) {
return 403 http://www.winthcloud.com;
}
ngx_http_proxy_module
转发请求至另一台主机
1、proxy_pass URL;
Context:location, if in location, limit_except
注意:proxy_pass后面路径不带uri时,会将location的uri传递
(附加)给后端主机
server {
...
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host[:port]; 最后没有/
}
...
}
上面示例:http://HOSTNAME/uri --> http://host/uri
如果上面示例中有 /,即:http://host[:port]/
意味着:http://HOSTNAME/uri --> http://host/ 即置换
proxy_pass后面的路径是一个uri时,其会将location的uri替换为
proxy_pass的uri
server {
...
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host/new_uri/;
}
...
}
http://HOSTNAME/uri/ --> http://host/new_uri/
如果location定义其uri时使用了正则表达式的模式,则proxy_pass之后必须
不能使用uri; 用户请求时传递的uri将直接附加至后端服务器之后
server {
...
server_name HOSTNAME;
location ~|~* /uri/ {
proxy_pass http://host; 不能加/
}
...
}
http://HOSTNAME/uri/ --> http://host/uri/
2、proxy_set_header field value;
设定发往后端主机的请求报文的请求首部的值
当nginx向后端代理时可以在请求报文首部添加键值对,可以使后端响应服务器
抓取其键值,如将真的客户端ip记录至后端的httpd服务器的日志中
在前端加上首部,,后端加上日志format加上要引用的首部变量
Context: http, server, location
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
请求报文的标准格式如下:
X-Forwarded-For: client1, proxy1, proxy2
后端web-server日志抓取时设置的变量为
nginx server
log_format main '$http_X_Real_IP' 所有的-都需要替换为_,
http_固定前缀表示要抓取请求报文的首部信息
httpd
LogFormat "%{X-Real-IP}i" 这便表示为要抓取请求首部某字段
3、proxy_cache_path;
定义可用于proxy功能的缓存;Context:http
proxy_cache_path path [levels=levels] [use_temp_path=on|off]
keys_zone=name:size [inactive=time] [max_size=size]
[manager_files=number] [manager_sleep=time] [manager_threshold=time]
[loader_files=number] [loader_sleep=time] [loader_threshold=time]
[purger=on|off] [purger_files=number] [purger_sleep=time]
[purger_threshold=time];
4、proxy_cache zone | off; 默认off
指明调用的缓存,或关闭缓存机制;
Context:http, server, location
5、proxy_cache_key string;
缓存中用于“键”的内容
默认值:proxy_cache_key $scheme $proxy_host $request_uri;
6、proxy_cache_valid [code ...] time;
定义对特定响应码的响应内容的缓存时长
定义在http{...}中
示例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
示例:在http配置定义缓存信息(注意要添加目录)
proxy_cache_path /var/cache/nginx/proxy_cache
levels=1:1:1 keys_zone=proxycache:20m
inactive=120s max_size=1g;
说明:proxycache:20m 指内存中缓存的大小,
主要用于存放key和metadata(如:使用次数)
max_size=1g 指磁盘存入文件内容的缓存空间最大值
调用缓存功能,需要定义在相应的配置段,如server{...};
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
7、proxy_cache_use_stale;
proxy_cache_use_stale error | timeout | invalid_header | updating |
http_500 | http_502 | http_503 | http_504 | http_403 | http_404 |
off ...
在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端
8、proxy_cache_methods GET | HEAD | POST ...;
对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存
9、proxy_hide_header field;
默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad,
X-Accel-等,用于隐藏后端服务器特定的响应首部
10、proxy_connect_timeout time;
定义与后端服务器建立连接的超时时长,如超时会出现502错误,默认为60s,
一般不建议超出75s
11、proxy_send_timeout time;
将请求发送给后端服务器的超时时长;默认为60s
12、proxy_read_timeout time;
等待后端服务器发送响应报文的超时时长,默认为60s
ngx_http_headers_module
向由代理服务器响应给客户端的响应报文添加自定义首部,或修改指定首部的值
1、add_header name value [always];
添加自定义首部
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
add_header X-Accel $server_name;
2、add_trailer name value [always];
添加自定义响应信息的尾部
ngx_http_fastcgi_module
转发请求到FastCGI服务器,不支持php模块方式
1、fastcgi_pass address;
address为后端的fastcgi server的地址
可用位置:location, if in location
2、fastcgi_index name;
fastcgi默认的主页资源
示例:fastcgi_index index.php;
3、fastcgi_param parameter value [if_not_empty];
设置传递给 FastCGI服务器的参数值,可以是文本,变量或组合
示例1:
1)在后端服务器先配置fpm server和mariadb-server
2)在前端nginx服务上做以下配置:
location ~* \.php$ {
fastcgi_pass 后端fpm服务器IP:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;
include fastcgi_params;
…
}
示例2:通过/pm_status和/ping来获取fpm server状态信息
location ~* ^/(pm_status|ping)$ {
include fastcgi_params;
fastcgi_pass 后端fpm服务器IP:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
4、fastcgi_cache_path path [levels=levels] [use_temp_path=on|off]
keys_zone=name:size [inactive=time] [max_size=size]
[manager_files=number] [manager_sleep=time] [manager_threshold=time]
[loader_files=number] [loader_sleep=time] [loader_threshold=time]
[purger=on|off] [purger_files=number] [purger_sleep=time]
[purger_threshold=time];
定义fastcgi的缓存;
path 缓存位置为磁盘上的文件系统
max_size=size 磁盘path路径中用于缓存数据的缓存空间上限
levels=levels:缓存目录的层级数量,以及每一级的目录数量
levels=ONE:TWO:THREE
示例:leves=1:2:2
keys_zone=name:size k/v映射的内存空间的名称及大小
inactive=time 非活动时长
5、fastcgi_cache zone | off;
调用指定的缓存空间来缓存数据
可用位置:http, server, location
6、fastcgi_cache_key string;
定义用作缓存项的key的字符串
示例:fastcgi_cache_key $request_rui;
7、fastcgi_cache_methods GET | HEAD | POST ...;
为哪些请求方法使用缓存
8、fastcgi_cache_min_uses number;
缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到此处所指
定的次数方可被认作活动项
9、fastcgi_keep_conn on | off;
收到后端服务器响应后,fastcgi服务器是否关闭连接,建议启用长连接
10、fastcgi_cache_valid [code ...] time;
不同的响应码各自的缓存时长
示例:
http {
fastcgi_cache_path /var/cache/nginx/fcgi_cache levels=1:2:1
keys_zone=fcgicache:20m inactive=120s;
...
server {
location ~* \.php$ {
...
fastcgi_cache fcgicache;
fastcgi_cache_key $request_uri;
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301 1h;
fastcgi_cache_valid any 1m;
}
...
}
}
ngx_http_upstream_module
用于将多个服务器定义成服务器组,而由proxy_pass, fastcgi_pass等指令进行引用
1、upstream name { ... }
定义后端服务器组,会引入一个新的上下文
默认调度算法是wrr
Context: http
upstream httpdsrvs {
server ...
server...
...
}
调用
server {
location / {
proxy_pass http://upstrave_name;
}
}
2、server address [parameters];
在upstream上下文中server成员,以及相关的参数;Context:upstream
address的表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
weight=number 权重,默认为1
max_conns 连接后端报务器最大并发活动连接数,1.11.5后支持
max_fails=number 失败尝试最大次数;超出此处指定的次数时,
server将被标记为不可用,默认为1
fail_timeout=time 后端服务器标记为不可用状态的连接超时时长,默认10s
backup 将服务器标记为“备用”,即所有服务器均不可用时才启用
down 标记为“不可用”,实现灰度发布
3、ip_hash 源地址hash调度方法
4、least_conn 最少连接调度算法,当server拥有不同的权重时其为wlc,当所有
后端主机连接数相同时,则使用wrr,适用于长连接
5、hash key [consistent] 基于指定的key的hash表来实现对请求的调度,此处的key
可以直接文本、变量或二者组合
作用:将请求分类,同一类请求将发往同一个upstream server,使用consistent
参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)
时使用
hash $request_uri consistent;
hash $remote_addr;
consistent 一致性hash算法(用来解决缓存雪崩)重点!!!!!!!!!!
1.hash环 0-(2^32-1) 这么多个点是一个闭环,即当到最大值时下一个值就是0
2.对用户请求的url做hash并对2^32次方取模 hash(url)%(2^32) 固定数值<=2^32
3.对后端服务器的特征做hash如IP或主机名 hash(ip)%(2^32) 固定数值<=2^32
4.做对应关系
如后台有3个服务器hash后最终肯定会有3个数值坐落在0到2^32-1次方之间
某个url hash之后是一个固定值然后顺时针走找其相邻最近的3个服务器的hash值
此时便固定了,固定的url hash之后取模值也是固定的,并根据找其最近一个
相邻的服务器hash(ip)的值其也是固定的,至此便可实现缓存不落空
5.此时还有还一个问题就是hash环倾斜,如果有3个服务器最后hash出来值为1,2,3
则此时根据其顺时针找相邻的服务器hash取模值时,大部分的url hash取模后都被定
位找1这个服务器了,因为3到2^32-1之间这url hash值都顺时针指向了1
排序比小 比小不要比大直接指向(这里只为个人理解)
6. 倾斜问题解决方法 +随机数
这里不再讲原理了直接上步骤 为每个服务器加权重
一个服务器hash(ip)%(2^32)此时只会形成一个点
如果权重为100则在ip之后加一个随机数然后再取模,重复100次这样就会
在hash环上形成很多点至此便会解决hash环偏斜的问题
hash(ip+RANDOM)%(2^32) 根据权重定义其次数
6、keepalive 连接数N;
为每个worker进程保留的空闲的长连接数量,可节约nginx端口,并减少连接管
理的消耗
7、health_check [parameters];
健康状态检测机制;只能用于location上下文
常用参数:
interval=time检测的频率,默认为5秒
fails=number:判定服务器不可用的失败检测次数;默认为1次
passes=number:判定服务器可用的失败检测次数;默认为1次
uri=uri:做健康状态检测测试的目标uri;默认为/
match=NAME:健康状态检测的结果评估调用此处指定的match配置块
注意:仅对nginx plus有效即商业版
8 match name { ... }
对backend server做健康状态检测时,定义其结果判断机制;
只能用于http上下文
常用的参数:
status code[ code ...]: 期望的响应状态码
header HEADER[operator value]
期望存在响应首部,也可对期望的响应首部的值基于比较
操作符和值进行比较
body:期望响应报文的主体部分应该有的内容
注意:仅对nginx plus有效
ngx_stream_core_module模块
模拟反代基于tcp或udp的服务连接,即工作于传输层的反代或调度器
1、stream { ... }
定义stream相关的服务;Context:main
stream {
upstream mysqlsrvs {
server 192.168.22.2:3306;
server 192.168.22.3:3306;
least_conn;
}
server {
listen 10.1.0.6:3306;
proxy_pass mysqlsrvs;
}
}
2、listen 开启监听端口
listen address:port [ssl] [udp] [proxy_protocol] [backlog=number]
[bind] [ipv6only=on|off] [reuseport]
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
3 proxy_pass address;
指定后端服务器地址
4 proxy_timeout timeout;
无数据传输时,保持连接状态的超时时长
默认为10m
5 proxy_connect_timeout time;
设置nginx与被代理的服务器尝试建立连接的超时时长
默认为60s
stream {
upstream mysqlsrvs {
server 192.168.0.10:3306;
server 192.168.0.11:3306;
hash $remote_addr consistent;
}
server {
listen 172.16.100.100:3306;
proxy_pass mysqlsrvs;
proxy_timeout 60s;
proxy_connect_timeout 10s;
}
}
实现Nginx高并发Linux内核优化
由于默认的Linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访
问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的
性能,根据业务特点来进行调整,当Nginx作为静态web内容服务器、反向代理或者
提供压缩服务器的服务器时,期内核参数的调整都是不同的,这里针对最通用的、
使Nginx支持更多并发请求的TCP网络参数做简单的配置,
修改/etc/sysctl.conf来更改内核参数
fs.file-max = 999999 表示单个进程较大可以打开的句柄数
net.ipv4.tcp_tw_reuse = 1
参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,
这对于服务器来说意义重大,因为总有大量TIME_WAIT状态的链接存在
net.ipv4.tcp_keepalive_time = 600
当keepalive启动时,TCP发送keepalive消息的频度;默认是2小时,将其设
置为10分钟,可更快的清理无效链接
net.ipv4.tcp_fin_timeout = 30
当服务器主动关闭链接时,socket保持在FIN_WAIT_2状态的较大时间
net.ipv4.tcp_max_tw_buckets = 5000
这个参数表示操作系统允许TIME_WAIT套接字数量的较大值,如果超过这个数字,
TIME_WAIT套接字将立刻被清除并打印警告信息,默认为8000,过多的TIME_WAIT
套接字会使Web服务器变慢
net.ipv4.ip_local_port_range = 1024 65000
定义UDP和TCP链接的本地端口的取值范围
net.ipv4.tcp_rmem = 10240 87380 12582912
定义了TCP接受缓存的最小值、默认值、较大值
net.ipv4.tcp_wmem = 10240 87380 12582912
定义TCP发送缓存的最小值、默认值、较大值
net.core.netdev_max_backlog = 8096
当网卡接收数据包的速度大于内核处理速度时,会有一个列队保存这些数据包。
这个参数表示该列队的较大值
net.core.rmem_default = 6291456 表示内核套接字接受缓存区默认大小
net.core.wmem_default = 6291456 表示内核套接字发送缓存区默认大小
net.core.rmem_max = 12582912 表示内核套接字接受缓存区较大大小
net.core.wmem_max = 12582912 表示内核套接字发送缓存区较大大小
注意:以上的四个参数,需要根据业务逻辑和实际的硬件成本来综合考虑
net.ipv4.tcp_syncookies = 1 与性能无关。用于解决TCP的SYN攻击
net.ipv4.tcp_max_syn_backlog = 8192
这个参数表示TCP三次握手建立阶段接受SYN请求列队的较大长度,默认1024,
将其设置的大一些可使出现Nginx繁忙来不及accept新连接时,Linux不至于丢
失客户端发起的链接请求
net.ipv4.tcp_tw_recycle = 1 这个参数用于设置启用timewait快速回收
net.core.somaxconn=262114
选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求
中,默认的值可能会导致链接超时或者重传,因此需要结合高并发请求数来调节此值。
net.ipv4.tcp_max_orphans=262114
选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。
如果超过这个数字,孤立链接将立即被复位并输出警告信息。这个限制指示为了防止
简单的DOS攻击,不用过分依靠这个限制甚至认为的减小这个值,更多的情况是增加
这个值
nginx 编译安装:
yum install pcre-devel openssl-devel zlib-devel
useradd -r –s /sbin/nologin nginx
./configure --prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_dav_module \
--with-http_stub_status_module \
--with-threads \
--with-file-aio
make && make install
编译安装nginx选项:
--prefix=/etc/nginx 安装路径
--sbin-path=/usr/sbin/nginx 指明nginx程序文件安装路径
--conf-path=/etc/nginx/nginx.conf 主配置文件安装位置
--error-log-path=/var/log/nginx/error.log 错误日志文件安装位置
--http-log-path=/var/log/nginx/access.log 访问日志文件安装位置
--pid-path=/var/run/nginx.pid 指明pid文件安装位置
--lock-path=/var/run/nginx.lock 锁文件安装位置
--http-client-body-temp-path=/var/cache/nginx/client_temp
客户端body部分的临时文件存放路径,服务器允许客户端使用put方法提交大
数据时,临时存放的磁盘路径
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
作为代理服务器,服务器响应报文的临时文件存放路径
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
作为fastcgi代理服务器,服务器响应报文的临时文件存放路径
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
作为uwsgi代理服务器,服务器响应报文的临时文件存放路径
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
作为scgi反代服务器,服务器响应报文的临时文件存放路径
--user=nginx 指明以那个身份运行worker进程,主控master进程一般由root运行
--group=nginx
--with-http_ssl_module 表示把指定模块编译进来
总结
动静分离搭建时,将静态文件单独指出并指向一个web服务器,动态的作为根
查看系统单进程可打开的最大文件个数/proc/sys/fs/file-max