• 青蛙学Linux—Apache反向代理的实现


    1、反向代理需要的模块

    要实现反向代理,需要打开以下模块:

    # 在Apache主配置文件httpd.conf中取消以下行的注释
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

    2、反向代理指令

    2.1、ProxyPass指令

    ProxyPass指令用于映射请求到后端服务器,主要用于URL前缀匹配,不支持正则,匹配到的URL路径将不会传递给后端服务器。ProxyPass指令语法如下:

    ProxyPass "URL路径" !|"后端URL路径"
    • !:指定的URL路径不进行代理

    注意:这里的URL路径不会传递给后端服务器。比如,假设当前域名为xxx.com,ProxyPass “/image” “http://yyy.com”,此时当客户端访问http://xxx.com/image/1.jpg时,Apache向后端请求的路径为http://yyy.com/1.jpg。

    注意:如果URL路径结尾带有/,则后端URL结尾也必须带有/,如ProxyPass “/image/” “http://yyy.com/”。

    注意:全站代理必须设置为ProxyPass “/” “http://yyy.com/”(相当于URL路径结尾带/)。

    2.2、ProxyPassReverse指令

    与ProxyPass指令一起使用,以避免后端服务器的HTTP重定向造成绕过反向代理的现象。该指令的语法同ProxyPass指令,与ProxyPass一起使用时参数也与ProxyPass相同。

    2.3、ProxyPassMatch指令

    支持正则的ProxyPass指令。注意,使用该指令时,URL路径将传递给后端服务器。指令语法如下:

    ProxyPassMatch "正则URL路径" !|"后端URL"

    注意:匹配到的URL路径将传递给后端服务器。比如,假设当前域名为http://xxx.com,ProxyPassMatch “^/image” “http://yyy.com”,此时访问http://xxx.com/image/1.jpg,Apache向后端服务器请求的路径为http://yyy.com/image/1.jpg。

    3、一个例子

    实验环境:

    • 主机A:IP地址为192.168.0.88,为前端服务器,设置虚拟主机www.abc.com
    • 主机B:IP地址为192.168.0.110,为后端服务器,无虚拟主机设置,直接通过IP访问

    主机A的虚拟主机设置如下:

    <VirtualHost *:80>
        ServerAdmin xxx@xxx.com
        DocumentRoot "/data/www.abc.com"
        ServerName www.abc.com
        ServerAlias abc.com
        ErrorLog "logs/www.abc.com-error_log"
        CustomLog "logs/www.abc.com-access_log" common
        <Directory "/data/www.abc.com">
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>
    </VirtualHost>

    指向的路径/data/www.abc.com下有index.html文件,内容为:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h3>www.abc.com</h3>
    <h4>这是一个虚拟主机</h4>
    </body>
    </html>

    在客户端主机上通过修改host文件做本地解析后,访问www.abc.com:

    1

    主机B上不设置任何虚拟主机,直接使用修改后的Apache默认主页,内容如下:

    <html><body><h1>192.168.0.110</h1></body></html>

    访问http://192.168.0.110:

    2

    此时在主机A上进行反向代理配置,虚拟主机配置中添加如下内容(www.abc.com全站反向代理):

    ProxyPass "/" "http://192.168.0.110/"
    ProxyPassReverse "/" "http://192.168.0.110/"

    重启主机A的Apache,然后访问www.abc.com:

    3

    此时访问www.abc.com已经被成功代理到主机B上了。

  • 相关阅读:
    每日一库:ZeroClipboard.js
    每日一库:Zepto.js
    每日一库:microAjax.js
    浏览器渲染方面资料
    MongoDB语法
    使用jquery选中文本(包括输入框input和文本框textarea)
    asp.net 将数据静态化
    TreeView 节点
    asp.net导出数据到word或者excel
    C# 把数组转换成DataSet数据类型
  • 原文地址:https://www.cnblogs.com/yu2006070-01/p/10309235.html
Copyright © 2020-2023  润新知