Apache重定向到另一个端口

时间:2011-12-16 23:01:29

标签: apache redirect

我已经挣扎了一段时间,我肯定做错了什么。

我在同一台机器上安装了apache服务器和JBoss服务器。我想将mydomain.com的流量重定向到JBoss localhost:8080 / example。 DNS目前是为mydomain.com设置的,当它进入浏览器时它将直接进入端口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> 

更新w / Suggestions - 仍然没有转发到端口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> 

14 个答案:

答案 0 :(得分:189)

您应该在ProxyPass和ProxyPassReverse中省略域http://example.com,并将其保留为/。此外,您需要将/的{​​{1}}保留在重定向的位置。另外,我在使用example/http://example.com时遇到了一些问题 - 只有在我创建ServerName www.example.com和ServerAlias example.com之前,www才有效。给出以下内容。

http://www.example.com

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

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

答案 1 :(得分:25)

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

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

答案 2 :(得分:8)

我想这样做,所以我可以从根域访问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

希望它有所帮助。

答案 3 :(得分:5)

通过反复试验找到了这个。如果您的配置指定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端口转发的最佳搜索结果。所以我觉得有一天它会帮助别人。

答案 4 :(得分:4)

您必须确保在服务器上启用了代理。您可以使用以下命令执行此操作:

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart

答案 5 :(得分: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

答案 6 :(得分:2)

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

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

答案 7 :(得分:1)

只需在apache配置中使用反向代理(直接):

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

Look here for apache documentation of how to use the mod

答案 8 :(得分:0)

Apache支持基于名称和基于IP的虚拟主机。看起来你正在使用两者,这可能不是你需要的。

我认为您实际上是在尝试设置name-based virtual hosting,为此您无需指定IP地址。

尝试&lt; VirtualHost *:80&gt;绑定到所有IP地址,除非你真的想要ip based virtual hosting。如果服务器有多个IP地址,并且您希望在不同的地址上提供不同的站点,则可能就是这种情况。最常见的设置是(我猜)基于名称的虚拟主机。

答案 9 :(得分:0)

你需要两件事:

  1. 在您的配置中添加ServerAlias www.mydomain.com
  2. 将您的proxypass更改为ProxyPassMatch ^(.*)$ http://localhost:8080/example$1,以保留mod_dir和尾随斜线免受干扰。

答案 10 :(得分: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>

答案 11 :(得分:0)

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

Listen 8080
Listen 80  

当我需要透明网址时,我使用80,而不是在URL之后放置端口 对于不允许使用本地网址的Google服务有用吗?

但我使用8080进行内部开发,我将端口用作“开发环境”的参考

答案 12 :(得分:0)

这也适用于ISPConfig。在网站列表中进入域,单击选项选项卡,添加以下行:;

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

然后去网站和wolaa :)这也是有效的HTTPS协议。

答案 13 :(得分: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>