介绍
作为Tomcat安装和自动启动设置的延续,我总结了将Apache端收到的HTTP请求抛给Tomcat的设置。
使用环境
- 你
- CentOS 7.7(1908)
- Java(亚马逊正确)
- Java 1.8.0_242
- 阿帕奇
- Apache-2.4.6
- 雄猫
- Tomcat-9.0.30
安装 Apache
- 使用 yum 命令安装后,显示版本信息以确认安装正确。
[root@akagi ~]# yum install -y httpd
[root@akagi ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Aug 8 2019 11:41:18
配置 Apache 自动启动
- 使用 systemctl enable... 设置自动启动,然后检查自动启动设置。
[root@akagi ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@akagi ~]# systemctl list-unit-files -t service | grep httpd
httpd.service enabled
编辑配置文件
- 在这里,编辑 httpd.conf 并配置设置以使用反向代理将请求从 Apache 发送到 Tomcat。
检查 /etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-proxy.conf
描述了用于反向代理的模块的配置。mod_proxy.so
并且mod_proxy_http.so
没有被注释掉。- 如果该行开始
#
,它将成为注释行。
- 如果该行开始
00-proxy.conf
# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
...
LoadModule proxy_ajp_module modules/mod_proxy_http.so
...
备份 httpd.conf
- 在编辑 httpd.conf 之前,请备份 httpd.conf 的原始状态。
[root@akagi ~]# cd /etc/httpd/conf/
[root@akagi conf]# cp -a httpd.conf httpd.conf.org
反向代理设置
- 如下设置 ProxyPass 和 ProxyPassReverse。
ProxyPass {请求路径} http://localhost:8009/{Java应用的上下文名称}
ProxyPassReverse {请求路径} http://localhost:8009/{Java应用的上下文名称}
- ProxyPass和ProxyPassReverse都有“将请求路径中进来的请求转发到应用服务器(这里是*Tomcat)”的作用,但是如果使用redirect,则需要设置ProxyPassReverse。
- 在下面的示例中,如果请求匹配,则设置为传输到
http://{服务器IP}/tomcat9/
本地主机 (localhost) 上端口 8009 的上下文名称(* Tomcat 管理屏幕) 。/
- 参考URL:mod_proxy再入門 – ProxyPassとProxyPassReverse
- 在下面的示例中,如果请求匹配,则设置为传输到
/etc/httpd/conf/httpd.conf
# 在文件末尾添加以下
ProxyPass /tomcat9/ http://localhost:8009/
ProxyPassReverse /tomcat9/ http://localhost:8009/
- 例如,当使用上下文名称为运行在 Tomcat 上的应用程序设置反向代理时,
test
设置如下。tomcat9
您可以将其替换为任何字符串。
/etc/httpd/conf/httpd.conf
# 在文件末尾添加以下
ProxyPass /tomcat9/ http://localhost:8009/test/
ProxyPassReverse /tomcat9/ http://localhost:8009/test/
应用设置
- 在 CentOS5 系列和 CentOS6 系列上,
service httpd graceful
我没有强制重启 Apache,只是反映了设置值,但graceful
不能与 CentOS7 系列 Apache 一起使用。 - 根据这篇文章,运行with 可以得到和
reload
之前一样的效果。systemctl reload httpd
graceful
[root@akagi ~]# systemctl reload httpd
操作确认
- 最后,
http://{服务器IP}/tomcat9/
去确认可以看到Tomcat管理界面。
如果Apache HTTPD 报错Permission denied: AH00957: http: attempt to connect to 127.0.0.1:8080
这个错误实际上与文件权限或类似的东西无关。它实际上意味着 httpd 已被拒绝连接到该 IP 地址和端口的权限。
最常见的原因是 SELinux 不允许 httpd 建立网络连接。
要解决它,您需要更改一个 SELinux 布尔值(它将在重新启动后自动保持)。您可能还想重新启动 httpd 以重置代理工作者,尽管这不是严格要求的。
# setsebool -P httpd_can_network_connect 1
有关 SELinux 如何影响 httpd 的更多信息,请阅读 httpd_selinux 手册页。