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

How to forward servername to nested Apache VirtualHost?

我有一个 NAS,其中有许多 docker 化的服务,所有域都指向 NAS,Apache 反向代理设置为指向正确的 Docker Container IP:PORT

所有这一切都很棒。

我决定通过添加一个容器来托管我所有的玩具网站来挑战自己,但我不知道如何设置反向代理所以 NAS Apache 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-撰写

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

When enabled, this option will pass the Host: line from the incoming request to the proxied host, instead of the hostname specified in the ProxyPass line.

This option should normally be turned Off. It is mostly useful in special configurations like proxied mass name-based virtual hosting, where the original Host header needs to be evaluated by the backend server.

对于您的配置,类似于:

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