Вопрос: Ответить с 200 из Nginx config без обслуживания файла


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

Redirect 200 /hello

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

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


85
2017-11-01 14:54


Источник




Ответы:


Да, ты можешь

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;
}

176
2018-03-27 14:05



как добавить новую строку в ответ? gangnam\nstyle? - tback
@tback, конечно, вы правы - cadmi
Просто добавьте новую строку! Директивы конфигурации Nginx не привязаны к одиночным линиям, они заканчиваются точкой с запятой. - Emil Vikström
add_header не работает для меня, поскольку он добавляет другой заголовок вместо замены старого «Content-type». В моем ответе у меня есть 2 заголовка Content-type: $ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> User-Agent: curl / 7.38.0> Host: localhost> Accept: / > <HTTP / 1.1 200 OK <Date: Tue, 11 Oct 2016 13:27:53 GMT <Content-Type: application / octet-stream <Content-Length: 25 <Connection: keep-alive <Content-Type: application / JSON - jmcollin92
@ jmcollin92, который может произойти, если у вас есть существующий default_type, объявленный где-то еще. Вы можете переопределить его, используя default_type text/plain; внутри блока местоположения вместо add_header директивы. - tjb1982


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


17
2017-11-02 11:52





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

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


2
2017-11-01 15:39



Конечно, сделайте это 204, как мне это сделать? Хотя я очень сомневаюсь, что любой браузер будет смущен пустым телом. - Theo
пустое тело по-прежнему является ответом, с объектом, таким как пустой index.html. То, что вы попросили, должно дать ответ 200 без привязанного к нему ресурса (файл не подан). Что касается того, как именно это делать на nginx, мне нужно самому это выяснить, я только один раз сделал это на apache, и я не могу вспомнить это. - sandroid
304 похоже, что он отправит все неправильные сигналы для таких вещей, как отладка и временные возвращения. - Kzqai