让 Apache 从目录为 example.com 提供服务,并将所有子域 *.example.com 设为 ProxyPass / http://localhost:8050

让 Apache 从目录为 example.com 提供服务,并将所有子域 *.example.com 设为 ProxyPass / http://localhost:8050

运行 Apache 2.4.58

我需要让 Apache 从目录为 example.com 提供服务,并将所有子域 *.example.com 设为 ProxyPass / http://localhost:8050(这样它们就可以从依赖于子域的另一个 Web 服务器提供服务)。

我目前可以让它将所有内容通过 ProxyPass 传递到其他本地主机服务器或为 example.com 目录提供服务,然后所有子域都不会通过 ProxyPass 传递,因此无法提供服务,因为它们从未到达其他服务器。

我曾尝试过使用多个虚拟主机,但似乎无法让它工作。

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyRequests Off
    
    ServerName example.com

    DocumentRoot /home/example/public_html
    ErrorLog /var/log/apcache2/example_error_log
    CustomLog /var/log/apache2/example_access_log combined
    DirectoryIndex index.php index.php4 index.php5 index.htm index.html

    <Directory /home/example/public_html>
        Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch 
        Require all granted
        AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
    </Directory>

    ServerAlias *.example.com
    ProxyPass / http://localhost:8050/
    ProxyPassReverse / http://localhost:8050/

</VirtualHost>

与之匹配的 443 版本就位于此之下。

运行上述程序时,所有内容都会传递给代理。我以为它会先执行第一个指令,然后再执行下一个指令。我也尝试过顶部的最后 3 行,但没有任何区别。

有人来帮帮我!这快让我疯了。短暂性脑缺血发作。

答案1

为此,您需要两个虚拟主机,服务器别名只是作为服务器名称的别名,因此您不能以那种方式定义,您可以在此处阅读文档:https://httpd.apache.org/docs/2.4/vhosts/name-based.html

尝试一下:1 个用于您主域名的虚拟主机:

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyRequests Off
    
    ServerName example.com

    DocumentRoot /home/example/public_html
    ErrorLog /var/log/apcache2/example_error_log
    CustomLog /var/log/apache2/example_access_log combined
    DirectoryIndex index.php index.php4 index.php5 index.htm index.html

    <Directory /home/example/public_html>
        Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch 
        Require all granted
        AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
    </Directory>


</VirtualHost>

还有一个用于通配符子域名:

<VirtualHost *:80>
        ServerName *.example.com
        ProxyPass / http://localhost:8050/
 </VirtualHost>

记得在 apache 配置中加载代理模块

LoadModule proxy_module modules/mod_proxy.so

相关内容