带docker的Nginx,未找到与斜杠不同的位置 总结

带docker的Nginx,未找到与斜杠不同的位置 总结,docker,nginx,docker-compose,Docker,Nginx,Docker Compose,我创建这个简单的示例是为了纠正和检查我在另一个更复杂的项目中遇到的错误。 因此,我有一个docker compose文件,其中包含1个web服务器、2个应用程序和一个nginx conf文件 请注意,我正在使用Docker Quick Start Terminal forWindows 10 Home Edition对其进行测试,但我甚至在Ubuntu18.04上进行了测试,结果是一样的 结果 前往: 默认输出: 它能工作 这里唯一的问题是app2,因为我无法访问app2 去。 错误: 找不到

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

请注意,我正在使用Docker Quick Start Terminal for
Windows 10 Home Edition
对其进行测试,但我甚至在
Ubuntu18.04
上进行了测试,结果是一样的

结果 前往:
默认输出:

它能工作

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

去。
错误:

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

我不明白为什么我不能做到这一点,错误在哪里

我试过的
  • 切换位置顺序,使
    location/app2
    location/
    之后,但没有任何更改
  • location/app2
    的位置更改为
    location/foo
    ,即使在这里也是相同的结果
  • 更改与上一示例相关的路径,任何与
    location/
    不同的操作都不起作用。(例如,
    location/bar
    location/foobar
    location/test
  • 更改
    location/
    以引用app2而不是app1,它可以工作,但这样我无法访问app1

    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;
            }
        }
    }
    

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


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


    我正在尝试,我会让你知道它有效!我错过了
    http://app2
    !谢谢我正在尝试,我会让你知道它有效!我错过了
    http://app2
    !谢谢
    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:
    
    events {}
    http {
        server{
            listen 80;
            listen [::]:80;
    
            server_name localhost;
    
            location /app2 {
                proxy_pass http://app2:80;
            }
    
            location / {
                proxy_pass http://app1:80;
            }
        }
    }
    
    location ~ ^/app2/(.*)$ {
      proxy_pass http://app2/$1;
    }
    location = /app2 {
      proxy_pass http://app2/;
    }
    location / {
      proxy_pass http://app1;
    }