我有一个非Apache服务器侦听端口8001和Apache侦听端口80.我希望某个虚拟域实际上由非Apache服务器通过端口80提供服务。
示例:
<VirtualHost *:80>
Servername example.com
# Forward this on to the server on port 8001
</VirtualHost>
我以为我可以用mod_proxy和ProxyPass这样做。
ProxyPass * http://www.example.com:8001/
但这不起作用。
答案 0 :(得分:25)
ProxyPass * http://www.example.com:8001/
星号仅在一个区块中有效。正斜杠就是你想要的。
ProxyPass / http://www.example.com:8001/
ProxyPassReverse / http://www.example.com:8001/
反向代理确保将端口8001服务器发送的重定向调整为代理的规范名称。
apache手册有一些例子。 http://httpd.apache.org/docs/2.0/mod/mod_proxy.html
答案 1 :(得分:5)
我有一个由端口80上的apache托管的站点。我还有一个在端口8880上侦听的python Web服务器,需要通过http://[mydomainname]/something访问。使用txyoji的答案,我通过简单地将代理传递添加到我的虚拟主机定义来实现它,如下所示:
ProxyPass /something http://mydomainname:8880/something
ProxyPassReverse /something http://mydomainname:8880/something
<强>更新强>
根据您的设置,更好的方法是在“localhost”上为端口设置代理传递。我认为你做的更清楚,加上更便携。除此之外,您甚至不必打开防火墙到该端口!您可以在本地代理传递到任何端口,因此如果您不需要,则没有理由将其公开给外部世界。通过端口80汇集所有内容,让Apache始终“在前面耗尽”。然后,你可以担心它的安全性。
ProxyPass /something http://localhost:8880/something
ProxyPassReverse /something http://localhost:8880/something
答案 2 :(得分:0)
完整代码如下所示。
<IfModule mod_ssl.c>
<VirtualHost *:443>
ProxyPreserveHost On
ServerAdmin webmaster@localhost
ServerName test.example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://localhost:9301/
ProxyPassReverse / http://localhost:9301/
SSLCertificateFile /etc/letsencrypt/live/test.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/test.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
这个link也很有帮助。