一 nginx与请求行相关
nginx处理来自客户端的HTTP请求行和请求头
① 关于请求行的变量
$request= '$request_method' SP '$request_uri' SP '$server_protocol'
++++++++++++++ "案例讲解" ++++++++++++++
② 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'的转发'请求'方法
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运维开发宝典