【问题标题】:Nginx with docker, location different from slash not foundNginx 与 docker,未找到与斜线不同的位置
【发布时间】:2020-04-13 14:27:58
【问题描述】:

总结

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

请注意,我正在使用Windows 10 Home Edition 的 Docker 快速启动终端对其进行测试,但我什至在 Ubuntu 18.04 上进行了测试,结果是相同的。

结果

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

有效!

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

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

未找到

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

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

我的尝试

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

    
    location / {
        proxy_pass @987654323@;
    }
    
    

    location /app1 { proxy_pass @987654324@; }

代码

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

【问题讨论】:

    标签: docker nginx docker-compose


    【解决方案1】:

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

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

    【讨论】:

    • 我试试,我会告诉你的
    • 有效!我错过了http://app2 之后的最后一个斜线!谢谢!
    【解决方案2】:

    我已添加another stackoverflow answer here.

    总结如下:

    • 我的设置有几个应用程序位于 nginx 后面。我想将/appx-uri/bla/blo/bli 重定向到/appx-uri/bla/blo/bli/ 而不是 /bla/blo/bli/,即default nginx behavior
    • 另外,我所有的静态文件(对于一个应用程序)都被收集起来供 nginx 服务/repairapp/static/

    在服务器块中添加指令rewrite ^/repairapp/([^static].*[^/])$ /repairapp/$1/ permanent; 修复它。

    然后我有

    • 解决问题:rewrite ^/repairapp/([^static].*[^/])$ /repairapp/$1/ permanent;
    • 让nginx服务资源location /repairapp/static/ {
    • 访问应用程序location /repairapp/ {

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 2017-04-27
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 2020-03-04
      相关资源
      最近更新 更多