一次说清-Nginx反向代理及参数配置
我们在配置服务时常常会用到Nginx来设置反向代理,虽然常用,但是我们真的了解各个参数的意思吗?
不如我们一起来看下吧。
1、反向代理
反向代理(reverse proxy)方式是指用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外表现局势一个web服务器。
2、Nginx反向代理
Nginx的反向代理,当用户发送一个HTTP请求时,Nginx不会立刻转发到上游服务器,而是先把用户的请求(包括HTTP包体)完整地接收到Nginx所在的服务器的磁盘或内存中,然后再向上游服务器发起连接,把缓存的客户端请求转发到上游服务器。
优点:降低上游服务器的负载,尽量把压力放在Nginx服务器上
缺点:延长了一个请求的处理时间,并增加了用于缓存请求内容的内存和磁盘空间。
3、负载均衡的基本配置
3.1 upstream
语法:upstream name{......};
配置块:http
upstream块定义了一个上游服务器的集群,便于反向代理中的proxy_pass使用。
ini
复制代码
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { location / { proxy_pass http://backend; } }
3.2 server
语法:server name[parameters];
配置块:upstream
server指定一台上游服务器的名字,该名字可以是域名、ip地址端口、UNIX句柄等,后面可跟参数:
.weight=number
:设置向这台上游服务器转发的权重,默认是1。
.max_fails=number
:该选项与fail_timeout配合使用,指在fail_timeout时间段内,如果向当前的上游服务器转发失败次数超过number,则认为在当前的fail_timeout时间段内这台上游服务器不可用。max_fail默认为1,如果设置为0,表示不检查失败次数。
.fail_timeout=time
:fail_timeout表示该时间段内转发失败多少次后认为上游服务器暂时不可用,用于优化反向代理功能。它与向上游服务器建立连接的超时时间、读取上游服务器的响应超时时间等完全无关。默认为10s。
.down
:表示所有的上游服务器永久下线,只在使用ip_hash配置项时才有用。
.backup
:在使用ip_hash配置项时它是无效的。表示所在的上游服务器只是备份服务器,只有在所有的非备份上游服务器都失效后,才会向所在的上游服务器转发请求。
ini
复制代码
upstream backend { server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; }
3.3 ip_hash
语法:ip_hash;
配置块:upstream
ip_hash是某个用户的请求始终落在固定的一台上游服务器上。它根据用户端的ip计算出一个key,将key按照upstream集群里的上游服务器数量进行取模,然后以取模后的结果把请求转发到相应的上游服务器中,这样确保了同一个客户端的请求只会转发到指定的上游服务器中。
ip_hash与weight(权重)配置不可同时使用。如果upstream中一台服务器不能使用时,不能直接删除,而是使用down标识,来确保转发策略的一惯性。
ini
复制代码
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; server backend4.example.com; }
4、反向代理的基本配置
1、proxy_pass
语法:proxy_pass URL;
配置块:location、if
将当前请求反向代理到URL参数指定的服务器上,URL可以是主机名或IP地址+端口。
bash
复制代码
location / { proxy_pass http://localhost:8000/uri }
默认情况下反向代理是不会转发请求中的Host头部的,如需转发需加上配置:proxy_set_header Host $host;
2、proxy_method
语法:proxy_method [GET/POST/DELETE/UPDATE/......];
配置块:http、server、location
表示转发时的协议方法名。
ini
复制代码
proxy_method POST;
3、proxy_hide_header
语法:proxy_hide_header the_header;
配置块:http、server、location
Nginx将上游服务器的响应转发给客户端,但默认不会转发:Date、Server、X-Pad和X-Accel-*。使用proxy_hide_header后可以任意地指定哪些HTTP头部字段不能被转发。
4、proxy_pass_header
语法:proxy_pass_header the_header
配置块:http、server、location
与proxy_hide_header功能相反,将原来禁止转发的header设置为允许转发。
5、proxy_pass_request_body
语法:proxy_pass_requst_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
当上游服务器返回的响应是重定向或刷新(如301或302)请求时,proxy_redirect可以重设http头部的location或refresh字段。
bash
复制代码
proxy_redirect http://localhost:8000/two/ http://frontendone;
上述代码如果上游服务器返回302,location字段的URL是http://localhost:8000/two/some/uri/ 转发给客户端的location就是:http://frontendonesome/uri/
.replacement
:可以省略replacement参数中的主机名部分,此时会用虚拟主机名称
来填充。
.off
:将使location或refresh字段维持不变。
.default
:按照proxy_pass配置项和所属的location配置项重组发往客户端的location头部。
bash
复制代码
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; }
上述两种配置效果一样。
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
:上游服务器返回的响应码是500。
.http_502
:上游服务器返回的响应码是502。
.http_503
:上游服务器返回的响应码是503。
.http_504
:上游服务器返回的响应码是504。
·http_404
:上游服务器返回的HTTP响应码是404。
.off
:关闭proxy_next_upstream功能-出错就选择另一台上游服务器再次转发。
上述就是我整理的一些Nginx反向代理的参数信息,希望对大家有所帮助,谢谢。
作者:抢老婆酸奶的小肥仔
链接:https://juejin.cn/post/723840167104587372
来源地址:https://blog.csdn.net/BASK2311/article/details/130944085
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341