文档章节

nginx的反向代理模块 参数proxy_pass,proxy_method,proxy_hide_

adbug
 adbug
发布于 2016/02/24 09:16
字数 1289
阅读 2625
收藏 10
nginx的反向代理模块有很多种配置,下面介绍一些常用的配置实例:

1.proxy_pass


语法: proxy_pass URL
配置块: location,if
详解:此配置项将当前请求反向代理到URL参数指定的服务器上,URL可以是主机名或者IP地址加端口的形式。例如:
  1. // nginx.conf配置文件  
  2. // 配置URL地址  
  3. proxy_pass http://www.54rd.net/html/webserver/;  
  4.   
  5. // 也可以配置unix句柄  
  6. proxy_pass http://unix:/path/to/backend.sock:/webserver/;  
  7.   
  8. // 也可以把HTTP转换成更安全的HTTPS  
  9. proxy_pass https://192.168.0.1;  

默认情况下反向代理是不会转发请求中的Host头部。如果需要转发,那么必须加上set_header配置:
  1. proxy_set_header Host $host;  

2.proxy_method


语法:proxy_method method;
配置块:http,server,location
详解:此配置项表示转发时的协议方法名,例如:
  1. // 配置后客户端发来的GET请求在转发时方法名也会改为POST  
  2. proxy_method POST;  

3.proxy_hide_header


语法:proxy_hide_header the_header;
配置块:http,server,location
详解:nginx会将上游服务器的响应转发给客户端,但默认不会转发以下HTTP头部字段:Date,Server,X-Pad和X-Accel-*。使用proxy_hide_header后可以任意指定哪些HTTP头部字段不能被转发。例如:
  1. // 例如不转发缓存控制  
  2. proxy_hide_header Cache-Control;  

4.proxy_pass_header


语法:proxy_pass_header the_header;
配置块:http,server,location
详解:于proxy_hide_header功能相反,proxy_pass_header会将原来禁止转发的header设置成允许转发。例如:
  1. // 允许重定向  
  2. proxy_pass_header X-Accel-Redirect;  

5.proxy_pass_request_body


语法:proxy_pass_request_body on|off;
默认:proxy_pass_request_body on;
配置块:http,server,location
详解:作用为确定是否向上游服务器发送HTTP包体部分。

6.proxy_pass_request_headers


语法:proxy_pass_request_headers on|off;
默认:proxy_pass_request_headers on;
配置块:http,server,location
详解:作用为确定是否转发HTTP头部。

7.proxy_redirect


语法:proxy_redirect [default|off|redirect replacement];
默认:proxy_redirect default;
配置块:http,server,location
详解:当上游服务器返回的响应时重定向或者刷新请求(如HTTP响应码是302或者301)时,proxy_redirect可以重设HTTP头部的location或refresh字段,例如:
  1. // 如果上游服务器发出的响应码是302,location字段的URL是http://www.54rd.net/html/webserver/,那么实际会转发到http://www.54rd.net/html/php/  
  2. proxy_redirect http://www.54rd.net/html/webserver/ http://www.54rd.net/html/php/;  
  3.   
  4. // 还可以使用ngx-http-core-module提供的变量来设置  
  5. proxy_redirect http://www.54rd.net/html/webserver/ http://$host:$server_port/;  
  6.   
  7. // 也可以省略repalcement参数中的主机部分,这时会用虚拟主机名称来填充  
  8. proxy_redirect http://www.54rd.net/html/webserver/ /html/php/;  

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

在使用nginx的反向代理功能时,有时会出现重定向的url不是我想要的url,例如下面的例子:前端的Nginx负责把http: www 54rd net yum Server 开头的url反向代理到后端的http: 192 168 1 1 Server 上。对于有完整
在使用nginx的反向代理功能时,有时会出现重定向的url不是我想要的url,例如下面的例子:

前端的Nginx负责把http://www.54rd.net/yum/Server/开头的url反向代理到后端的http://192.168.1.1/Server/上。

对于有完整的路径,如http://www.54rd.net/yum/Server/的代理没有问题,Server对应后台服务器的一个目录。

但当访问 http://www.54rd.net/yum/Server时,后端Nginx会发送一个301到/上,于是返回到前端后URL变成了 http://www.54rd.net/Server/,这个url显然不是我们想要的。

在Apache中有个ProxyPassReverse的参数,用来调整反向代理服务器发送的http应答头的url,可以解决这个问题。

