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

通过Nginx反向代理隐藏路径后缀 实现mail.example.com访问/mail目录

Nginx反向代理去除路径前缀配置方案

现有配置问题分析

  • 路径重复拼接:当邮件应用返回的静态资源、跳转链接自带/mail前缀时,用户浏览器请求mail.example.com/mail/xxx,现有配置会把请求代理到https://1.2.3.4/mail/mail/xxx,导致资源404。
  • 未修正后端响应的路径:后端返回的重定向头、HTML内容里的绝对路径都携带/mail前缀,浏览器会按照这个路径发起请求,自然加载失败。

可用配置参考

server {
    listen 443 ssl http2;
    server_name mail.example.com;

    # 你的SSL证书配置
    # ssl_certificate /path/to/your/fullchain.pem;
    # ssl_certificate_key /path/to/your/privkey.pem;

    location / {
        # 末尾加斜杠,Nginx自动完成路径映射,无需手动拼接$request_uri
        proxy_pass https://1.2.3.4/mail/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # 禁用压缩保证内容替换生效
        proxy_set_header Accept-Encoding "";
        
        # 修正后端返回的重定向路径
        proxy_redirect https://1.2.3.4/mail/ /;
        proxy_redirect /mail/ /;

        # 替换响应内容里的路径前缀
        sub_filter 'href="/mail/' 'href="/';
        sub_filter 'src="/mail/' 'src="/';
        sub_filter 'action="/mail/' 'action="/';
        sub_filter_once off;
        sub_filter_types text/html text/css application/javascript;
    }

    # 直接访问带/mail前缀的路径时,自动重定向到去掉前缀的地址
    location ^~ /mail/ {
        rewrite ^/mail(.*)$ $1 permanent;
    }
}

配置说明

  • proxy_pass末尾添加斜杠:Nginx会自动完成路径映射,用户请求/test.css会被代理到https://1.2.3.4/mail/test.css,避免手动拼接$request_uri导致的重复前缀问题。
  • proxy_redirect配置:自动修正后端返回的301/302跳转响应头,把带/mail前缀的跳转地址改为根路径地址。
  • sub_filter配置:自动替换HTML、CSS、JS内容中的绝对路径前缀,把所有/mail/开头的资源路径替换为/,解决静态资源加载失败问题;添加proxy_set_header Accept-Encoding "";禁用压缩,保证替换逻辑生效。
  • /mail/路径重定向规则:用户访问带/mail前缀的地址时,会自动永久重定向到去掉前缀的地址,避免路径重复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:45:01