1. 问题描述
将以下原始 URL 优化为目标 URL,并分离静态请求与动态请求。
原始 URL:http://localhost:8080/www/page/login.html
目标 URL:http://smart/
2. 解决方案
整合 Apache 与 Tomcat,借助 Tomcat Connector(JK)来实现,需开启 Tomcat 的 AJP 协议。在 Apache 中导入 JK 模块,配置虚拟主机,使用 URL 重写规则,配置 JK 转发映射。使用 Apache 接收静态请求(如:html、css、js、图片等),使用 Tomcat 接收动态请求(如:AJAX)。
3. 操作步骤
3.1 配置 Tomcat
3.1.1 修改 server.xml 文件
......
说明:
-
开启 AJP13 协议(去掉 Connector 的注释)。
-
可添加 URIEncoding="UTF-8",可解决 GET 请求中文乱码问题(可选)。
3.2 配置 Apache
3.2.1 下载 mod_jk
下载地址:
注意:需要针对操作系统与 Apache 的版本下载相应的二进制包。
3.2.2 修改 httpd.conf 文件
...LoadModule rewrite_module modules/mod_rewrite.so...Include conf/extra/httpd-vhosts.conf...Include conf/extra/httpd-jk.conf
说明:
-
加载 mod_rewrite,用于配置 URL 重写(去掉 mod_rewrite.so 的注释)。
-
开启虚拟主机(去掉 httpd-vhosts.conf 的注释)。
-
集成 mod_jk(添加 httpd-jk.conf 配置)。
3.2.3 创建并编辑 httpd-jk.conf 文件
LoadModule jk_module modules/mod_jk.soJkWorkersFile conf/workers.propertiesJkLogFile logs/mod_jk.logJkLogLevel info
说明:
-
加载 mod_jk 模块。
-
关联 workers 配置文件。
-
配置 mod_jk 日志文件与日志级别。
3.2.4 创建并配置 workders.properties 文件
worker.list=tomcatworker.tomcat.type=ajp13worker.tomcat.host=localhostworker.tomcat.port=8009
说明:
-
配置 worker 名称为 tomcat。
-
配置 worker 类型、主机名、端口号。
3.2.5 修改 httpd-vhost.conf 文件(配置虚拟主机)
NameVirtualHost *:80ServerName "smart" DocumentRoot "D:\Workspace\smart\smart-sample\src\main\webapp\www" ErrorLog "logs/smart-error.log" CustomLog "logs/smart-access.log" common Options FollowSymLinks AllowOverride None Order allow,deny Allow from all RewriteEngine on RewriteRule ^/$ /login.html [R] RewriteRule ^/(.*)\.html$ /page/$1.html [PT] JkMount /* tomcat JkUnMount /asset/* tomcat JkUnMount /page/* tomcat JkUnMount /script/* tomcat ErrorDocument 404 /login.html
说明:
-
配置域名(名为:smart)。
-
配置文档路径,指向静态文档根目录(www 目录)。
-
配置目录访问权限。
-
配置 URL 重写规则。
-
配置 JK 映射规则,将静态请求交给 Apache,将动态请求交给 Tomcat。动态请求就是 AJAX 请求。
-
配置错误代码响应页面。
3.3 启动服务器
分别启动 Tomcat 与 Apache。
3.4 配置域名映射
打开 C:\Windows\System32\Drivers\etc\hosts 文件,添加如下配置:
127.0.0.1 smart
3.5 访问应用
使用 http://smart/ 访问应用首页,即登录页面。