nginx(七十六)nginx与HTTP请求行的深入探讨

一   nginx与请求行相关

nginx处理来自客户端的HTTP请求行和请求头

①  关于请求行变量

   

$request= '$request_method' SP '$request_uri' SP '$server_protocol'

++++++++++++++ "案例讲解" ++++++++++++++

  

说明: '请求行'中更多变量'细节',可以和'if'、'map'结合,更'细粒度'的控制

②  nginx作为服务端接收关于method控制

1) 请求方法和'支持的协议版本'包含如下:  -->'协议协商导致的'

 [1] GET、HEAD、POST 它们都支持HTTP'1.0/1.1'

 [2] PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH 它们'只支持HTTP1.1'

2) ngx_http_core_module.c看nginx支持'哪些method'

说明:'没有'限制,默认'全支持',与'RFC HTTP'协议跟随

limit_except

3) 案例: 限制'除了'GET HEAD POST'外'的所有'谓词(method)' --> 只'允许'GET HEAD POST

limit_except GET POST {
    deny  all;
}

4) if和$request_method的'结合'限制'请求'方法 --> "作用域更广"

if ($request_method !~* 'GET|POST|HEAD|PUT|OPTIONS') {
         return 404;
}

 301、302、307、308重定向

5) '302|302'重定向导致非'GET'请求变成'GET'请求,并且'request_body'丢失

   推荐使用:'307临时'、'308永久'

③  nginx作为反向代理转发proxy相关的请求行

修改发往上游的请求

1) proxy_method        --> 改变作为'反向代理角色nginx'的转发'请求'方法

细节点: 
  
  [1]、由于'http/1.0'只支持'GET、POST'请求方法

  [2]、如需要将'origin_method'需要转换为'其它方法',需要配置'proxy_http_version 1.1'

proxy_method

2) 通过'location、proxy_pass、rewrite'改变作为'反向代理角色nginx'转发'request_uri'

注意点:

  [1]、如果带proxy_pass带'attach_url',nginx会'解码后'进行透传,而不是'编码'原样透传

  [2]、通过rewrite的'?'可以进行'args'参数调整

proxy_pass  rewrite

​3) proxy_http_version  --> 改变作为'反向代理角色nginx'的转发'请求'协议

4) proxy_next_upstream non_idempotent --> 关于'幂等请求方法'的

解释: 为什么默认'GET'请求会'重试与上游另外服务器'建立连接,'POST'不会

proxy_next_upstream 

  

proxy_cache_methods

proxy_cache_key

proxy_cache_convert_head 

+++++++++++++++ "以下与缓存相关的" +++++++++++++++

1) proxy_cache_methods --> 哪些请求方法的响应'会被缓存'

2) proxy_cache_key     --> 默认'没有指明'请求方法,所以不同请求方法都'命中' 'GET|HEAD'

3) proxy_cache_convert_head on

解读: 会将'HEAD请求'变成GET请求,并且缓存的是GET的response,而'不是'HEAD的response

补充: 这个配置'默认开启',即默认情况下会启用'HEAD方法转换为GET方法'进行缓存

④  跨域涉及请求方法

预检请求是'浏览器'行为,所以F12可以直接看到,Chrome浏览器中type为'preflight'

nginx 跨域踩坑及解决--OPTIONS请求处理

OPTIONS方法细讲

nginx源码分析  nginx子请求的源码分析

⑤  题外话

lvs配置persistence_timeout 参数导致lvs的rr负载不生效,负载不均衡

nginx官网配置websocket

CDN开启回源跟随导致301跳转地址栏没有发生变化 -->没有返回预期的Location

nginx使用keepalive复用tcp连接,提升性能

漫谈获取客户端真实ip

nginx运维开发宝典

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值