【问题标题】:Nginx proxy pass configuration dockerNginx 代理传递配置 docker
【发布时间】:2014-12-05 23:05:34
【问题描述】:

问题来了:

主机有多个 docker 应用程序在不同的端口上运行,例如。 App1 @ 3001,App2 @ 3002...3100 等

现在我想以http://hostname.com/app1、http://hostname.com/app2..这种格式访问应用程序。

为此,我在主机上运行 nginx,以根据 sub-uri 将请求代理到正确的端口

location = /app1 {
    proxy_redirect http://hostname:3001/;
    include /etc/nginx/proxy_params;
}

location ^~ /app1 {
    proxy_redirect http://hostname:3001/app1;
    include /etc/nginx/proxy_params;
}

但是当站点的子 uri 更改或站点重定向时,这不起作用。 例如:

If I visit the site at hostname:3001 -> I can see the site
If I visit the site at http://hostname.com/app1 -> I can see the site
If the site page is at hostname:3001/static/index.html then when i access it as http://hostname.com/app1 the page changes to http://hostname.com/static/index.html -> I get 404.

有没有办法做到这一点?还是唯一的方法是将 dns 设置为 app1.hostname.com 并进行基于名称的路由?

【问题讨论】:

  • 您的问题与 Docker 或 Nginx 无关。这是使用更改的应用程序路径进行反向代理的更普遍的问题:您的应用程序期望它在/ 提供服务,而反向代理在/app1 提供服务。我相信您可以轻松找到问题描述和解决方法。
  • 是的,我早就问过了。我通过为运行容器的主机创建 dns 记录并将容器端口映射到主机端口来解决此问题,然后将一个简单的配置添加到 nginx 映射 app1.abc.com 到代理通道中的主机:端口。它运行良好且易于扩展。

标签: nginx docker proxypass


【解决方案1】:

您可以让每个应用程序侦听单独的端口(例如 3000 和 3001),然后按如下方式配置您的 nginx(将其包含在 server {} 定义块中):

 location /app1 {
  proxy_pass        http://localhost:3000;
  proxy_set_header  X-Real-IP  $remote_addr;
 }

 location /app2 {
  proxy_pass        http://localhost:3001;
  proxy_set_header  X-Real-IP  $remote_addr;
 }

【讨论】:

    【解决方案2】:

    在你想要的 server {} 块内:

    location /app1 {
        rewrite ^/app1(.*) /$1 break;
        proxy_pass http://hostname:3001/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    location /app2 {
        rewrite ^/app2(.*) /$1 break;
        proxy_pass http://hostname:3002/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    

    这里的重写规则会将正确的uri传递给端口

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2018-07-28
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多