33

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

选项 /index.html HTTP/1.0

我正在将 nginx 设置为带有缓存的反向代理(使用 ncache)。出于某种原因,当 OPTIONS 请求进来时,nginx 会返回 405:

192.168.1.10 - - [22/Oct/2008:16:36:21 -0700]“选项/index.html HTTP/1.0”405 325“-”“-”192.168.1.10

直接访问下游网络服务器时,我得到正确的 200 响应。我的问题是:如何让 nginx 将该响应传递给 HAProxy,或者,如何在 nginx.conf 中设置响应?

4

2 回答 2

47

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

首先是欺骗 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;
    }
}

只需选择哪个更适合您。

我在一篇博文中写了这篇文章,您可以在其中找到更多详细信息。

于 2012-02-08T16:14:15.450 回答
1

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

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

您还可以使用 POST 或像 / 这样的普通 URI。我让它检查 PHP,因为 PHP 在 Nginx 外部运行。

于 2011-01-11T21:27:12.383 回答