我有两个 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.js, https://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
。但这有点危险,因为替换可能会影响您不想更改的代码部分。