nginx 配置参数

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

系统内核参数配置

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1800 

net.ipv4.ip_conntrack_max = 16777216 # 如果使用默认参数,容易出现网络丢包 

net.ipv4.netfilter.ip_conntrack_max = 16777216# 如果使用默认参数,容易出现网络丢包 

net.ipv4.tcp_max_syn_backlog = 65536 

net.core.netdev_max_backlog = 32768 

net.core.somaxconn = 32768 

net.core.wmem_default = 8388608 

net.core.rmem_default = 8388608 

net.core.rmem_max = 16777216 

net.core.wmem_max = 16777216 

net.ipv4.tcp_timestamps = 0 

net.ipv4.tcp_synack_retries = 2 

net.ipv4.tcp_syn_retries = 

net.ipv4.tcp_tw_recycle = 1 

net.ipv4.tcp_tw_reuse = 1 

net.ipv4.tcp_mem = 94500000 915000000 927000000 

net.ipv4.tcp_max_orphans = 3276800 

net.ipv4.ip_local_port_range = 1024 65535


location的配置选项及说明

语法规则: location [=|~|~*|^~] /uri/ { … } 

= 表示精确匹配,这个优先级也是最高的 

^~ 表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。 

~ 表示区分大小写的正则匹配 

~* 表示不区分大小写的正则匹配(和上面的唯一区别就是大小写) 

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则 

/ 通用匹配,任何请求都会匹配到,默认匹配. 

下面讲讲这些语法的一些规则和优先级 

多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

优先级=>^~> 

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 例子,有如下匹配规则:


root&alias文件路径配置

root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。

[root] 语法:root path 

默认值:root html 

配置段:http、server、location、if 

[alias] 语法:alias path 

配置段:location

location ~ ^/weblogs/ {

    root /path/to/weblogs/site.com;

    autoindex on;

    auth_basic "Restricted";

    auth_basic_user_file passwd/weblogs;

}

root会根据完整的URI来映射,就是/path/uri

location ^~ /binapp/ {

    limit_conn limit 4;

    limit_rate 200k;

    internal;

    alias /path/to/site/statics/bin/apps/;

}

alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。

1. 使用alias时,目录名后面一定要加”/”。

2. alias可以指定任何名称。 

3. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。 

4. alias只能位于location块中



ngx_http_core_module模块的变量

argPARAMETERHTTP/index.php?site=www.domain.comarg_site取得www.domain.com 这个值。

args HTTP 请求中的完整参数。例如,在请求/index.php?width=400&height=200 中,args表示字符串width=400&height=200.

$binary_remote_addr 二进制格式的客户端地址。例如:\x0A\xE0B\x0E

$body_bytes_sent 表示在向客户端发送的http响应中,包体部分的字节数

$content_length 表示客户端请求头部中的Content-Length 字段

$content_type 表示客户端请求头部中的Content-Type 字段

$cookie_COOKIE 表示在客户端请求头部中的cookie 字段

$document_root 表示当前请求所使用的root 配置项的值

$uri 表示当前请求的URI,不带任何参数

documenturiuri 含义相同

requesturiURIuri和documenturiURIrequest_uri 永远不会改变,始终是客户端的原始URI.

hostHostHostserverHostIP:PORThost是去掉端口的,它的值为IP。$host 是全小写的。这些特性与http_HEADER中的http_host不同,http_host只取出Host头部对应的值。 

$hostname 表示 Nginx所在机器的名称,与 gethostbyname调用返回的值相同 

httpHEADERHTTPHEADERHosthttp_host表 

senthttpHEADERHTTPHEADERsent_ http_content_type表示响应中 Content-Type头部对应的值 

isargsURIis_args值为 ?,如果不带参数,则是空字符串 

$limit_rate 表示当前连接的限速是多少,0表示无限速 

$nginx_version 表示当前 Nginx的版本号 

querystringURIargs相同,然而 $query_string是只读的不会改变 

$remote_addr 表示客户端的地址 

$remote_port 表示客户端连接使用的端口 

$remote_user 表示使用 Auth Basic Module时定义的用户名 

$request_filename 表示用户请求中的 URI经过 root或 alias转换后的文件路径 

$request_body 表示 HTTP请求中的包体,该参数只在 proxy_pass或 fastcgi_pass中有意义 

$request_body_file 表示 HTTP请求中的包体存储的临时文件名 

$request_completion 当请求已经全部完成时,其值为 “ok”。若没有完成,就要返回客户端,则其值为空字符串;或者在断点续传等情况下使用 HTTP range访问的并不是文件的最后一块,那么其值也是空字符串。

$request_method 表示 HTTP请求的方法名,如 GET、PUT、POST等 

$scheme 表示 HTTP scheme,如在请求 https://nginx.com/中表示 https 

$server_addr 表示服务器地址 

$server_name 表示服务器名称 

$server_port 表示服务器端口 

$server_protocol 表示服务器向客户端发送响应的协议,如 HTTP/1.1或 HTTP/1.0



日志配置

如access_log、log_format、open_log_file_cache、log_not_found、log_subrequest、rewrite_log、error_log。

1. access_log指令

语法: access_log path [format [buffer=size [flush=time]]];

access_log path format gzip[=level] [buffer=size] [flush=time];

access_log syslog:server=address[,parameter=value] [format];

access_log off;

默认值: access_log logs/access.log combined;

配置段: http, server, location, if in location, limit_except

gzip压缩等级。

buffer设置内存缓存区大小。

flush保存在缓存区中的最长时间。

不记录日志:access_log off;

