设置 nginx 站点是否会对 Ajax 做出不同的响应?

设置 nginx 站点是否会对 Ajax 做出不同的响应?

我正在尝试为 nginx 设置自动站点关闭页面。到目前为止,我有以下内容:

    location / {
             try_files /sitedown.html @myapp;
    }

    location @myapp {
             ...
    }

效果很好:如果 sitedown.html 存在,它就为它提供服务,否则它就为应用程序提供服务。但是,我想做的是对 Ajax 请求做出不同的响应,这样它们就不会使 javascript 出错。我相信,使用重写模块,我可以做类似的事情,if ($http_x_requested_with = XMLHttpRequest) {但我不清楚如何使用它来做我想做的事情。

我希望带有该标头的请求返回一个简单的 JSON 响应,就像"sitedown"带有适当的 JSON 编码标头一样。除此之外,最好返回503javascript 可以响应的响应代码。

答案1

如果您的客户端应用程序运行良好,它将在 AJAX 请求中设置 Accept: 标头,以便服务器知道需要 JSON 响应。您可以使用类似这样的方法:

location / {
    set $downfile sitedown.html;
    if ($http_accept ~* application/json) {
        set $downfile sitedown.js;
    }
    try_files $downfile @myapp;
}

相关内容