Apache端口代理

时间:2009-07-21 23:58:54

标签: apache2 apache-config

我有一个非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/

但这不起作用。

3 个答案:

答案 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也很有帮助。