Nginx 配置代理

69 阅读1分钟

Nginx proxy_pass 配置详解

四种配置的区别

1. location /alarm/ { proxy_pass http://10.25.2.11 }

  • 特点: proxy_pass 后面没有斜杠
  • 行为: 路径映射是透明的,会将 location 匹配的部分原样传递
  • 示例:
    • 访问 localhost/alarm/getName
    • 实际访问 http://10.25.2.11/getName (去掉了 /alarm/ 前缀)

2. location /alarm/ { proxy_pass http://10.25.2.11/ }

  • 特点: proxy_pass 后面有斜杠
  • 行为: 会将匹配的路径附加到 proxy_pass 的 URL 后面
  • 示例:
    • 访问 localhost/alarm/getName
    • 实际访问 http://10.25.2.11/alarm/getName (保留了原始路径)

3. location /alarm { proxy_pass http://10.25.2.11/ }

  • 特点: location 不以斜杠结尾,proxy_pass 以斜杠结尾
  • 行为: 将整个匹配的 URI 附加到 proxy_pass 后面
  • 示例:
    • 访问 localhost/alarm/getName
    • 实际访问 http://10.25.2.11/alarm/getName (保留了原始路径)

4. location /alarm { proxy_pass http://10.25.2.11 }

  • 特点: location 和 proxy_pass 都不以斜杠结尾
  • 行为: 路径映射是透明的,会将 location 匹配的部分原样传递
  • 示例:
    • 访问 localhost/alarm/getName
    • 实际访问 http://10.25.2.11/getName (去掉了 /alarm 前缀)

理解要点

核心规则

  1. proxy_pass 末尾无斜杠: Nginx 会去除 location 匹配的部分,将剩余部分传递给后端
  2. proxy_pass 末尾有斜杠: Nginx 会将整个匹配的路径附加到 proxy_pass 后面
  3. location 匹配模式:
    • 以斜杠结尾: 精确匹配路径
    • 不以斜杠结尾: 匹配所有以该前缀开头的路径

记忆技巧

  • 当 proxy_pass 以斜杠结尾时,保留原始路径结构
  • 当 proxy_pass 不以斜杠结尾时,会去掉 location 匹配的部分
  • location 的斜杠影响匹配的精确度,但不影响 proxy_pass 的行为规则