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

Nginx反向代理加载外部网站到子目录失败,求配置修正方案

修复Nginx反向代理外部网站到子目录的404问题

你的配置核心问题是:访问https://localhost:9091/looker时,Nginx会把完整路径/looker转发给谷歌服务器,但谷歌根本没有/looker这个路径,所以返回404。下面是修复后的完整配置,以及关键修改说明:

worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {}

http {
    upstream keepalive-upstream {
        server google.com:443;
        keepalive 64;
    }

    server {
        listen    9091 ssl;
     
        ssl_certificate /etc/ssl/nginx-selfsigned.crt;
        ssl_certificate_key /etc/ssl/nginx-selfsigned.key;

        location /looker {
            # 末尾加/,让Nginx去掉/looker前缀后转发到谷歌根路径
            proxy_pass https://keepalive-upstream/;
            proxy_http_version 1.1;
            proxy_ssl_server_name on;
            proxy_buffering off;
            proxy_set_header Accept-Encoding "";
            proxy_set_header Host google.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 替换页面中所有谷歌域名的引用为本地子目录
            sub_filter "https://google.com" "https://localhost:9091/looker";
            sub_filter "//google.com" "//localhost:9091/looker";
            # 替换页面中根路径开头的资源引用为子目录路径
            sub_filter 'href="/' 'href="/looker/';
            sub_filter 'src="/' 'src="/looker/';
            sub_filter_types *;
            sub_filter_once off;

            # 修正Cookie的域名和路径,适配子目录
            proxy_cookie_domain google.com localhost:9091;
            proxy_cookie_path / /looker/;
        }

        location / {
            root /www;
        }
    }
}

关键修改点说明

  • proxy_pass末尾加/:这是核心,没有这个/的话,Nginx会把/looker原封不动传给谷歌;加了之后,Nginx会把请求路径中/looker后面的部分(这里是空)转发到谷歌的/路径,也就是请求谷歌首页。
  • 扩展sub_filter规则:谷歌页面里的资源、链接都是指向自身域名或者根路径的,必须全部替换成你的子目录路径,否则页面会加载谷歌的原始资源,甚至跳转到谷歌官网。
  • Cookie适配:谷歌返回的Cookie域名是google.com,浏览器不会在localhost:9091下保存,所以需要用proxy_cookie_domain和proxy_cookie_path修改Cookie的属性,确保会话正常。

测试步骤

  1. 保存修改后的配置文件
  2. 执行nginx -t检查配置语法是否正确
  3. 执行nginx -s reload重启Nginx生效
  4. 访问https://localhost:9091/looker,查看页面是否正常加载,打开浏览器开发者工具检查资源请求路径是否都已替换为/looker/开头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:16