本文介绍如何配置HTTPD服务器的反向代理服务,实现目标网页的控制和过滤。
一、简介
Apache HTTP Server
(简称Apache或httpd)是Apache软件基金会的一个开放源代码的网页服务器软件,旨在为unix,windows等操作系统中提供开源httpd服务。由于其安全性、高效性及可扩展性,被广泛使用,自1996年4月以来,Apache一直是Internet上最流行的HTTP服务器。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器等编译到httpd的相关模块中。
如果要实现对用户访问网页资源的控制和过滤,可以通过两种方式实现:重定向与过滤器。
二、设置重定向
通过在配置文件中设置RewriteRule
实现。
HTTPD的服务器配置文件conf/httpd.conf
中,通过如下设置:
去掉Module的注释,或者添加如下配置:
1
LoadModule rewrite_module modules/mod_rewrite.so`
开启
RewriteEngine
(也可以自定义配置文件,注意需要在httpd.conf
中添加相关路径)- 配置
ServerName
- 利用正则配置重定向路径规则
1
RewriteRule old-URL new-URL
在自定义的配置文件中,完整的配置如下:
1 | <Directory target-file-path> |
对于配置中的问题,可以在var/log/errorlog
中查看错误日志:
1 | [Fri May 17 20:53:36.109491 2019] [auth_digest:notice] [pid 18476] AH01757: generating secret for digest authentication ... |
三、过滤器
过滤器用来对 server 收到/发送的数据进行再加工。过滤器分两种:input filters
用于处理 server
从 client
收到的数据,output filters
用于处理 server
向 client
发送的数据。一个数据流上可以挂多个过滤器。这些过滤器可以通过显式指定来确定执行顺序。
注意: InputFilter
只能拦截客户端的POST
请求,对于GET
请求,需要设置如下的过滤方式。
3.1 JS
注入
为了实现对网页的过滤,可以利用过滤器得到网页,通过JS注入
的方式改变网页DOM数结构。而过滤器实现可以通过PHP
或者Python
等脚本语言。
- 首先配置过滤器,配置文件如下:
1 | ExtFilterDefine testOutFilter mode=output cmd="/usr/bin/php /etc/httpd/filters/test.php" |
- 利用
PHP
脚本JS注入
1 |
|
JavaScript
的脚本test.js
实现对HTML
页面的DOM树
修改。
1 | <script type="text/javascript"> |
3.2 脚本过滤
- 也可以直接用
PHP
对拦截的数据流直接处理,首先是修改配置文件,示例如下:
1 | ExtFilterDefine testOutFilter2 mode=output cmd="/usr/bin/php /etc/httpd/filters/test2.php" |
- 用
PHP
脚本替换拦截的JS
文件内容:
1 |
|
参考链接
[HTTPD] Linux(Apache)Httpd服务器安装,启动及httpd.conf配置详解
Apache HTTP Server - Dev