对于某些需要PHP 5.6和PHP 7.1的家庭应用程序,我在这里有一个有点独特(也许不是,但对我来说是唯一)的体系结构。这是/ r / docker向我推荐的架构:
我已经能够通过在/ etc / apache2 / sites-available中设置以下domainname.com.conf来使domainname.com如此工作:
<VirtualHost *:80>
ServerName domainname.com
<Proxy *>
Allow from localhost
</Proxy>
ProxyPass "/" "http://public.ip.address:8080/" retry=0
ProxyPreserveHost On
</VirtualHost>
但是,我的一个子域需要推送到PHP 5.6端的应用程序。所以我已经设置了这个subdomain.domainname.com.conf:
<VirtualHost *:80>
ServerName subdomain.domainname.com
<Proxy *>
Allow from localhost
</Proxy>
ProxyPass "/" "http://public.ip.address:8081/subdomain/" retry=0
ProxyPreserveHost On
</VirtualHost>
实际上,直接进入http://public.ip.address:8081/subdomain/可以很好地加载应用程序,但是由于任何原因,进入http://subdomain.domain.com都可以得到503。最初,它只是在Ubuntu页面上显示Apache。意识到我需要a2ensite并重新加载Apache,此操作已经完成。
日志显示如下:
[Wed Jul 10 21:36:59.049131 2019] [proxy:error] [pid 2298:tid 139882856969984] (113)No route to host: AH00957: HTTP: attempt to connect to public.ip.address:8081 (3.220.176.240) failed
[Wed Jul 10 21:36:59.049182 2019] [proxy_http:error] [pid 2298:tid 139882856969984] [client 128.229.4.2:58611] AH01114: HTTP: failed to make connection to backend: public.ip.address
我们知道系统可以很好地访问8080,所以我不确定为什么它会遇到这种流量。如上所述,直接从外部点击ProxyPass URL可以加载页面,因此进入该容器的流量很好。 SELinux已禁用。据我所知,这是在AWS中,并且安全组已正确配置(请参阅:流量来自外部)。
使用公共IP地址是我能够使容器间流量正常工作的唯一方法,因为使用Docker的桥接IP以前无法正常工作。
在旧系统上,当我所有的应用程序均为PHP 5.6时,我有一个标准的VirtualHost语句,该语句仅接收subdomain.domain.com并将其指向特定的DocumentRoot。我无法在此处执行此操作,因为反向代理容器需要使用正确的PHP版本将流量传递给该容器。
非常感谢您提供的任何提示或技巧。