Nginx反向代理並替換內容模塊ngx_http_substitutions_filter_modu


====== php

之前寫過Nginx反向代理經過with-http_sub_module和substitutions4nginx模塊替換正文內容和URL和在軍哥lnmp的環境下配置反向代理服務器的方法教程 css

本教程基於軍哥lnmp環境,其餘Nginx類同。區別在於nginx conf的位置,通常編譯的在/usr/local/nginx/conf/,從源安裝的在/etc/nginx。 html

lnmp的安裝這裏省略,下面教程是在已經安裝好的lnmp環境下配置反向代理服務器,並實現替換內容。 前端

1、僅僅做爲反向代理服務器,作cdn加速,不替換內容 nginx

1.新增虛擬主機配置文件用於反代 git

找到您的nginx conf所在位置,通常編譯的在/usr/local/nginx/conf/,從源安裝的在/etc/nginx github

在nginx.conf的http層加入如下內容: apache

proxy_connect_timeout    5;
proxy_read_timeout       60;
proxy_send_timeout       5;
proxy_buffer_size        16k;
proxy_buffers            4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path   /home/cache/temp;
#臨時文件目錄
proxy_cache_path  /home/cache/path levels=1:2 keys_zone=cache_one:5m inactive=7d max_size=1g;
#5m爲內存佔用,1g爲最大硬盤佔用,cache_one爲緩存區名字,若是修改則下文的配置亦要相應修改。
mkdir /home/cache/path -p
mkdir /home/cache/temp
chmod 777 -R /home/cache

新增虛擬主機配置: 後端

vi /usr/local/nginx/conf/vhost/xxorg.com.conf

#xxorg.com是你要綁定的域名 centos

配置文件內容:{後端(ip爲1.2.3.4)綁定域名xxorg.com,前端綁定域名xxorg.com,域名解析到前端,實現cdn加速。}

server{
listen 80;
server_name example.com www.example.com;    
#綁定的域名

index index.php;      
#默認首頁

access_log off;        
#off 關閉日誌

location / {
proxy_cache_key "$scheme://$host$request_uri";
#緩存key規則,用於自動清除緩存。

proxy_cache cache_one;
#緩存區名稱,與前面定義的相同

proxy_cache_valid  200 304 3h;
proxy_cache_valid 301 3d;
proxy_cache_valid any 10s;
#200 304狀態緩存3小時
301狀態緩存3天
其餘狀態緩存(如502 404)10秒

proxy_set_header   X-Real-IP  $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
#向後端傳遞訪客ip

proxy_set_header   Referer http://example.com;    
#強制定義Referer,程序驗證判斷會用到

proxy_set_header   Host $host;
#定義主機頭

proxy_pass http://1.2.3.4;    
#指定後端ip,能夠加端口

#proxy_cache_use_stale invalid_header error timeout http_502;
#當後端出現錯誤、超時、502狀態時啓用過時緩存,慎用。
      }
}

如無心外,重啓nginx後把xxorg.com綁定到前端就能夠訪問了

也能夠用如下方法查看配置文件是否正確:

執行:

/usr/local/nginx/sbin/nginx -t

檢查配置是否正常,若是顯示:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok    
configuration file /usr/local/nginx/conf/nginx.conf test is successful

就說明nginx的配置文件正常,不然按錯誤提示修改配置。

而後執行

kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

使配置生效,

/etc/init.d/nginx restart


=========================

2、下面經過Nginx反向代理別人的網站,並替換相關內容

1.編譯nginX

apt-get update#nginx-full這個包裏面包含着全部須要用到的模塊。
cd /root
apt-get update
apt-get install -y git gcc g++ make automake
#安裝依賴包,Centos將apt-get更改成yum
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module
wget http://nginx.org/download/nginx-1.2.8.tar.gz
tar zxvf nginx-1.2.8.tar.gz
cd nginx-1.2.8
./configure --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
make install

若是您用的系統是Debian,就不須要編譯了。

echo "deb http://packages.dotdeb.org squeeze all" >>/etc/apt/sources.list
echo "deb-src http://packages.dotdeb.org squeeze all" >>/etc/apt/sources.list
#添加dotdeb源,已屢次介紹dotdeb源的好處
apt-get update
apt-get install nginx-full
#nginx-full這個包裏面包含着全部須要用到的模塊。

