应用程序、问题和目标的概述。
该应用程序由一个微服务网络组成,封装在单独的 Docker 容器中。这些容器是 Django、Postgres、Nodejs(+ Socket.io) 和 Nginx+Angular2(静态文件)。Nginx 目前有文件的特定路由,并将所有其他请求路由到 Angular2 应用程序,然后它有自己的路由器。
目前,应用程序可以直接从根目录提供服务,但必须将其移动到子目录中。该地址随后将包含目录的新路径。
因此,它在部署到 ... 时有效http://host
,但不适用于http://host/path
,因为微服务中的所有请求都由 NGINX 反向代理路由。
如何使用 NGINX 重写/重定向附加/path
到 URL 以便可以从子目录提供它,但 NGINX 仍然会知道这些位置仍然存在于根级别?
我的 301 尝试
location = / {
root /www/ng;
try_files $uri $uri/ /index.html;
return 301 http://$host/pot;
}
在这里,我在捕获所有位置进行了 301 重定向。它适用于所有问题,但将 301 添加到静态位置时,重定向不起作用。301是最好的解决方案吗?我将如何重定向静态位置?
原始 NGINX 配置文件
server {
listen 80;
client_max_body_size 10M;
root /www/data;
location /static {
alias /var/www/static;
}
location /media {
alias /var/www/media;
}
location ~* ^/(api|admin) {
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_pass http://django:8000;
}
location /gateway {
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 Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://nodejs:3000;
}
location = / {
root /www/ng;
}
location / {
try_files $uri $uri/ @ng;
}
location @ng {
root /www/ng;
try_files $uri $uri/ /index.html;
}
error_page 403 /403.html;
error_page 404 /404.html;
error_page 500 502 503 504 /500.html;
}