docker - Nginx与docker,找不到与斜杠不同的位置

标签 docker nginx docker-compose

概要

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

请注意,我正在使用Docker快速入门终端针对Windows 10 Home Edition进行测试,但即使在Ubuntu 18.04上也进行了测试,结果是相同的。

结果

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

It works!



此处唯一的问题是app2,因为我无法访问app2

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

Not Found

The requested URL was not found on this server.



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

我尝试过的
  • 切换位置顺序,因此location /app2location /之后,但
  • 没有改变
  • location /app2的位置更改为location /foo,即使此处结果相同。
  • 更改与上一个示例相关的路径,与location /不同的任何内容均不起作用。 (例如location /bar location /foobar location /test)
  • 更改location /以便引用app2而不是app1,它可以工作,但是以这种方式我无法到达app1。
    
    location / {
        proxy_pass http://app2:80;
    }

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



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

    最佳答案

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

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

    关于docker - Nginx与docker,找不到与斜杠不同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61190029/

    相关文章:

    node.js - 将一个Docker容器中的nodejs应用连接到Docker Swarm上另一个容器中的mongodb

    Django 仅提供索引页面,其他所有页面均为 404

    perl - 为什么将 nginx 与 Catalyst/Plack/Starman 一起使用?

    linux - Nginx 强制下载特定的扩展

    postgresql - 扩展 docker postgres 图像以创建额外的数据库

    django - docker-compose django应用程序找不到Postgresql数据库

    docker - 无法通过Registry.ng.bluemix.net上的IBM Containers注册表进行身份验证

    docker - 从Azure管道内的Docker任务中检索图像摘要值

    docker - 在Container中挂载目录并共享给Host

    node.js - postman 未到达 AWS EKS API 终端 Node