You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理后端重定向URL丢失前缀问题求助

问题分析

  1. 请求https://example.com/myapp时,Nginx因location /myapp/的匹配规则,会先301重定向到https://example.com/myapp/,再转发为http://192.168.0.100/给后端Apache。
  2. Apache处理根路径请求后,返回http://example.com/login的重定向,但Nginx未自动改写该重定向的协议(HTTP→HTTPS)和路径前缀(添加/myapp),导致最终返回给客户端的是https://example.com/login,缺失前缀。

修正后的配置

server {
  listen 443 ssl;
    
  server_name example.com;

  # 处理不带斜杠的/myapp请求,统一转向带斜杠的路径,避免匹配歧义
  location = /myapp {
    return 301 $scheme://$host/myapp/;
  }

  location /myapp/ {
    proxy_pass http://192.168.0.100/;
    # 传递客户端请求的Host头,让Apache生成正确域名的重定向
    proxy_set_header Host $host;
    # 告诉Apache请求是通过HTTPS发起的
    proxy_set_header X-Forwarded-Proto $scheme;
    # 改写Apache返回的重定向:将http://example.com/开头的地址替换为https://example.com/myapp/
    proxy_redirect http://$host/ https://$host/myapp/;
    # 传递客户端真实IP给Apache(可选)
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}

关键配置说明

  • location = /myapp:精确匹配不带斜杠的请求,强制重定向到带斜杠的版本,确保后续location /myapp/能正确匹配并转发。
  • proxy_set_header Host $host:让Apache知道客户端请求的域名是example.com,而非后端的192.168.0.100,这样Apache返回的重定向会使用example.com作为域名,方便Nginx后续改写。
  • proxy_set_header X-Forwarded-Proto $scheme:告知Apache当前请求是通过HTTPS协议发起的,部分应用会根据这个头自动生成HTTPS重定向(若你的应用支持,可减少proxy_redirect的依赖)。
  • proxy_redirect http://$host/ https://$host/myapp/:核心规则,将Apache返回的http://example.com/xxx格式的重定向,替换为https://example.com/myapp/xxx,既修正了协议,又补上了路径前缀。

内容的提问来源于stack exchange,提问作者Meisterzunge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:42:22