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

Как ответить 200 из Nginx, не обслуживая файл?

Я настроил Apache для отправки ответа 200 без обслуживания какого-либо файла с этой строкой конфигурации

Redirect 200 /hello

Могу ли я сделать это с помощью Nginx? Я не хочу обслуживать файл, я просто хочу, чтобы сервер ответил 200 (я просто регистрирую запрос).

Я знаю, что могу добавить индексный файл и добиться того же, но выполнение этого в конфигурации означает, что на одну вещь меньше, что может пойти не так.

Да, ты можешь

location / {
    return 200 'gangnam style!';
    # because default content-type is application/octet-stream,
    # browser will offer to "save the file"...
    # if you want to see reply in browser, uncomment next line 
    # add_header Content-Type text/plain;
}

Вам действительно нужно использовать 204, поскольку Nginx не разрешит 200 без тела ответа. Чтобы отправить 204, вы просто используете директива возврата к return 204; в соответствующем месте.

Что касается определений кода состояния, я считаю, что вы хотите, чтобы это было 204, а не 200. 200 должны быть с ресурсом в ответе, иначе я бы подозревал, что это сбивает с толку большинство здравомыслящих браузеров. Другой, который вы можете использовать, - 304, он предназначен для кэшированного содержимого.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Чтобы завершить ответ @Martin Fjordval, будьте осторожны, если вы используете такую ​​конфигурацию для проверки работоспособности.

Хотя 204 Код HTTP семантически идеален для проверки работоспособности (индикация успеха без содержимого), некоторые службы делают не Считайте это успехом.

А именно, у меня была проблема с Балансировщики нагрузки Google Cloud.

Если вы хотите вернуть форматированный текст html, без обслуживания файла HTML:

location \ {
    default_type text/html;
    return 200 "<!DOCTYPE html><h2>gangnam style!</h2>\n";
}

Если вы хотите вернуть текст без формата html, как указывает ответ:

location \ {
    add_header Content-Type text/plain;
    return 200 'gangnam style!';
}

А если вы просто хотите вернуть 200:

location \ {
    return 200;
}

Просто запомните: location блоки входят внутрь server блоки. Вот док для получения дополнительной информации.

P.S .: У меня аналогичная конфигурация (форматированный html) работает на множестве серверов.