Docker 网络路径的 haproxy 问题

Docker haproxy issue with web path

我正在尝试让 haproxy 使用 localhost/path

连接到网络服务器

我目前的设置如下:

HAproxy_test
│   docker-compose.yml
│
├───haproxy
│       Dockerfile
│       haproxy.cfg
│
└───website
        index.php

docker-compose.yml:

version: '3'

services:

  website1:
    image: php:apache
    hostname: website_1
    volumes: 
      - ./website:/var/www/html
    ports:
      - 8080:80

  haproxy:
    build: ./haproxy
    ports:
      - 80:80
    depends_on:
      - website1

haproxy/Dockerfile:

FROM haproxy

COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

haproxy/haproxy.cfg:

global
    maxconn 5000

defaults
    mode http
    timeout connect 5s
    timeout client 5s
    timeout server 5s

frontend http_in
    bind *:80

    acl has_web1 path_beg -i /web1 
    use_backend http_out if has_web1

    default_backend http_out

backend http_out
    server web1 website1:80 check

使用docker-compose up --build一切正常。 如果输入 localhostlocalhost:8080 它会带我到网站,一切都很好但是如果我尝试 localhost/web1 我得到 404 Not Found

但是,如果我更改我的 dockder-compose.yml,例如使用 image: dockercloud/hello-world 而不是 image: php:apache,那么 localhost/web1 就可以正常工作

我是否遗漏了 dockercloud/hello-world 映像中存在的 apache 中的某些配置?

在我看来,您在 NGINX 中的重定向规则正在运行,但 Apache 服务器正在接收对路径 WWWROOT/web1 的请求,因此 Apache 正在寻找路径 [=12= 中的文件或目录] 这是不存在的,因此给出了 404。您可以通过添加具有基本 index.html 的子目录 web1 来进行测试,并检查它是否得到服务。