Apache mod_proxy_http链接Tomcat

阳光穿透心脏的1/2处 2023-09-28 19:48 52阅读 0赞

介绍

作为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

  1. # This file configures all the proxy modules:
  2. LoadModule proxy_module modules/mod_proxy.so
  3. ...
  4. LoadModule proxy_ajp_module modules/mod_proxy_http.so
  5. ...

备份 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

  1. # 在文件末尾添加以下
  2. ProxyPass /tomcat9/ http://localhost:8009/
  3. ProxyPassReverse /tomcat9/ http://localhost:8009/
  • 例如,当使用上下文名称为运行在 Tomcat 上的应用程序设置反向代理时,test设置如下。

    • tomcat9您可以将其替换为任何字符串。

/etc/httpd/conf/httpd.conf

  1. # 在文件末尾添加以下
  2. ProxyPass /tomcat9/ http://localhost:8009/test/
  3. 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 以重置代理工作者,尽管这不是严格要求的。

  1. # setsebool -P httpd_can_network_connect 1

有关 SELinux 如何影响 httpd 的更多信息,请阅读 httpd_selinux 手册页。

相关工作

  • 阻止 Tomcat 端口 8080
  • 在 Apache 中禁止通过 IP 地址访问

发表评论

表情:
评论列表 (有 0 条评论,52人围观)

还没有评论,来说两句吧...

相关阅读