Skip to content

Nginx常用配置

location匹配优先级

  1. 【=】 精确匹配。也就是完全匹配 最高优先级,匹配成功,则不再查找其他匹配项
  1. 【^~】 字符串前缀匹配 增强通用匹配优先级,匹配成功不再查找其他匹配项
  1. 【~】 正则匹配,区分大小写 匹配成功,则不再匹配其他location
  1. 【~*】 正则匹配,不区分大小写` 同上3
  1. 【@】 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files 目前看到vue-history中有用到
  1. 【/】通用匹配, 如果没有其它匹配,任何请求都会匹配到;其优先级低于 /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/;
    # ...
}