文档章节

Nginx反向代理并替换内容模块ngx_http_substitutions_filter_modu

adbug
 adbug
发布于 2016/02/16 14:59
字数 1560
阅读 2288
收藏 6

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>


======

以前写过Nginx反向代理通过with-http_sub_module和substitutions4nginx模块替换正文内容和URL和在军哥lnmp的环境下配置反向代理服务器的方法教程

本教程基于军哥lnmp环境,其他Nginx类同。区别在于nginx conf的位置,一般编译的在/usr/local/nginx/conf/,从源安装的在/etc/nginx。

lnmp的安装这里省略,下面教程是在已经安装好的lnmp环境下配置反向代理服务器,并实现替换内容。

一、仅仅作为反向代理服务器,做cdn加速,不替换内容

1.新增虚拟主机配置文件用于反代

找到您的nginx conf所在位置,一般编译的在/usr/local/nginx/conf/,从源安装的在/etc/nginx

在nginx.conf的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/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是你要绑定的域名

配置文件内容:{后端(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


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

二、下面通过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



© 著作权归作者所有

adbug
粉丝 7
博文 176
码字总数 198249
作品 0
成都
私信 提问
Nginx编译安装第三方模块http_substitutions_filter_module

ngxhttpsubstitutionsfiltermodule OR HttpSubModule ? 为了应急处理或者一些需要,有时候需要使用Nginx的反向代理某站点,并通过 HttpSubModule 和ngxhttpsubstitutionsfiltermodule 模块替...

adbug
2016/02/21
347
0
Nginx系列教程:nginx_substitutions_filter模块

nginxsubstitutionsfilter 请注意:此模块不是Nginx源的分布,可点击此链接找到安装说明, http://wiki.nginx.org/NginxHttpSubsModule#Installation 。 概述 nginxsubstitutionsfilter 是一...

mickelfeng
2012/12/28
645
0
透过nginx实现内网hadoop、hbase集群对外访问web界面

不少公司为了安全,hadoop、hbase集群都是不对外开放,只有一台入口机对外,那么当要查看hadoop、hbase集群机器状态等信息时,就没办法了。 而要实现内网机器给外网访问,要解决的问题是:1...

中成才
2016/08/29
147
0
openresty+lua在反向代理服务中的玩法

0x01 起因 几天前学弟给我介绍他用nginx搭建的反代,代理了谷歌和维基百科。 由此我想到了一些邪恶的东西:反代既然是所有流量走我的服务器,那我是不是能够在中途做些手脚,达到一些有趣的目...

adbug
2016/02/16
245
0
Nginx反向绑定域名方法和详细操作应用实例:Google和Gravatar

反向绑定域名,即将域名B绑定到域名A上,用户只要访问B就等同于进入A,内容都是由A提供,它有点像建立了一个A的镜像。什么时候要用到反向绑定域名?服务器集群和网站负载均衡时,把用户访问请...

ustbgaofan
2015/08/05
841
0

没有更多内容

加载失败,请刷新页面

加载更多

Java8新特性,语法学习

package com.example.demo.java8;import com.example.demo.domin.User;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.stream.Co......

Gx_ww
4分钟前
4
0
type()和isinstance()之间有什么区别?

这两个代码片段之间有什么区别? 使用type() : import typesif type(a) is types.DictType: do_something()if type(b) in types.StringTypes: do_something_else() 使用isinsta......

javail
5分钟前
4
0
Flink-本地设置教程

设置:下载并启动Flink 启动本地Flink群集 阅读代码 运行示例 下一步 通过几个简单的步骤即可启动并运行Flink示例程序。 设置:下载并启动Flink Flink在Linux,Mac OS X和Windows上运行。为了...

sunwuhan
7分钟前
2
0
RPA是什么?RPA发展极简史

眼下,RPA(机器人流程自动化)技术爆火于科技圈与投资界,并持续引发新一轮的数字化变革。 与过去几年间的很多技术投资热点不同,如今RPA技术被资本方和市场方广为看好,原因有二:一是RPA...

UiBot
8分钟前
3
0
超级账本Fabric的交易背书过程解读

Hyperledger Fabric和其他许多区块链的关键区别之一,就在于Fabric区块链的交易执行过程:Fabric交易需要首先通过节点的背书,然后再进行交易排序,最后才利用有序交易进行账本的更新。本文将...

区块链教程
10分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部