Apache重定向到另一个端口


151

我为此苦了一段时间,肯定做错了什么。

我在同一台机器上有apache服务器和JBoss服务器。我想将mydomain.com的流量重定向到JBoss localhost:8080 / example。当前为mydomain.com设置了DNS,输入浏览器后,它将直接进入端口80。

我的问题是,当某个域名进入apache(在本例中为“ mydomain.com”)时,如何重定向到其他端口?

<VirtualHost ip.addr.is.here> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

带有建议的更新 -仍未转发到端口8080

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

看起来不错。你的症状是什么?
Martin Vilcans 2011年

症状是,我将www.mydomain.com放在浏览器中,但它转到了Apache根目录。相反,我希望它重定向到jboss子目录localhost:8080 / subdir。我目前使用它来将各种域直接重定向到端口80,但无法完全将其转到另一个端口。
agentcurry 2011年

我有完全相同的要求:您找到解决方案了吗?
Cystack 2012年

1
@Cystack-我无法完全正常工作。我对配置进行了许多尝试,使我发疯。我放弃了它= /如果您碰巧找到一个解决方案,请在此处发布,我想知道如何使它起作用。祝你好运,我的朋友!
agentcurry 2012年

这对我
有用

Answers:


224

您应该将域保留http://example.com在ProxyPass和ProxyPassReverse中,并保留为/。此外,您需要/将末尾的example/重定向到。另外,我在使用http://example.comvs时遇到了一些麻烦http://www.example.com-只有www可以工作,直到我创建ServerName www.example.com和ServerAlias example.com。尝试以下。

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.example.com
  ServerAlias example.com
  ProxyPass / http://localhost:8080/example/
  ProxyPassReverse / http://localhost:8080/example/
</VirtualHost> 

进行这些更改后,添加所需的模块并重新启动apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

9
重新启动Apache之前使Apache模块- digitalocean.com/community/tutorials/...
Pradyut查亚