2.修改nginx.conf,配置反向代理以及替換內容

編譯的在/usr/local/nginx/conf/nginx.conf,源碼安裝的在/etc/nginx/nginx.conf

以xxorg.com反代www.baidu.com並替換內容爲例:

user  www;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;
pid        logs/nginx.pid;

events {
              use epoll;
  worker_connections  1024;
}

http {
… #此處省略一萬字
              proxy_connect_timeout    5;
              proxy_read_timeout       60;
              proxy_send_timeout       5;
              proxy_buffer_size        16k;
              proxy_buffers            4 64k;
              proxy_busy_buffers_size 128k;
              proxy_temp_file_write_size 128k;
              proxy_temp_path   /home/cache/temp;
              proxy_cache_path  /home/cache/one levels=1:2 keys_zone=cache_one:3m inactive=7d max_size=1g;

server {
 listen       80;
 server_name  xxorg.com;
 index index.php;      
      #默認首頁

location / {
  subs_filter_types text/html text/css text/xml;
  subs_filter www.baidu.com xxorg.com gi;
#替換模塊,下文詳解。

  proxy_cache_key "$scheme://$host$request_uri";
#緩存key規則,用於自動清除緩存。

  proxy_cache cache_one;
#緩存區名稱,必須與前面定義的相同

  proxy_cache_valid  200 304 3h;
  proxy_cache_valid 301 3d;
  proxy_cache_valid any 10s;
#200 304狀態緩存3小時
#301狀態緩存3天
#其餘狀態緩存(如502 404)10秒

  proxy_set_header   X-Real-IP  $remote_addr;
  proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
#向後端傳遞訪客ip

  proxy_set_header   Referer http://www.baidu.com;    
#強制定義Referer,程序驗證判斷會用到

  proxy_set_header   Host www.baidu.com;
#定義主機頭

  proxy_pass http://1.2.3.4;    
#指定後端ip

  proxy_set_header Accept-Encoding "";    
#清除編碼

 proxy_cache_use_stale invalid_header error timeout http_502;
#當後端出現錯誤、超時、502狀態時啓用過時緩存
      }
  }
}

注意:若是您要經過Nginx的nginx_substitutions_filter模塊替換的內容裏面有中文,請將conf文件保存爲utf-8 without BOM編碼。


====================================

本教程共三部份內容:

Nginx配合ngx_http_substitutions_filter_module模塊搭建反向代理服務器,並替換目標站內容【之一】

Nginx配合ngx_http_substitutions_filter_module模塊搭建反向代理服務器,並替換目標站內容【之二】

Nginx反向代理並替換內容模塊ngx_http_substitutions_filter_module的使用說明

關於Nginx反向代理並替換內容模塊ngx_http_substitutions_filter_module的說明:

描述 nginx_substitutions_filter 是一個nginx替換模塊,就跟apache的 mod_substitute模塊同樣

使用示例

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

Nginx反向代理並替換內容涉及指令: * subs_filter_types

* subs_filter

subs_filter_types 語法: *subs_filter_types mime-type [mime-types] *

默認: *subs_filter_types text/html*

內容: *http, server, location*

*subs_filter_types* 是用來指定替換文件類型的 默認僅僅替換text/html類型的文件。

*若是您反代的論壇出現登陸跳轉源站之類的問題,請檢查這個項目。

 

proxy_set_header Accept-Encoding 「」;

subs_filter 語法: *subs_filter source_str destination_str [gior] *

默認: *none*

內容: *http, server, location*

*subs_filter* 是用來替換文本的,可使用正則

* *g*(默認):替換匹配項。

* *i*:區分大小寫的匹配

* *o*: 只匹配發現的第一個。

* *r*: 正則。

 

 

*Nginx反向代理並替換內容參考資料:

Nginx Wiki   http://wiki.nginx.org/HttpProxyModule

YaoWeibin Github    https://github.com/yaoweibin/ngx_http_substitutions_filter_module

相關文章
相關標籤/搜索