博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx反向代理配置
阅读量:7065 次
发布时间:2019-06-28

本文共 3496 字,大约阅读时间需要 11 分钟。

 众所周知,nginx是一个很优秀的反向代理服务器,它反向代理的性能堪比haproxy,在很多应用场景中,nginx常常单独作为反向代理server+keepalived的配合构建高性能,高可用集群,下面我们讲讲nginx配置反向代理时一些常用配置参数说明,如下:

一. nginx反向代理配置项说明

1.1 proxy_pass

语法:proxy_pass URL;

配置块:location、if

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

proxy_pass http://localhost:8000/uri/; 复制代码

也可以是UNIX句柄:

proxy_pass http://unix:/path/to/backend.socket:/uri/;复制代码

还可以如上节负载均衡中所示,直接使用upstream块,例如:

upstream backend {    …  }   server {    location / {      proxy_pass  http://backend;    }  }复制代码

用户可以把HTTP转换成更安全的HTTPS,例如:

proxy_pass https://192.168.0.1; 复制代码

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

proxy_set_header Host $host; 复制代码

1.2 proxy_method

语法:proxy_method method;

配置块:http、server、location

此配置项表示转发时的协议方法名。例如设置为

proxy_method POST;复制代码

那么客户端发来的GET请求在转发时方法名也会改为POST。

1.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;  proxy_hide_header MicrosoftOfficeWebServer;复制代码

1.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;复制代码

1.5 proxy_pass_request_body

语法:proxy_pass_request_body on | off;

默认:proxy_pass_request_body on;

配置块:http、server、location

作用为确定是否向上游服务器发送HTTP包体部分。

1.6 proxy_pass_request_headers

语法:proxy_pass_request_headers on | off;

默认:proxy_pass_request_headers on;

配置块:http、server、location

作用为确定是否转发HTTP头部。

1.7 proxy_redirect

语法:proxy_redirect [ default|off|redirect replacement ];

默认:proxy_redirect default;

配置块:http、server、location

当上游服务器返回的响应是重定向或刷新请求(如HTTP响应码是301或者302)时,proxy_redirect可以重设HTTP头部的location或refresh字段。

例如,如果上游服务器发出的响应是302重定向请求,location字段的URL是:http://localhost:8000/two/some/uri/,那么在下面的配置情况下,实际转发给客户端的location是http://frontend/one/some/uri/。

proxy_redirect http://localhost:8000/two/ http://frontend/one/; 复制代码

这里还可以使用ngx-http-core-module提供的变量来设置新的location字段。例如

proxy_redirect   http://localhost:8000/    http://$host:$server_port/;复制代码

也可以省略replacement参数中的主机名部分,这时会用虚拟主机名称来填充。例如:

proxy_redirect http://localhost:8000/two/ /one/;

使用off参数时,将使location或者refresh字段维持不变。例如:

proxy_redirect off;

使用默认的default参数时,会按照proxy_pass配置项和所属的location配置项重组发往客户端的location头部。例如,下面两种配置效果是一样的:

location /one/ {    proxy_pass       http://upstream:port/two/;    proxy_redirect   default;  }     location /one/ {   proxy_pass       http://upstream:port/two/;   proxy_redirect   http://upstream:port/two/   /one/;  }复制代码

1.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

此配置项表示当向一台上游服务器转发请求出现错误时,继续换一台上游服务器处理这个请求。前面已经说过,上游服务器一旦开始发送应答,Nginx反向代理服务器会立刻把应答包转发给客户端。因此,一旦Nginx开始向客户端发送响应包,之后的过程中若出现错误也是不允许换下一台上游服务器继续处理的。这很好理解,这样才可以更好地保证客户端只收到来自一个上游服务器的应答。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的反向代理模块还提供了很多种配置,如设置连接的超时时间、临时文件如何存储,以及最重要的如何缓存上游服务器响应等功能。这些配置可以通过阅读ngx_http_proxy_module模块的说明了解,只有深入地理解,才能实现一个高性能的反向代理服务器。

上面所讲的就是nginx反向代理的一些基本配置参数说明,如想要仔细了解关于nginx的反向代理相关设置请访问

转载于:https://juejin.im/post/5b601de1e51d4515b01bfbba

你可能感兴趣的文章
写sql语句时将时间格式“20110725”转化为格式2012年07月25日
查看>>
[Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云
查看>>
heartbeat高可用+lvsDR
查看>>
方丈被害子女有没有权利继承遗产?
查看>>
java入门第一季5、6
查看>>
[转载] 闻一多——七子之歌
查看>>
针对tomcat日志乱码问题
查看>>
免费的协作和协同办公软件平台onlyoffice轻松部署
查看>>
WiFi覆盖下的生活 享受便利的同时 别忘记了安全
查看>>
关于ios 8 7 下的模态窗口大小的控制 代碼+場景(mainstoryboard)( Resizing UIModalPresentationFormSheet )...
查看>>
Linux软件包的管理--YUM
查看>>
Axis2发布webservice(1)--0配置发布
查看>>
Java Web笔记 – Servlet中的Filter过滤器的介绍和使用 编写过滤器
查看>>
我奋斗了18年,不是为了和你一起喝咖啡
查看>>
gearman简单介绍
查看>>
《Typecript 入门教程》 3、接口
查看>>
jsp的几种跳转比较
查看>>
用oracle查询当前数据库中的所有表
查看>>
决心书
查看>>
git 从版本控制中删除文件及.gitignore的用法
查看>>