使用默认combined格式记录日志:access_log logs/access.log 或 access_log logs/access.log combined;


2. log_format指令

语法: log_format name string …;

默认值: log_format combined “…”;

配置段: http

name表示格式名称,string表示等义的格式。log_format有一个默认的无需设置的combined日志格式,相当于apache的combined日志格式,

log_format  combined  'remoteaddrremote_user  [$time_local]  '

                                   ' "request"status  $body_bytes_sent  '

                                   ' "httpreferer""http_user_agent" ';

nginx作为负载均衡,squid,nginx反向代理后,$remote_addr获取反向代理的IP地址。反向代理服务器中在转发请求的http头信息中,增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。

log_format  porxy  'http_x_forwarded_for -remote_user  [$time_local]  '

                             ' "request"status $body_bytes_sent '

                             ' "httpreferer""http_user_agent" ';

remoteaddr,http_x_forwarded_for 记录客户端IP地址

$remote_user 记录客户端用户名称

$request 记录请求的URL和HTTP协议

$status 记录请求状态

$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。

$bytes_sent 发送给客户端的总字节数。

$connection 连接的序列号。

$connection_requests 当前通过一个连接获得的请求数量。

$msec 日志写入时间。单位为秒,精度是毫秒。

$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。

$http_referer 记录从哪个页面链接访问过来的

$http_user_agent 记录客户端浏览器相关信息

$request_length 请求的长度(包括请求行,请求头和请求正文)。

$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

$time_iso8601 ISO8601标准格式下的本地时间。

$time_local 通用日志格式下的本地时间。


3. open_log_file_cache指令

语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

open_log_file_cache off;

默认值: open_log_file_cache off;

配置段: http, server, location

对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off),格式如下:

参数注释如下:

max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。

inactive:设置存活时间,默认是10s

min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次

valid:设置检查频率,默认60s

off:禁用缓存


4. log_not_found指令

语法: log_not_found on | off;

默认值: log_not_found on;

配置段: http, server, location

是否在error_log中记录不存在的错误。默认是。


5. log_subrequest指令

语法: log_subrequest on | off;

默认值: log_subrequest off;

配置段: http, server, location

是否在access_log中记录子请求的访问日志。默认不记录。


6. rewrite_log指令

由ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启。 Nginx重写规则指南

语法: rewrite_log on | off;

默认值: rewrite_log off;

配置段: http, server, location, if

启用时将在error log中记录notice级别的重写日志。


7. error_log指令

语法: error_log file | stderr | syslog:server=address[,parameter=value] [debug | info | notice | warn | error | crit | alert | emerg];

默认值: error_log logs/error.log error;

配置段: main, http, server, location

配置错误日志。



nginx的rewrite模块

重写规则就是正则匹配,依赖于PCRE库

nginx的重写模块是一个简单的正则表达式匹配与一个虚拟堆叠机结合。

指令

break
语法:break
默认值:none
使用字段:server, location, if
完成当前设置的重写规则,停止执行其他的重写规则。

if
语法:if (condition) { … }
默认值:none
使用字段:server, location
注意:尽量考虑使用trp_files代替。
判断的条件可以有以下值:
1. 一个变量的名称:空字符传”“或者一些“0”开始的字符串为false。
2. 字符串比较:使用=或!=运算符
3. 正则表达式匹配:使用~(区分大小写)和~*(不区分大小写),取反运算!~和!~*。
4. 文件是否存在:使用-f和!-f操作符
5. 目录是否存在:使用-d和!-d操作符
7. 文件、目录、符号链接是否存在:使用-e和!-e操作符
8. 文件是否可执行:使用-x和!-x操作符

return
语法:return code
默认值:none
使用字段:server, location, if



nginx隐藏版本号

nginx.conf中修改http zone中的变量值: server_tokens off;

php-fpm fastcgi.conf中的变量值: fastcgi_param SERVER_SOFTWARE nginx;



nginx正向代理

server {

listen 8090;

location / {

resolver 218.85.157.99 218.85.152.99;

resolver_timeout 30s;

proxy_pass http://hostrequest_uri;

}

access_log  /data/httplogs/proxy-$host-aceess.log;      

}

resolver指令
语法: resolver address ... [valid=time];
默认值: —
配置段: http, server, location
配置DNS服务器IP地址。可以指定多个,以轮询方式请求。
nginx会缓存解析的结果。默认情况下,缓存时间是名字解析响应中的TTL字段的值,可以通过valid参数更改。

resolver_timeout指令
语法: resolver_timeout time;
默认值: resolver_timeout 30s;
配置段: http, server, location
解析超时时间。


haproxy、 nginx、 varnish的CDN调度

nginx的TCP代理

nginx的反向代理

nginx+keepalived+proxy_cache高可用nginx集群和高速缓存

nginx优化














本文转自ting2junshui51CTO博客,原文链接:http://blog.51cto.com/ting2junshui/2066268 ,如需转载请自行联系原作者



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
143
分享
相关文章
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
323 7
Nginx进程配置指令详解
Nginx进程配置指令主要包括:`worker_processes`设置工作进程数;`worker_cpu_affinity`绑定CPU核心;`worker_rlimit_nofile`设置最大文件描述符数量;`worker_priority`设置进程优先级;`worker_connections`设置最大连接数;`daemon`控制守护进程模式;`master_process`启用主进程模式;`pid`设置PID文件路径;`user`指定用户和组;`error_log`配置错误日志。这些指令在`nginx.conf`中配置,用于优化和控制Nginx的运行行为。
89 10
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
654 0
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
156 4
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
308 61
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
343 60
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
430 60
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
186 5
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等