• Nginx编译安装第三方模块http_substitutions_filter_module


    Nginx编译安装第三方模块http_substitutions_filter_module
    
    分类:服务器技术  作者:rming  时间:2014-04-19
    1. >>ngx_http_substitutions_filter_module OR HttpSubModule ?
    
    为了应急处理或者一些需要,有时候需要使用Nginx的反向代理某站点,并通过 HttpSubModule 和ngx_http_substitutions_filter_module 模块替换正文内容和URL。
    但是通常LNMP套件安装的webserver并没有编译安装nginx官方模块HttpSubModule(官方option),并且,官方自带的模块HttpSubModule 只能匹配1条规则,但是使用第三方模块ngx_http_substitutions_filter_module 可以匹配多条规则。
    
    备注:
    ngx_http_substitutions_filter_module 是指第三方nginx模块 substitutions4nginx (原:Google Code 现:github)
    HttpSubModule 是指Nginx官方的 with-http_sub_module模块(option)
    
    Nginx自身带的module并不多,这也是它为什么性能好,系统开销较小的原因之一,相比apache,它不能动态的加载module,如果之前编译安装了Nginx,这时候就需要重新编译nginx添加模块,并替换掉原先的nginx执行文件。
    
    2. 1.下载需要的文件
    
    substitutions4nginx github下载
    
    # 下载第三方模块
    # cd ~
    # git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
    3. 2.查看之前Nginx编译configure
    
    # nginx -V
    nginx version: nginx/1.2.7
    built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
    TLS SNI support enabled
    configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with- http_ssl_module --with-http_gzip_static_module --with-ipv6
    因为Nginx编译安装第三方模块的时候需要添加上之前编译的configure参数,然后重新设置configure编译(但是不覆盖安装,只make不install):
    
    ./configure --prefix=/你的安装目录 --add-module=/第三方模块目录
    4. 3.重新编译Nginx
    
    # 打开Nginx编译目录,版本号可能不同
    # cd ~/lnmp1.0-full/nginx-1.2.7
    # 重新configure
    # ./configure --prefix= --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --add-module=/root/ngx_http_substitutions_filter_module
    # make
    备注:重新编译的时候,记得一定要把以前编译过的模块一同加到configure参数里面.
    
    5. 4.覆盖原nginx文件
    
    # /etc/init.d/nginx stop
    # cd cd objs/
    # 覆盖原文件
    # cp nginx /usr/local/nginx/sbin/
    # /etc/init.d/nginx start
    6. 5.简单配置
    
    7. ① HttpSubModule 的 官方文档 说的很清楚,这里就不写实例了,并且功能没有substitutions4nginx的强大。
    
    7.1. 在头部引入指定JS
    
    location / {
    sub_filter </head>
    '</head><script language="javascript" src="$script"></script>';
    sub_filter_types text/html;
    sub_filter_once on;
    }
    sub_filter 一行代码前面是需要替换的内容,后面单引号内是替换成的内容。
    sub_filter_once 意思是只查找并替换一次。on是开启此功能,off是关闭——默认值是on。
    sub_filter_types 一行意思是选定查找替换文件类型为文本型。也可以不加此行,因为默认只查找text/html文件。
    sub_filter模块可以用在http, server, location模块中。主要作用就是查找替换文件字符。
    8. ② substitutions4nginx
    
    8.1. subs_filter
    
    实例:
    location / {
    subs_filter_types text/html text/css text/xml;
    subs_filter st(d*).example.com $1.example.com ir;
    subs_filter a.example.com s.example.com;
    }
    g(default):替换所有匹配的字符串。
    i: 执行不区分大小写的匹配。
    o: 只需将第一个。
    r:该模式是作为一个正则表达式处理,默认是固定的字符串。
    
    8.2. subs_filter_types
    
    syntax: subs_filter_types mime-type [mime-types]
    default: subs_filter_types text/html
    context: http, server, location
    subs_filter ‘<(no?script.*?)>(.*?)<(/no?script.*?)>’ ” gi; //替换掉全部的<noscript></noscript>
    subs_filter ‘<(s?cript.*?)>(?:s|S)*?<(/s?cript.*?)>’ ” gi; //替换掉全部的<script>包换中间换行</script>
    subs_filter ‘<(i?frame.*?)>(.*?)<(/i?frame.*?)>’ ” gi; //替换<iframe></iframe>
    9. >>参考资料<<
    
    ngx_http_sub_module
    
    substitutions4nginx
    
    Nginx第三方模块
    
    PHP使用header函数设置HTTP头的示例方法
    使用Git来部署一个Web站点笔记
    zytsezytse
    January 19th, 2015 at 08:42 pm
    请问如何替换汉字呢?比如“中国”替换成“世界”
    
    回复
    海天海天
    April 3rd, 2015 at 12:48 am
    博主你好,我使用你文章中说的方法,修改了网站的conf文件后也没有报错
    但是替换一个网站中的google的ajax文件却一直不成功,麻烦你帮我看看
    我使用的http://ps.haoyingyu.net反向代理了http://ourdiscoveryisland.com/
    conf配置是
    server
    {
    listen 80;
    server_name ps.haoyingyu.net;
    
    location / { sub_filter ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js libs.baidu.com/jquery/1.7.2/jquery.min.js; sub_filter_once off; proxy_pass http://ourdiscoveryisland.com/; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
    }
     
  • 相关阅读:
    【cocos2d-js官方文档】十七、事件分发机制
    【cocos2d-js官方文档】十一、cc.path
    c# 类成员的定义 定义方法、字段和属性【转】
    【转】算法的流程图表示
    C#中接口的深入浅出【转】
    C#中动态创建数据库和数据表,很经典【转】
    【转】c# winform 创建文件,把值写入文件,读取文件里的值,修改文件的值,对文件的创建,写入,修改
    在txt文本后追加内容
    net 提供了Thread类用于线程的操作
    美到极致是疯狂
  • 原文地址:https://www.cnblogs.com/archoncap/p/4961204.html
Copyright © 2020-2023  润新知