1
CentOS服务器是否会一样?(我不明白为什么不这样做,只是确定一下)。而且,这将是什么配置文件?(我猜是在/ etc / httpd / conf中的某个地方……)
杰里米(Jeremy

1
它起作用了,但是我看到在我的应用程序的欢迎页面中,没有加载css(之前在example.com:8080/example中起作用)。并且也有一些例外。知道我缺少什么吗?
Rajarshee Mitra 2015年

1
这导致我的httpd上出现错误“服务不可用”,直到我这样做/usr/sbin/setsebool -P httpd_can_network_connect 1
vladkras

@vladkras非常感谢您的提示,非常有帮助!
mneute

28

我用以下代码解决了这个问题:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName myhost.com
ServerAlias ww.myhost.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

我还使用了:

a2enmod proxy_http

10

我想完全做到这一点,以便可以从根域访问Jenkins。

我发现必须禁用默认站点才能使其正常工作。这正是我所做的。

$ sudo vi /etc/apache2/sites-available/jenkins

并将其插入文件:

<VirtualHost *:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias mydomain
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
  <Proxy *>
        Order deny,allow
        Allow from all
  </Proxy>
</VirtualHost>

接下来,您需要启用/禁用适当的站点:

$ sudo a2ensite jenkins
$ sudo a2dissite default
$ sudo service apache2 reload

希望它能帮助某人。


感谢您贡献@Louth。我早就放弃了,不再拥有服务器。仍然让我感到困扰,因为我没能正常工作,我可能会启动新服务器只是为了再次进行测试。再次感谢,如果/当我再次尝试时,我将确保进行更新。
agentcurry 2013年

Jenkins Wiki解释了如何在Apache后面运行Jenkins:wiki.jenkins-ci.org/display/JENKINS/…–
mneute

6

通过反复试验发现了这一点。如果您的配置指定了ServerName,则您的VirtualHost指令将需要执行相同的操作。在以下示例中,awesome.example.com和amazing.example.com都将被转发到端口4567上运行的某些本地服务。

ServerName example.com:80

<VirtualHost example.com:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName awesome.example.com
  ServerAlias amazing.example.com
  ProxyPass / http://localhost:4567/
  ProxyPassReverse / http://localhost:4567/
</VirtualHost>

我知道这并不能完全回答问题,但我将其放在此处,因为这是Apache端口转发的首要搜索结果。因此,我认为有一天会有所帮助。


这是唯一为我工作的人。使用*:80而不是example.com:80表示该端口将不会重定向。
Seb123 '16


3

这可能是一个古老的问题,但这是我所做的:

在由apache加载的.conf文件中:

<VirtualHost *:80>
  ServerName something.com
  ProxyPass / http://localhost:8080/
</VirtualHost>

说明:侦听所有对本地计算机端口80的请求。如果我请求“ http://something.com/somethingorother”,则将该请求转发到“ http://localhost:8080/somethingorother”。这应该对外部访问者有效,因为根据文档,它将远程请求映射到本地服务器的空间。

我正在运行Apache 2.4.6-2ubuntu2.2,所以我不确定“ -2ubuntu2.2”如何影响此答案的广泛适用性。

进行这些更改后,添加所需的模块并重新启动apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

2

如果您不必使用JBoss的代理,并且mydomain.com:8080可以“公开”给全世界,那么我会这样做。

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>

使用80以外的端口不仅难看,而且还会导致代理服务器或ISP出现问题。在这种情况下,只需删除Apache并在端口80上运行JBoss即可!
Martin Vilcans 2011年

在JBoss下运行所有​​内容是一种选择,我只是想避免将apache站点移至JBoss,但这不应该浪费时间。感谢您的反馈。
agentcurry 2011年


1

我的Apache监听2个不同的端口,

Listen 8080
Listen 80  

我想使用透明URL时不使用80,并且不要将端口放在URL后面,该URL对于不允许本地URL的Google服务有用吗?

但是我使用8080进行内部开发,在这里我使用端口作为“开发环境”的参考


0

Apache支持基于名称和基于IP的虚拟主机。看起来您正在同时使用这两种功能,但这可能不是您所需要的。

我认为您实际上是在尝试建立基于名称的虚拟主机,为此,您无需指定IP地址。

尝试<VirtualHost *:80>绑定到所有IP地址,除非您确实想要基于ip的虚拟主机。如果服务器具有多个IP地址,并且您想在不同的地址上服务于不同的站点,则可能是这种情况。最常见的设置是(我猜)基于名称的虚拟主机。


这很有意义,我只需要基于名称。我更改了它,但它仍然没有路由到另一个端口
agentcurry 2011年

0

您需要两件事:

  1. 添加一个ServerAlias www.mydomain.com到您的配置
  2. 将您的proxypass更改为ProxyPassMatch ^(.*)$ http://localhost:8080/example$1,以免干扰mod_dir和斜杠。

我添加了ServerAlias,但仍然没有运气。
agentcurry 2011年

0

所有这些都是通过虚拟服务器上的域名访问端口的出色见解。但是,请不要忘记启用虚拟服务器。这可能会被注释掉:

NameVirtualHost *:80
<Directory "/home/dawba/www/">
 allow from all
</Directory>

我们通过sxxxx.com域上的Apache服务器和在端口6800上运行的golang服务器运行WSGI。某些防火墙似乎使用端口来阻止域名。这是我们的解决方案:

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName wsgi.sxxxx.com
 DocumentRoot "/home/dxxxx/www"
  <Directory "/home/dxxx/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
 ScriptAlias /py/ "/home/dxxxx/www/py/"
 WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi
</VirtualHost>

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName sxxxx.com 
 ServerAlias www.sxxxx.com
 ProxyPass / http://localhost:6800/
 ProxyPassReverse / http://localhost:6800/
</VirtualHost>

0

这也在ISPConfig中工作。在进入域内的网站列表中,单击选项选项卡,添加以下行:

ProxyPass / http://localhost:8181/
ProxyPassReverse / http://localhost:8181/

然后去网站和wolaa :)这也正在使用HTTPS协议。


0

试试这个

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.adminbackend.example.com
  ServerAlias adminbackend.example.com
  ProxyPass / http://localhost:6000/
  ProxyPassReverse / http://localhost:6000/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost> 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.