Назад | Перейти на главную страницу

Настройка сайта nginx, который иначе реагирует на Ajax?

Я пытаюсь настроить автоматическую страницу закрытия сайта для nginx. Пока у меня есть это:

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

    location @myapp {
             ...
    }

Это работает достаточно хорошо: если присутствует файл sitedown.html, он обслуживает его, в противном случае - приложение. Однако я бы хотел по-другому реагировать на запросы Ajax, чтобы они не вызывали ошибок в javascript. Я считаю, что с помощью модуля перезаписи я могу сделать что-то вроде if ($http_x_requested_with = XMLHttpRequest) { но мне непонятно, как это использовать, чтобы делать то, что я хочу.

Я бы хотел, чтобы запросы, которые идут с этим заголовком, возвращали простой ответ JSON, например "sitedown" с соответствующим заголовком кодировки json. Если этого не произойдет, было бы неплохо вернуть 503 код ответа, на который может реагировать javascript.

Если ваше клиентское приложение работает нормально, оно будет устанавливать заголовок Accept: в запросах AJAX, чтобы сервер знал, что ожидается ответ JSON. Вы можете использовать что-то вроде этого:

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