Nginx常用配置
location匹配优先级
【=】
精确匹配。也就是完全匹配 最高优先级,匹配成功,则不再查找其他匹配项
【^~】
字符串前缀匹配 增强通用匹配优先级,匹配成功不再查找其他匹配项
【~】
正则匹配,区分大小写 匹配成功,则不再匹配其他location
【~*】
正则匹配,不区分大小写` 同上3
【@】
定义一个命名的 location,使用在内部定向时,例如 error_page, try_files 目前看到vue-history中有用到
【/】
通用匹配, 如果没有其它匹配,任何请求都会匹配到;其优先级低于 /xxx
location常用配置
shell
# ...
# 都匹配不上才会走这 /
location / {
root html;
index index.html index.htm;
# 禁用html缓存 不然每次发版请强制刷新
add_header Cache-Control no-store;
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|woff|ttf|png|svg|gif|jpg|jpeg)$ {
root /usr/share/nginx/html;
expires 7d; # 静态文件缓存七天
}
# 示例1 正则匹配的示例
location ~* /test-api/(.*) {
# $1为~*后正则分组匹配到的组;
# 正则匹配的post请求不会丢失参数。get请求可能会丢失参数,需要在$1后面拼接,$args不带?的query, eg:name=chaos&age=18
proxy_pass http://locahost:8000/$1?$args;
}
# 示例2 反向代理路由的小细节【推荐使用示例1的方案】
location /test-api/ {
# 匹配的关键词前后加斜杠与目标地址后不加/斜杠 最终转发到:http://locahost:8000/test-api/xxxxx【不干掉匹配关键词部分】
proxy_pass http://locahost:8000;
}
location /test-api/ {
# 匹配的关键词前后加斜杠与目标地址后加/斜杠 最终转发到:http://locahost:8000/xxxxx 【干掉匹配关键词部分】
proxy_pass http://locahost:8000/;
}
# ...
负载均衡
shell
http {
# ...
# upstream必须配置在http作用域下
upstream backend-server {
# weight 权重越大命中可能性越高
# 有3次请求失败,nginx在10秒内,不会将新的请求分配给它
ip_hash; # 同一ip走同一台机器,解决session问题
server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=10;
server 127.0.0.2:8080 weight=4 max_fails=3 fail_timeout=10;
server 127.0.0.3:8080 weight=5 max_fails=3 fail_timeout=10;
}
# HTTP server
server {
listen 80;
server_name locahost;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
# api接口启用 负载均衡
location /api/ {
proxy_pass http://backend-server/;
}
}
}
nginx日志
- 通过查看nginx日志,协助定位nginx配置问题
shell
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/web-access.log;
error_log /var/log/nginx/web-error.log;
root /aupup/;
# ...
}