nginx反向代理模块配置详解_nginx的反向代理模块 参数proxy_pass,proxy_method,proxy_hide_...

nginx的反向代理模块有很多种配置,下面介绍一些常用的配置实例:

1.proxy_pass

语法:

proxy_pass URL

配置块:

location,if

详解:此配置项将当前请求反向代理到URL参数指定的服务器上,URL可以是主机名或者IP地址加端口的形式。例如:

// nginx.conf配置文件

// 配置URL地址

proxy_pass http://www.54rd.net/html/webserver/;

// 也可以配置unix句柄

proxy_pass http://unix:/path/to/backend.sock:/webserver/;

// 也可以把HTTP转换成更安全的HTTPS

proxy_pass https://192.168.0.1;

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

proxy_set_header Host$host;

2.proxy_method

语法:proxy_method method;

配置块:http,server,location

详解:此配置项表示转发时的协议方法名,例如:

// 配置后客户端发来的GET请求在转发时方法名也会改为POST

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头部字段不能被转发。例如:

// 例如不转发缓存控制

proxy_hide_header Cache-Control;

4.proxy_pass_header

语法:proxy_pass_header the_header;

配置块:http,server,location

详解:于proxy_hide_header功能相反,proxy_pass_header会将原来禁止转发的header设置成允许转发。例如:

// 允许重定向

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字段,例如:

// 如果上游服务器发出的响应码是302,location字段的URL是http://www.54rd.net/html/webserver/,那么实际会转发到http://www.54rd.net/html/php/

proxy_redirect http://www.54rd.net/html/webserver/ http://www.54rd.net/html/php/;

// 还可以使用ngx-http-core-module提供的变量来设置

proxy_redirect http://www.54rd.net/html/webserver/ http://$host:$server_port/;

// 也可以省略repalcement参数中的主机部分,这时会用虚拟主机名称来填充

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类似,例如增加如下配置:

location ^~ /yum

{

proxy_pass http://192.168.1.1/;

proxy_redirect http://www.54rd.net/ /yum/;

}

这样,当访问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的参数用来说明在哪些情况下会继续选择下一台上游服务器转发请求:

error:当向上游服务器发起连接,发送请求,读取响应时出错时。

timeout:发送请求或者读取响应发生超时时。

invalid_header:上游服务器发送的响应时不合法时。

http_500:上游服务器返回的HTTP响应码是500时。

http_502:上游服务器返回的HTTP响应码是502时。

http_503:上游服务器返回的HTTP响应码是503时。

http_504:上游服务器返回的HTTP响应码是504时。

http_404:上游服务器返回的HTTP响应码是404时。

off:关闭proxy_next_upstream 功能一出错就选择另一台上游服务器再次转发。

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值