如何将服务器名称转发到嵌套的Apache VirtualHost


  • NAS:QNAP
  • Docker图像:php:8.0-apache

我有一个NAS,它有许多码头服务,域都指向NAS,Apache反向代理设置为直接指向正确的Docker Container IP:PORT

所有这些都很棒。

我决定挑战自己,添加一个容器来托管我所有的玩具网站,但我不知道如何设置反向代理,所以NASApache VirtualHost中的ServerName被转发到容器的Apache VirtualHost,以直接指向正确的文件夹。

该站点位于NAS/share/dev/web/sites上的一个文件夹中。

使用下面的配置,我可以浏览到http://sites.mydomain.com/sites,而我希望能够访问http://sites.mydomain.com

我认为我的NAS Apache VirtualHost没有转发servername,所以Docker Container Apache VirtualHost不知道如何过滤流量。

我尝试了许多不同的apache设置,但都没有成功,有人能指出这一点吗?

docker compose

version: '3.8'
services:
php-apache-environment:
container_name: php-apache
image: php:8.0-apache
volumes:
- /share/dev/web:/var/www/html/
- /share/dev/docker-composer/php/apache/apache2.conf:/etc/apache2/apache2.conf
- /share/dev/docker-composer/php/apache/custom.conf:/etc/apache2/sites-available/custom.conf
ports:
- 9103:80

NAS Apache VirtualHost

<VirtualHost *:80>
ServerName sites.mydomain.com
ProxyPass / http://192.168.253.53:9103/
ProxyPassReverse / http://192.168.253.53:9103/
</VirtualHost>

Docker容器Apache VirtualHost

<VirtualHost *:80>
ServerName sites.mydomain.com
ServerAdmin webmaster@name
DocumentRoot /var/www/html/sites
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

您想要ProxyPreserveHost

启用时,此选项将从传入请求向代理主机传递Host:行,而不是在ProxyPass行中指定的主机名。

此选项通常应关闭。它在特殊配置中非常有用,如基于代理的大量名称的虚拟主机,其中原始主机标头需要由后端服务器评估。

对于您的配置,类似于:

<VirtualHost *:80>
ServerName sites.mydomain.com
ProxyPreserveHost on
ProxyPass / http://192.168.253.53:9103/
ProxyPassReverse / http://192.168.253.53:9103/
</VirtualHost>

最新更新