在 nginx 中处理 OPTIONS 请求
Posted
技术标签:
【中文标题】在 nginx 中处理 OPTIONS 请求【英文标题】:Handling OPTIONS request in nginx 【发布时间】:2010-09-18 16:21:37 【问题描述】:我们目前使用 HAProxy 作为负载平衡器,它会定期向下游框发出请求,以确保它们使用 OPTIONS 请求处于活动状态:
选项 /index.html HTTP/1.0
我正在将 nginx 设置为带有缓存的反向代理(使用 ncache)。出于某种原因,当 OPTIONS 请求进入时,nginx 会返回 405:
192.168.1.10 - - [22/Oct/2008:16:36:21 -0700] "OPTIONS /index.html HTTP/1.0" 405 325 "-" "-" 192.168.1.10
当直接访问下游网络服务器时,我得到了正确的 200 响应。我的问题是:如何让 nginx 将该响应传递给 HAProxy,或者如何在 nginx.conf 中设置响应?
【问题讨论】:
这个模块是否可用? 【参考方案1】:我可能迟到了,但我遇到了同样的问题,并找到了两种解决方案。
首先欺骗 Nginx 405 状态实际上是 200 OK,然后像这样将它 proxy_pass 到您的 HAProxy:
error_page 405 =200 @405;
location @405
root /;
proxy_pass http://yourproxy:8080;
第二种解决方案只是捕获 OPTIONS 请求并为这些请求构建响应:
location /
if ($request_method = OPTIONS )
add_header Content-Length 0;
add_header Content-Type text/plain;
return 200;
只需选择更适合您的。
我在blog post 中写了这篇文章,您可以在其中找到更多详细信息。
【讨论】:
假设您已经设置了proxy_pass
- 是否有原因为什么 nginx 不只是转发 OPTIONS 请求而不必执行第一个技巧?基本上是一种表达方式'不要像我已经说过的那样解释HTTP动词只是转发它'【参考方案2】:
在 httpchk 选项中,您可以像这样指定 HTTP 方法:
httpchk GET http://example.com/check.php
您也可以使用 POST 或像 / 这样的普通 URI。我让它检查 PHP,因为 PHP 在 Nginx 外部运行。
【讨论】:
以上是关于在 nginx 中处理 OPTIONS 请求的主要内容,如果未能解决你的问题,请参考以下文章
Axios 中的 Cors OPTIONS 方法在 Laravel 和 Nginx 中失败