![让 Apache 从目录为 example.com 提供服务,并将所有子域 *.example.com 设为 ProxyPass / http://localhost:8050](https://linux22.com/image/790784/%E8%AE%A9%20Apache%20%E4%BB%8E%E7%9B%AE%E5%BD%95%E4%B8%BA%20example.com%20%E6%8F%90%E4%BE%9B%E6%9C%8D%E5%8A%A1%EF%BC%8C%E5%B9%B6%E5%B0%86%E6%89%80%E6%9C%89%E5%AD%90%E5%9F%9F%20*.example.com%20%E8%AE%BE%E4%B8%BA%20ProxyPass%20%2F%20http%3A%2F%2Flocalhost%3A8050.png)
运行 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