如何使用NGINX将所有请求重定向到子路径?

时间:2017-10-07 13:57:58

标签: angular docker nginx microservices nginx-reverse-proxy

应用程序,问题和目标概述。

该应用程序由一个微服务网络组成,包含在各个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;
  }

这里我在catch所有位置进行了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;
}

0 个答案:

没有答案