nginx 常用指令
Http 节点
error_page
定义状态码跳转页面。状态码必须在 300 和 599 之间
语法:error_page code ... [=[response]] uri;
常见用法:
error_page 500 502 503 504 /50x.html;
#当前是将状态码改成对应另外一个
error_page 404 =200 /empty.gif
# 也可以使用变量的方式
location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
# 同时可以使用url进行重定向
error_page 403 http://example.com/forbidden.html;
log_format
指定日志格式,可以定义多个,但是名称不能一样。
语法:log_format name [escape=default|json|none] string ...;
name:日志格式名称
escape 的 default:将 ““”、“\” 和其值小于 32 或者大于 126 的字符转义成 \xXX,如果未找到变量值则用 “-” 表示。
json:“”” 转义成 “"”,“\” 转义成 “\”,字符值小于 32 转义成 “\n”, “\r”, “\t”, “\b”, “\f”, 或者 “\u00XX”。
可以使用的公共变量:
变量名称 | 解释 | 示例 |
---|---|---|
$bytes_sent | 发送到客户端的字节数 | |
$connection_requests | 通过当前连接的请求数 | |
$request_length | 请求长度(包括请求头,请求行和请求体) | |
$request_time | 从客户端读取的第一个字节到最后的字节再加上写入日志所持续的时间,单位是毫秒。 | |
$status | 响应状态 | |
$time_iso8601 | ISO 8601 标准格式的本地时间 | |
$time_local | 通用日志格式中的本地时间 | |
$remote_addr | 客户端地址 | 211.28.65.253 |
$remote_user | 客户端用户名称 | |
$request | 请求的URI和HTTP协议 | GET /article-10000.html HTTP/1.1 |
$http_host | 请求地址,即浏览器中你输入的地址(IP或域名) | www.it300.com |
$upstream_status | upstream状态 | 200 |
$body_bytes_sent | 发送给客户端文件内容大小 | 1547 |
$http_referer | url跳转来源 | https://www.baidu.com/ |
$http_user_agent | 用户终端浏览器等信息 | Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C |
$ssl_protocol | SSL协议版本 | TLSv1 |
$ssl_cipher | 交换数据中的算法 | RC4-SHA |
$upstream_addr | 后台upstream的地址,即真正提供服务的主机地址 | 10.10.10.100:80 |
$upstream_response_time | 请求过程中,upstream响应时间 | 0.002 |
示例:
log_format test '"客户端地址:"$remote_addr ";客户端名称:" $remote_user'
'";请求协议:" $request ";请求地址:" $http_host ";请求状态:" $status'
'";浏览器信息:" $http_user_agent "===" $bytes_sent "===" $connection_requests "===" $request_length:"===" $request_time';
access_log logs/test.log test;
"客户端地址:"127.0.0.1 ";客户端名称:" -";请求协议:" GET / HTTP/1.1 ";请求地址:" localhost:8078 ";请求状态:" 304";浏览器信息:" Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 "===" 747 "===" 1 "===" 956:"===" 0.340
upstream
定义一组 server。
语法:upstream name { ... }
示例:
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
接收到请求会进行轮询访问每个节点,如果其中一个节点宕机会尝试下一个节点,直到最后一个地址或者最后一个错误地址的通信信息。TCP 和 UNIX 可以混合使用。
参数:
- weight:配置权重,默认是 1,上面 7 个请求,5 个请求经过第一个,剩下两个分别经过第二第三个。权重分别是 7 + 1 + 1。根据这个比例轮询。
- max_fails:失败几次后会被剔除
- fail_timeout:失败重试时间
- backup:备用机(其他服务挂掉之后,才会被访问)
- down:标识服务器节点不可用
max_fails=3 fail_timeout=30s 配置表示如果在 30s 内失败次数达到 3次,那么后面的 30s 将不会有请求经过当前地址,30s 后再次尝试,然后循环这个过程。