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 模块

posted on 2025-11-20 16:13  一直小爪子  阅读(9)  评论(0)    收藏  举报