nginx access.log format

$upstream_addr

保留 IP 地址和端口,或上游服务器的 UNIX 域套接字的路径。如果在请求处理期间联系了多个服务器,则它们的地址用逗号分隔,例如“ 192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock”。如果发生从一个服务器组到另一个服务器组的内部重定向,由“X-Accel-Redirect”或 error_page 发起,则来自不同组的服务器地址用冒号分隔,例如“ 192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80”。如果无法选择服务器,该变量将保留服务器组的名称。

$proxy_port

proxy_pass指令中指定的代理服务器的端口 ,或协议的默认端口;

$server_port

接受请求的服务器端口

阅读更多

使用logrotate工具实现nginx日志切割

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/usr/local/nginx/logs/*.log {
# 指定转储周期为每天
daily
# 使用当期日期作为命名格式
dateext
# 如果日志丢失,不报错继续滚动下一个日志
missingok
# 保留 31 个备份
rotate 31
# 不压缩
nocompress
# 整个日志组运行一次的脚本
sharedscripts
# 转储以后需要执行的命令
postrotate
# 重新打开日志文件
[ ! -f /usr/local/nginx/nginx.pid ] || kill -USR1 `cat /usr/local/nginx/nginx.pid`
endscript
}
阅读更多

nginx conf if

nginx支持if语法,语法和平常的代码格式差不多:

1
2
3
4
5
6
   if ($http_x_user = "summer") {
return 401;
}
if ($remote_addr = "192.168.2.2") {
return 401;
}

只是和代码不同的是,if条件语句判断相等只要一个等号,不是==。

nginx虽然有if,但是却不支持else,如果想要构造else语法,可以使用下面的这个“小诀窍”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
server_name *.maqian.io;
listen 80;

location / {
set $is_matched 0;
if ($host = a.maqian.io) {
proxy_pass https://127.0.0.1:1001/;
set $is_matched 1;
}

if ($host = b.maqian.io) {
proxy_pass https://127.0.0.1:1002/;
set $is_matched 1;
}
# 没有匹配到,跳转到默认页面
if ($is_matched = 0) {
proxy_pass https://127.0.0.1;
}

# xxx
# xxx
# xxx
}
}

参考文章

https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/
https://nginx.org/en/docs/http/ngx_http_core_module.html?&_ga=2.71427731.14852861.1651803177-1904749950.1651803177#var_proxy_protocol_addr

nginx -s reload

nginx -s reload acts :

  • nginx master process running (not restarted)
  • nginx worker process restarted
阅读更多

windows下nginx的安装及使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 打开cmd命令窗口,切换到nginx解压目录下
# start nginx
./nginx.exe
start nginx.exe

# 检查80端口是否被占用的命令是:
netstat -ano | findstr 0.0.0.0:80
netstat -ano | findstr "80"

./nginx.exe -s reload
# 快速停止nginx
./nginx.exe -s stop
taskkill /f /t /im nginx.exe
# 完整有序的停止nginx
./nginx.exe -s quit

阅读更多

nginx错误分析 Connection reset by peer

nginx上下游针对请求处理的超时时间配置不合理,导致报connection reset by peer问题,即低频502,如图:
img.png

此类问题主要原因为,客户端在对上游长连接fd读写时,正好此fd被上游服务器关闭了,此时会报connection reset by peer,所以需要尽量避免上游服务器主动断开连接;

阅读更多