查了Nginx的手册后,终于发现了proxy_redirect这个参数,它实现的功能和ProxyPassReverse类似,例如增加如下配置:

  1. location ^~ /yum  
  2. {  
  3.   
  4.             proxy_pass http://192.168.1.1/;  
  5.   
  6.             proxy_redirect http://www.54rd.net/ /yum/;  
  7.   
  8. }  

这样,当访问http://www.54rd.net/yum/Server后,就会301到http://www.54rd.net/yum/Server/上了。

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


8.proxy_next_upstream


语法:proxy_next_upstream [error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off];
默认:proxy_next_upstream error timeout;
配置块:http,server,location
详解:此配置项表示当向一台上游服务器转发请求出现错误时,继续换一台上游服务器处理这个请求,这样可以更好的保证客户端只收到来自一个上游服务器的应答。proxy_next_upstream的参数用来说明在哪些情况下会继续选择下一台上游服务器转发请求:
  1. error:当向上游服务器发起连接,发送请求,读取响应时出错时。
  2. timeout:发送请求或者读取响应发生超时时。
  3. invalid_header:上游服务器发送的响应时不合法时。
  4. http_500:上游服务器返回的HTTP响应码是500时。
  5. http_502:上游服务器返回的HTTP响应码是502时。
  6. http_503:上游服务器返回的HTTP响应码是503时。
  7. http_504:上游服务器返回的HTTP响应码是504时。
  8. http_404:上游服务器返回的HTTP响应码是404时。
  9. off:关闭proxy_next_upstream 功能一出错就选择另一台上游服务器再次转发。

小结:nginx的反向代理使用起来还是很方便的,适当的修改配置即可。

© 著作权归作者所有

adbug
粉丝 7
博文 176
码字总数 198249
作品 0
成都
私信 提问
Nginx隐藏主机信息,proxy_hide_header 与fastcgi_hide_header

proxyhideheader 与fastcgihideheader qunyingliu nginx中proxyhideheader 与fastcgihideheader都可以隐藏主机头信息,两者在具体使用时还是有着一定的区别的。刚好业务使用的nginx反向代理在...

双鱼座小龙
2016/02/04
0
0
Nginx-http_proxy_module模块

Nginx 反向代理之 httpproxymodule 模块 proxypass指定属于 ngxhttpproxymodule 模块,此模块可以将请求转发到另一台服务器,在实际的反向代理工作中,会通过 location 功能匹配指定的 URI,...

别来无恙-
04/10
0
0
nginx 非80端口反向代理连接不上sqlserver数据库问题求教

公司只有一个外网IP,现在还未申请开放80端口,想用nginx先做个反向代理 具体配置如下 域名*.abc.com -》外网IP(212.123.21.11) -绑定到-- 防火墙 防火墙上做端口映射 81-----内外192.168...

james
2014/07/30
1K
5
Nginx之反向代理与负载均衡实现动静分离实战

Nginx之反向代理与负载均衡实现动静分离实战 什么是反向代理与负载均衡 Nginx仅仅作为Nginx proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果。 负载均衡指的是对请...

于学康
2017/05/31
0
0
nginx的正向代理和反向的区别及配置

1.正向代理的概念 正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器...

Taxing祥
2017/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux的基本命令

目录的操作命令(增删改查) 增: mkdir 目录名称; 查: ls 可以看到该目录下的所有的目录和文件 ls -a,可以看到该目录下的所有文件和目录,包括隐藏的 ls -l,可以看到该目录下的所有目录和...

凹凸凸
今天
2
0
在古老unix中增加新用户

Installing 4.3 BSD Quasijarus on SIMH 目标:要在4.3BSD中新增加用户dmr,指定目录/home/dmr,uid为10 gid=31(guest组,系统已建立) 4.3BSD还没有adduser或useradd 直接修改/etc/passwd...

wangxuwei
今天
2
0
Bootstrap(六)表单样式

基本样式 所有设置了 .form-control 类的 <input>、<textarea> 和 <select> 元素都将被默认设置宽度属性为 width: 100%;。 将 label 元素和前面提到的控件包裹在 .form-group 中可以获得最好...

ZeroBit
昨天
3
0
SSL 证书格式转换

SSL 证书格式转换 不同服务器情况下,需要不同的证书格式。 比如 pem 转 pfx。 pem在window 平台下可以导入,但是无法正常使用。 需要转换成pfx。 推荐在线转换工具,由中国数字证书网站提供...

DrChenXX
昨天
2
0
HAProxy

xx

Canaan_
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部