Nginx 的常用配置
一些常用的 nginx 配置。
日志
设置错误日志文件和日志级别,一般在配置文件最开始处配置:
error_log /tmp/logs/error.log info;
日志格式 log_format 分为 http log_format 和 stream log_format,两者的格式中可以使用的变量不同。
紧跟在 log_format 后面的字符串是日志格式的名称,nginx 支持定义多个格式,以 http log_format 为例:
# 格式名称为 main
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
http 的日志格式中可以添加任意的 http 头,例如上面的 $http_user_agent
。
日志格式只用于访问日志,用 access_log 引用引用,access_log 同样分为 http access_log 和 stream access_log。http 的 access_log 可以在 location 中单独设置。
使用效果,在 http 中定义 tranproxy:
http{
...省略...
log_format tranproxy '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
...省略...
}
在 location 中引用:
location / {
access_log /var/log/nginx/access.80.log tranproxy;
... 省略 ...
}
访问日志,不带 -H X-Forwarded-For
时:
172.17.0.5 - - [14/Nov/2019:03:12:15 +0000] "GET / HTTP/1.1" 200 467 "-" "curl/7.61.1" "-"
访问日志,带有 -H X-Forwarded-For
时:
172.17.0.5 - - [14/Nov/2019:03:12:15 +0000] "GET / HTTP/1.1" 200 467 "-" "curl/7.61.1" "127.0.0.1"
location 的匹配规则
location 是最常用的,支持四个修饰符: =
、~
、 ~*
、^~
。
=
: 严格一致~
: 区分大小写的正则匹配~*
: 不区分大小写的正则匹配^~
: 前缀匹配成功后,忽略正则匹配
正则表达式语法参考 man 7 regex
,下面的表达式匹配以 /detail 开头且不含有 .
路径:
location ~ '^/detail/[^.]*$ {
...省略...
}