AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 106254
Accepted
Agvorth
Agvorth
Asked: 2010-01-26 14:59:10 +0800 CST2010-01-26 14:59:10 +0800 CST 2010-01-26 14:59:10 +0800 CST

如何设置使用 mod_proxy_ajp 与 Apache 和 Tomcat?

  • 772

我想在 RHEL 5 服务器上运行 Apache 和 Tomcat,Apache 处理 Ruby on Rails 应用程序(通过 mod_rails/Passenger)和 Tomcat 处理 Java 应用程序。

在 Apache 下,每个 Rails 应用程序都有一个 URL 和虚拟主机。URL 已经在我们的 DNS 服务器中配置为指向机器。

在 Tomcat 下,每个 Java 应用程序都有一个这样的 URL:ourserver.ourcompany.com/app1、ourserver.ourcompany.com/app2等。

服务器已经启动并运行 Tomcat 6,在端口 80 上运行并为多个 Java 应用程序提供服务。我想添加 Apache 并重新配置。我熟悉如何配置一个单独的 Apache 服务器来使用Passenger 托管RoR 应用程序。我只是不知道如何让 Apache 和 Tomcat 像这样一起工作。

我通过谷歌搜索找到了各种资源和讨论(例如,这个),但它们往往有点粗略和不完整,或者它们似乎并不真正符合我想要做的事情。我链接到的似乎是如果您想将所有请求发送到 Tomcat,而不仅仅是某些请求并让 Apache 处理其他请求。

server.xml有人可以为and建议一个示例配置httpd.conf,或者可能指向我一些更详细的资源吗?

tomcat apache-2.2 reverse-proxy ajp
  • 2 2 个回答
  • 11341 Views

2 个回答

  • Voted
  1. Best Answer
    Jeremy Bouse
    2010-01-26T19:24:37+08:002010-01-26T19:24:37+08:00

    您不需要对 Tomcat 进行任何更改,server.xml只需将 Tomcat 恢复为默认端口,以便 Apache 可以处理端口 80。大部分工作将通过 Apache 配置文件完成。我通常将它们放在外部,httpd.conf而是将它们粘贴到<ServerRoot>/conf.d/子目录下的较小配置片段中。

    鉴于您的ourserver.ourcompany.com/app1&ourserver.ourcompany.com/app2我会假设配置如下:

    <VirtualHost *:80>
        ServerName ourserver.ourcompany.com
        ErrorLog ...
        CustomLog ...
    
        [other VHost configurations]
    
        ProxyPass /app1 ajp://tomcat_hostname:8009/app1
        ProxyPassReverse /app1 ajp://tomcat_hostname:8009/app1
    
        ProxyPass /app2 ajp://tomcat_hostname:8009/app2
        ProxyPassReverse /app2 ajp://tomcat_hostname:8009/app2
    </VirtualHost>
    

    如果您有多个 Tomcat 服务器集群在后面,那么您可能需要查看设置 mod_balancer 并将其移动ajp://到mod_balancer BalancerMember并替换为balancer://引用平衡器配置的 URL。

    • 5
  2. user15590
    2010-01-26T19:32:49+08:002010-01-26T19:32:49+08:00

    我个人不喜欢 mod_proxy_ajp;在 Apache 下运行 Tomcat 时,我会直接安装 mod_jk(来自 Tomcat 编码器的模块)以提供 AJP 连接。您可以通过 5 种方式将 mod_jk 调整到周日,以提高应用程序的性能(线程、超时、敲门等)。

    1. 确保已安装 httpd-devel
    2. 将真正的 JDK 解压到某个路径,例如 /usr/local/jdk1.6.0_18/
    3. 从 tomcat.apache.org 获取“tomcat-connectors”源并编译它

      cd tomcat-connectors-1.2.28-src/native

      ./configure --with-apxs=/usr/sbin/apxs --with-java=/usr/local/jdk1.6.0_18 --enable-prefork

      制作

      cp apache-2.0/mod_jk.so /usr/local/lib/

    现在,您必须将其插入到一般意义上的 Apache 配置中,然后根据需要插入到每个虚拟主机中。在整体配置中,您添加如下内容:

    LoadModule jk_module /usr/local/lib/mod_jk.so
    JkWorkersFile  /usr/local/tomcat/conf/workers.properties
    JkShmFile      /var/log/httpd/mod_jk.shm
    JkLogFile      /var/log/httpd/mod_jk.log
    JkLogLevel     error
    

    您将需要创建基本的 worker.properties 文件,这是文档:http: //tomcat.apache.org/connectors-doc/reference/workers.html一个非常基本的文件可能如下所示:

    workers.tomcat_home=/usr/local/tomcat
    workers.java_home=/usr/local/jdk1.6.0_18
    ps=/
    worker.list=ajp13
    worker.maintain=60
    worker.ajp13.port=8009
    worker.ajp13.host=localhost
    worker.ajp13.type=ajp13
    worker.loadbalancer.type=lb
    worker.loadbalancer.balance_workers=ajp13
    

    这将使用 server.xml 中的默认端口 8009 配置 - 您可以在此处旋转一百万个旋钮以无休止地调整性能。然后,在每个虚拟主机中“挂载”所需的应用程序:

    <VirtualHost *:80>
     ServerName foo.bar.com
     ...other options ...
    
     JkMount /app1/* ajp13
     <Location "/app1/WEB-INF/">
        deny from all
     </Location>
    
     JkMount /app2/* ajp13
     <Location "/app2/WEB-INF/">
        deny from all
     </Location>
    
    </VirtualHost>
    

    正如您在底部看到的那样,不要忘记一点安全性并拒绝对您的 WEB-INF 文件夹的所有访问——大多数 web 应用程序在部署为战球时都有其数据库 DSN 和密码 web.xml。

    • 2

相关问题

  • 阿帕奇的替代品

  • 如何强制我的网址始终以 www 开头?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • mod_rewrite 不转发 GET 参数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve