====== 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_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