不同位置不同域上的 nginx 反向代理,具有服务器名称路径

不同位置不同域上的 nginx 反向代理,具有服务器名称路径

我有两个 python django web 应用程序 A1 和 B1。A1 在同一台服务器上的 8000 端口上运行,B1 在同一台服务器上的 8001 端口上运行。A1 和 B1 都是 https,并且都配置在同一个 nginx 中,并且都成功运行。

一切都运行良好,直到出现新的要求。我们需要打开https://A1/location1作为https://B1但它应该显示https://A1/location1在地址栏中。

这是我到目前为止在 nginx 的 sites-available 配置中尝试过的内容。

server {
    listen 443;
    server_name A1;
    ssl    on;
    ssl_certificate /certificate/file/path;
    ssl_certificate_key /private/key/filepath;
location /location1/ {
proxy_pass https://loan.fundspi.com/;
 }
    location / {
        proxy_pass         http://127.0.0.1:8000/;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
    }
    location /media {
        alias /opt/A1/media;
        }
    location /static {
        alias /opt/A1/static;
    }

server {
    listen 443;
    server_name B1;
    ssl    on;
    ssl_certificate /certificate/file/path;
    ssl_certificate_key /private/key/filepath;
    location / {
        proxy_pass         http://127.0.0.1:8001/;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
}
    location /media {
        alias /opt/B1/media;
        }
    location /static {
        alias /opt/B1/static;
    }

}

它打开了https://B1作为https://A1/location1符合预期,但 css js 图像未在此处加载。它尝试从路径中获取 css /js /imageshttps://A1/static/js/file.jshttps://A1/static/css/file.css或者 https://A1/static/img/file.png。其他网站的 js css img 不在项目 A1 的静态文件夹中。它们存在于静态文件夹 B1 中。这就是为什么它们大多数都 404。

我无法将 B1 的静态文件夹放入 A1 的静态文件夹中。它们完全不同。有些文件名相同,但内容不同。这会弄乱 https 站点 A1

当用户打开 A1 的内页时,其他位置也会显示 B1 内页的内容,但 url 属于 A1。

请帮我根据这个要求编写正确的配置文件。

答案1

https://B1您需要更改为 HTML 中的静态资源生成的URL 。

最好的办法是修改应用程序代码,B1使其使用https://A1/location1/static作为资源的加载路径而不是https://A1/static

另一个可行的选择是使用http_sub_module重写代理端点的 HTML 代码,以便将所有/static字符串替换为/location1/static。但这有点危险,因为替换可能会影响您不想更改的代码部分。

相关内容