四、nginx服务的nginx.conf参数配置解析

前一篇:三、nginx服务的参数配置解析 


目录

1、反向代理的配置

(1)proxy_pass

(2)proxy_redirect

(3) proxy_set_header

(4) proxy_connect_timeout、proxy_read_timeout和proxy_send_timeout 

(5)proxy_buffers、proxy_buffer_size、proxy_busy_buffers_size、proxy_temp_file_write_size和proxy_cache_path 

(6) proxy_method

(7)proxy_hide_header

(8)proxy_pass_header

(9)proxy_pass_request_body

(10)proxy_pass_request_headers

(11)proxy_next_upstream

总结:


1、反向代理的配置

注:nginx服务作为反向代理的配置通常放在单独的配置文件中(proxy.conf),通过include参数来引用的

反向代理的配置主要在location配置模块中进行配置的。

(1)proxy_pass

语法:proxy_pass URL;
配置块:location if

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

例如:

proxy_pass http://localhost:8000/url/;

#也可以是 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;

(2)proxy_redirect

语法:proxy_redirect [ default|off|redirect replacement ];
默认:proxy_redirect default;
配置块:http server location

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

 例如:如果上游服务器发出的响应时 302 重定向请求,location 字段的 URI 是 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_prot/;

也可以省略 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/;
}

(3) proxy_set_header

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

(4) proxy_connect_timeout、proxy_read_timeout和proxy_send_timeout 

#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 60;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 120;
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 20;

(5)proxy_buffers、proxy_buffer_size、proxy_busy_buffers_size、proxy_temp_file_write_size和proxy_cache_path 

#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 32k;
#proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_buffers 4 128k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 256k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 256k;
#1G内存缓冲空间,3天不用删除,最大磁盘缓冲空间2G
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;

(6) proxy_method

此配置项表示转发时的协议方法名

语法:proxy_method method;
配置项:http server location
例如设置为:

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

(7)proxy_hide_header

语法:proxy_hide_header the_header;
配置块:http server location

Nginx 会将上游服务器的响应转发给客户端,但默认不会转发以下 HTTP 头部字段:

Data、Server、

X-Pad 和 X-Accel-*。

使用 proxy_hide_header 后可以任意地指定哪些 HTTP 头部字段不能被转发。例如:

proxy_hide_header Cache-Control;
proxy_hide_header MicrosoftOfficeWebServer;

(8)proxy_pass_header

语法:proxy_pass_header the_header;
配置块:http server location

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

proxy_pass_header X-Accel_Redirect;

(9)proxy_pass_request_body

语法:proxy_pass_request_body on | off;
默认:proxy_pass_request_body on;
配置块:http server location

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

(10)proxy_pass_request_headers

语法:proxy_pass_request_headers on | off;
默认:proxy_pass_request_headers on;
配置块:http server location

作用是:确定是否向上游服务器转发 HTTP 头部。

(11)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

参数说明:
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 反向代理服务器会立刻把应答转发给客户端。因此,一旦 Nginx 开始向客户端发送响应包,之后的过程中若出现错误也是不允许换下一台上游服务器继续处理的。这很好理解,这样才可以更好的保证客户端只收到来自一个上游服务器的应答。proxy_nextt_upstream 的参数用来说明在哪些情况下会继续选择下一台上游服务器转发请求。

 


总结:

Nginx 的反向代理模块还提供了很多种配置,如设置连接的超时时间、临时文件如何存储,以及最重要的如何缓存上游服务器响应等功能。这些配置可以通过阅读 ngx_http_proxy_module 模块的说明了解,只有深入地理解,才能实现一个高性能的方向代理服务器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiang0615csdn

你对鼓励是我最大的动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值