Laravel route()和url()函数返回错误的子域

时间:2017-08-19 09:09:54

标签: php apache laravel docker

我正在使用Laravel和Docker创建测试应用程序。

Docker containers

我有3个Docker容器:一个使用ProxyPass选择其他两个容器中的一个的Apache和两个具有Laravel应用程序的容器。

我在/etc/hosts

中还有额外的行
127.0.0.1        auth.pi
127.0.0.1        worker.pi

我的主要(绿色)Apache的conf文件是

<VirtualHost *:80>
    ServerName auth.pi

    ProxyPass / http://auth:80/
</VirtualHost>

<VirtualHost *:80>
    ServerName worker.pi

    ProxyPass / http://worker:80/
</VirtualHost>

在红色的.env中我有

APP_URL=http://auth.pi

但当我使用url('/')route(...)时,我的域名为http://auth/

我红色的Apache的配置

<VirtualHost *:80>
    ServerName auth.pi

    DocumentRoot /var/www/html/public

    <Directory "/var/www/html/public">
        AllowOverride all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

文件docker-compose.yml包含:

services:
  apache:
    build: "./apache"
    container_name: "pi-apache"
    links:
      - "auth-apache:auth"
    ...
  auth-apache:
    build: "./applications/auth/apache"
    container_name: "pi-auth-apache"
    ...

我做错了什么?为什么我的红色Laravel应用认为他是http://auth/而不是http://auth.pi/

在蓝色应用程序中,我有相同的配置和相同的问题。

1 个答案:

答案 0 :(得分:1)

问题出在green的conf

VirtualHost部分,我必须添加

RequestHeader set Host "auth.pi"

ProxyPreserveHost On

VirtualHost的最终auth.pi

<VirtualHost *:80>
    ServerName auth.pi

    RequestHeader set Host "auth.pi"

    ProxyPreserveHost On

    ProxyPass / http://auth:80/
</VirtualHost>

我还添加了docker-compose.yml

  auth-apache:
    build: "./applications/auth/apache"
    container_name: "pi-auth-apache"
    domainname: "pi"
    hostname: "auth"
    ...