Apache重定向到另一个端口

age*_*rry 140 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> 
Run Code Online (Sandbox Code Playgroud)

更新w /建议 - 仍然没有转发到端口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> 
Run Code Online (Sandbox Code Playgroud)

小智 203

您应该http://example.com在ProxyPass和ProxyPassReverse中省略域并将其保留为/.此外,您需要将/其末尾留在example/重定向的位置.另外,我遇到了一些麻烦http://example.comhttp://www.example.com-只有WWW工作,直到我做了服务器名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> 
Run Code Online (Sandbox Code Playgroud)

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

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

  • 在重新启动apache之前启用apache模块-https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension#configuring-apache-to -proxy的连接 (9认同)
  • 它有效,但我看到在我的应用程序的欢迎页面中,没有加载 css(之前在 example.com:8080/example 上工作)。并且也有一些例外。知道我错过了什么吗? (2认同)
  • 这导致我的 httpd 上出现“服务不可用”错误,直到我执行 `/usr/sbin/setsebool -P httpd_can_network_connect 1` (2认同)

小智 27

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

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>
Run Code Online (Sandbox Code Playgroud)

我也用过:

a2enmod proxy_http
Run Code Online (Sandbox Code Playgroud)


Tee*_*eej 10

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

在 Apache 加载的 .conf 文件中:

<VirtualHost *:80>
  ServerName something.com
  ProxyPass / http://localhost:8080/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

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


Lou*_*uth 9

我想这样做,所以我可以从根域访问Jenkins.

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

$ sudo vi /etc/apache2/sites-available/jenkins
Run Code Online (Sandbox Code Playgroud)

并将其插入到文件中:

<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>
Run Code Online (Sandbox Code Playgroud)

接下来,您需要启用/禁用相应的站点:

$ sudo a2ensite jenkins
$ sudo a2dissite default
$ sudo service apache2 reload
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人.


Asw*_*nan 6

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

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart
Run Code Online (Sandbox Code Playgroud)


小智 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>
Run Code Online (Sandbox Code Playgroud)

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