在nginx中处理OPTIONS请求

时间:2008-10-22 23:42:20

标签: http nginx haproxy http-options-method

我们目前正在使用HAProxy作为负载均衡器,它会定期向下游框发出请求,以确保它们使用OPTIONS请求存活:

  

OPTIONS /index.html HTTP / 1.0

我正在使用缓存(使用ncache)将nginx设置为反向代理。出于某种原因,当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中设置响应?

2 个答案:

答案 0 :(得分:32)

我可能迟到了,但我遇到了同样的问题,并找到了两个解决方案。

首先是欺骗Nginx,405状态实际上是200 OK,然后将它代理传递给你的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写了这个,你可以在那里找到更多细节。

答案 1 :(得分:1)

在httpchk选项中,您可以像这样指定HTTP方法:

httpchk GET http://example.com/check.php

你也可以使用POST,或者像/那样的普通URI。我检查PHP,因为PHP在Nginx外部运行。