apache 配置 http 反向代理的流程
1、让 Apache 具备反向代理代理功能
apache 启用模块的两种方式:
-
执行 a2enmod 命令:
a2enmod <module_name>(这是 ubuntu 上最常用的方式) -
修改 apache 配置文件:
LoadModule <module_name> <module_path>
apahce 具备 http 协议 代理功能需要启动的模块:
-
核心模块:mod_proxy ,让apache 具备最基础的代理能力
-
协议模块:mod_proxy_http,让apache能代理 HTTP 请求
2、对客户端请求的URL进行重新构造
-
ProxyPass 指令语法格式:
ProxyPass <PATH> <URL> -
URL 构造原则:
-
ProxyPass 根据参数1(PATH)匹配请求 URI 的前缀,将匹配到的部分去掉。
-
将剩余路径拼接到 参数二(URL) 的末尾,构造新的后端请求 URL。
-
示例:ProxyPass /EHCommon http://127.0.0.1/EHCommon
- 客户端请求 :
/EHCommon/admin/user/login- 去掉前缀 :
/admin/user/login- 拼接目标 URL:
http://127.0.0.1/EHCommon/admin/user/login
3、对后端返回响应头中包含的URL进行重写
-
ProxyPassReverse 指令语法:
ProxyPassReverse <PATH> <URL> -
URL 重写原则:
-
通过参数1(PATH)决定决定哪些请求的响应需要进行 URL 检查。
-
若该请求的响应头中出现 URL ,并且该 URL 是以参数2(URL)为前缀,则执行替换操作。
-
会替换这个URL中的协议、主机名和端口,路径保持不变,替换为客户端访问代理服务器时使用的地址、协议和端口信息
-
例如:ProxyPassReverse /EHCommon http://127.0.0.1/EHCommon
- 请求:
http://127.0.0.1/EHCommon/admin/user/login,因包含 /EHCommon前缀,所以该请求的响应会被做URL检查。- 响应:应报文中存在:
Location: http://127.0.0.1/EHCommon/anotherpage- 匹配:该响应报文中响应字段URL值以
http://127.0.0.1/EHCommon为前缀,所以会被替换。- 替换:客户端访问代理时的访问地址(端口、主机、协议三部分)
范例:当客户端向 19001 对应的虚拟主机发起请求,请求中包含/ws_9001前缀时, 代理到后端的 9001 端口对应的虚拟主机进行处理。
<VirtualHost *:19001>
ProxyPass /ws_9001 ws://127.0.0.1:9001
ProxyPassReverse /ws_9001 ws://127.0.0.1:9001
ErrorLog ${APACHE_LOG_DIR}/general_error.log
CustomLog ${APACHE_LOG_DIR}/general_access.log combined
</VirtualHost>
WebSocket 协议代理需要启用 mod_proxy_wstunnel 模块
浙公网安备 33010602011771号