Да, можно
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's должен быть с ресурсом в ответе, или я подозревал бы, что самые нормальные браузеры запутаются этим. Другой, который можно использовать, 304, который является для кэшируемого содержания.
Чтобы завершить ответ @Martin Fjordval, будьте осторожны, если вы: повторно используют такую конфигурацию для проверки работоспособности.
Хотя код HTTP 204
семантически идеален для проверки работоспособности (индикация успеха без содержимого), некоторые службы не его считают успех.
А именно, у меня была проблема с балансировщиками нагрузки 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), работающая на множестве серверов.
Расширение ответа @cadmi для конкретного случая конфигурации контроллера Kubernetes ingress-nginx.
В моем случае я смог добавить только небольшую часть конфигурации Nginx в директиву location
.
Я хотел добавить собственное сообщение об ошибке 404 в формате JSON для определенной директивы if
. Поскольку default_type
не допускается внутри директивы if
, я придумал добавить «пустой» default_type
вне директивы if
и add_header
внутри директивы if
:
http {
default_type text/html; # can't change this
...
server {
...
location / {
...
# This part of configuration is something I can change (generated by ingress-nginx controller `ingress.kubernetes.io/configuration-snippet` annotation)
default_type "";
# Custom 404 JSON page returned for the call to my.specific.host
if ($host = my.specific.host) {
return 404 '{\n "status": "404",\n "message": "Not Found",\n "details": "Please call other hosts."\n}\n';
add_header Content-Type "application/json" always;
}
}
}
}
Без default_type "";
директива add_header
добавляла второй Content-Type Заголовок
вместо изменения заголовка по умолчанию.