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; } }