我正在尝试将端口从 80 转发到 8080(默认为 tomcat)。下面是我添加到 httpd 文件的内容。
<VirtualHost www.example.com:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName www.example.com
ServerAlias example.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
添加此内容后,没有任何变化的迹象。代码有什么问题吗?
Centos 5.9
apache 2.2
tomcat 7
whm/cpanel。
更新: 我的目标域名是 www.99rounds.com:80 直接到 :8080
更新 2 在添加了答案中的代码并删除了 2 行日志后,我得到: 请注意,centos 具有内置的 mod_proxy 支持,如果我强制它:loadModule ... 它会给我一个错误,说它是内置的。
答案1
我对如何设置 Apache 反向代理有一个详细的答案在这里。
查看您提供的配置:
<VirtualHost www.example.com:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName www.example.com
ServerAlias example.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
我建议改为以下操作。我假设了一些内容(例如 ErrorLog 和 CustomLog),但这就是我的设置方式。我认为关键是ServerName
&ServerAlias
与 的组合<VirtualHost *:80>
:
<VirtualHost *:80>
ServerName www.99rounds.com
ServerAlias 99rounds.com www.99rounds.com
ErrorLog /var/log/apache2/www.99rounds.com.error.log
CustomLog /var/log/apache2/www.99rounds.com.access.log combined
# Settings for Apache Reverse Proxy
<IfModule mod_proxy.c>
# Proxy specific settings
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</IfModule>
</VirtualHost>
编辑:另请确保您的服务器上已启用以下功能mod_proxy
:mod_proxy_http
sudo a2enmod proxy
sudo a2enmod proxy_http
答案2
Tomcat 和其他应用服务器发布了一个 AJP 端口,可用于映射来自 HTTP 服务器的请求。为此,您必须创建一个“workers 文件”,如下所示:
# server.workers.properties
worker.list=tomcat-server
worker.tomcat-server.type=ajp13
worker.tomcat-server.host=localhost
worker.tomcat-server.port=8009
Tomcat 服务器中 AJP 端口的默认值是 8009。您可以在 $TOMCAT_DIR$/conf/server.xml 中找到此值。然后您必须在 HTTP 配置文件中指明上一个文件:
JkWorkersFile /location/of/the/file/server.workers.properties
<VirtualHost www.example.com:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /srv/www/
JkMount /* tomcat-server
<Directory />
Options +FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
此配置将把 www.example.com:80 的所有请求传递到 AJP 8009 端口,因此 Tomcat 服务器将获取这些请求并对其进行处理。
在 DocumentRoot 设置的路径中,您必须将每个应用程序的链接放在 Tomcat 的 webapps 目录中,因为如果不这样做,HTTP 服务器将无法加载资源文件,如 CSS 和 JS。