You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Apache HTTPD实现多域名分别处理PHP与Tomcat服务?

解决方案:基于Apache虚拟主机实现多域名分流PHP与Tomcat服务

没问题,这完全可以通过Apache的**虚拟主机(VirtualHost)**配置来实现,让不同域名各自对应PHP和Tomcat服务,互不干扰。我给你详细的配置步骤和代码示例,照着来就行:

一、先确认必要模块已启用

首先确保Apache加载了所需的核心模块:

  • 启用虚拟主机模块:如果是Debian/Ubuntu系统,执行a2enmod vhost_alias;如果是CentOS/RHEL,打开httpd.conf确保LoadModule vhost_alias_module modules/mod_vhost_alias.so没有被注释。
  • 确认PHP相关模块(比如mod_php或php-fpm对应的代理模块)已启用,同时mod_jk模块也已正确加载(且workers.properties文件配置好了Tomcat的连接参数)。

二、配置虚拟主机

将以下配置添加到Apache的主配置文件(httpd.conf)或者站点配置目录(比如Debian/Ubuntu的/etc/apache2/sites-available/)中:

1. abc.yyy.com 对应PHP服务

<VirtualHost *:80>
    ServerName abc.yyy.com
    # 替换成你的PHP项目实际根目录路径
    DocumentRoot /var/www/abc-php-project

    <Directory "/var/www/abc-php-project">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    # 根据你的PHP运行方式选择配置:
    # 若用mod_php,启用PHP文件处理
    AddHandler application/x-httpd-php .php
    # 若用php-fpm,用代理转发请求到FPM进程
    # ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/abc-php-project/$1

    # 日志配置,方便排查问题
    ErrorLog ${APACHE_LOG_DIR}/abc.yyy.com-error.log
    CustomLog ${APACHE_LOG_DIR}/abc.yyy.com-access.log combined
</VirtualHost>

2. def.yyy.com 对应Tomcat Java服务

<VirtualHost *:80>
    ServerName def.yyy.com

    # 用mod_jk将所有请求转发到Tomcat,worker1对应你workers.properties里的Tomcat worker名称
    JkMount /* worker1

    # mod_jk日志配置
    JkLogFile ${APACHE_LOG_DIR}/def.yyy.com-jk.log
    JkLogLevel info

    # 常规日志
    ErrorLog ${APACHE_LOG_DIR}/def.yyy.com-error.log
    CustomLog ${APACHE_LOG_DIR}/def.yyy.com-access.log combined
</VirtualHost>

三、关键配置说明

  • ServerName是核心:Apache会根据请求的域名自动匹配对应的VirtualHost块,务必保证每个虚拟主机的ServerName和你的域名完全一致。
  • PHP虚拟主机重点:要确保DocumentRoot指向正确的PHP项目目录,PHP处理规则(AddHandler或ProxyPassMatch)和你实际使用的PHP运行环境匹配。
  • Tomcat虚拟主机重点:JkMount /* worker1中的worker1必须和你workers.properties里定义的Tomcat worker名称一致,比如你的workers.properties里应该有类似worker.worker1.host=localhost、worker.worker1.port=8009(Tomcat默认AJP端口)的配置。

四、生效配置

配置完成后,重启Apache服务:

  • Debian/Ubuntu:sudo systemctl restart apache2
  • CentOS/RHEL:sudo systemctl restart httpd

你还可以用apache2ctl -S(Debian/Ubuntu)或httpd -S(CentOS/RHEL)命令检查虚拟主机配置是否正确加载,确认域名和对应配置块的匹配关系。

内容的提问来源于stack exchange,提问作者Chor Wai Chun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:09:41