首页 > 解决方案 > Nginx 与 docker,未找到与斜线不同的位置

问题描述

概括

我创建了这个简单的示例来纠正和检查我在另一个更复杂的项目中遇到的错误。所以我有一个 docker-compose 文件,其中包含 1 个 Web 服务器和 2 个应用程序以及一个 nginx conf 文件。

请注意,我正在使用 Docker Quick Start Terminal 对其Windows 10 Home Edition进行测试,但我什至已经进行Ubuntu 18.04了测试,结果是相同的。

结果

前往:http: //192.168.99.100
:8080/默认输出:

有用!

这里唯一的问题是 app2,因为我无法访问 app2

http://192.168.99.100:8080/app2
错误:

未找到

在此服务器上找不到请求的 URL。

我不明白为什么我不能这样做,错误在哪里。

我试过的

代码

docker-compose.yml

version: "3.7"

services:
  web:
    image: nginx:alpine
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
        - 8080:80
    networks:
        - app1_net
        - app2_net

  app1:
      image: httpd:latest
      networks:
        - app1_net

  app2:
      image: httpd:latest
      networks:
        - app2_net

networks:
  app1_net:
  app2_net:

nginx.conf

events {}
http {
    server{
        listen 80;
        listen [::]:80;

        server_name localhost;

        location /app2 {
            proxy_pass http://app2:80;
        }

        location / {
            proxy_pass http://app1:80;
        }
    }
}

标签: dockernginxdocker-compose

解决方案


这是正确的方法,使用正则表达式允许子文件夹导航和 /app2 上的完美匹配来重定向http://app2上的流量:

location ~ ^/app2/(.*)$ {
  proxy_pass http://app2/$1;
}
location = /app2 {
  proxy_pass http://app2/;
}
location / {
  proxy_pass http://app1;
}

推荐阅读