我正在尝试使用docker / docker-compose来实现一个Web服务器,其中我的部分页面由PHP提供,而部分服务由Java提供。因此,当我连接到localhost/php-service
时,我将被路由到运行PHP服务器的容器,并且连接到localhost/java-service
会将我重定向到运行Java Web服务器的容器。
我的第一个方法,可能是错误的,是有一个单独的容器运行apache并使用mod-rewrite将我重定向到适当的容器。在尝试任何想象之前,我只是尝试使用其ip重定向到我的php服务器容器:
#.htaccess
RewriteEngine on
RewriteRule .* http://192.168.128.6/ # <- IP address of container with webserver
这不起作用,因为我的浏览器只是将URL重写为“192.168.128.6”,然后抱怨没有找到IP。显然,重写引擎只是告诉浏览器去其他地方,它实际上并没有转发请求。我可以为每个服务器分配一个不同的端口,并将重写引擎转发到适当的端口,但我觉得必须有更优雅的方法来解决这个问题。我一直在寻找使用iptables,但它也不像是工作的正确工具......
在此先感谢您的帮助。
原来我要找的是mod_proxy,而不是mod_rewrite,将其添加到.htaccess解决了这个问题!
ProxyPass /php-service http://{PHP_CONTAINER_IP}/php-service
ProxyPassReverse /php-service http://{PHP_CONTAINER_IP}/php-service
ProxyPass /java-service http://{JAVA_CONTAINER_IP}/java-service
ProxyPassReverse /java-service http://{JAVA_CONTAINER_IP}/java-service
(用实际IP替换{PHP_CONTAINER_IP}和{JAVA_CONTAINER_IP})