我已经挣扎了一段时间,我肯定做错了什么。
我在同一台机器上安装了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>
答案 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
答案 8 :(得分:0)
Apache支持基于名称和基于IP的虚拟主机。看起来你正在使用两者,这可能不是你需要的。
我认为您实际上是在尝试设置name-based virtual hosting,为此您无需指定IP地址。
尝试&lt; VirtualHost *:80&gt;绑定到所有IP地址,除非你真的想要ip based virtual hosting。如果服务器有多个IP地址,并且您希望在不同的地址上提供不同的站点,则可能就是这种情况。最常见的设置是(我猜)基于名称的虚拟主机。
答案 9 :(得分:0)
你需要两件事:
ServerAlias www.mydomain.com
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>