Відповідь з 200 від конфігурації Nginx, не подаючи файл


122

Я налаштував Apache надіслати відповідь 200, не обслуговуючи жодного файлу з цієї лінії конфігурації

Redirect 200 /hello

Чи можу я це зробити за допомогою Nginx? Я не хочу подавати файл, я просто хочу, щоб сервер відповів знаком 200 (я просто реєструю запит).

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

Відповіді:


261

Так, ти можеш

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

1
як додати нову лінію до відповіді? gangnam\nstyle?
tback

1
@tback звичайно, правда ти
cadmi

4
add_header не працює для мене, оскільки він додає інший заголовок замість того, щоб замінити старий "Тип вмісту". У своїй відповіді у мене є 2 заголовки "Тип вмісту": $ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> Користувач-агент: curl / 7.38.0> Хост: localhost> Прийняти: / > <HTTP / 1.1 200 ОК <Дата: Вт, 11 жовтня 2016 13:27:53 GMT <Тип вмісту: додаток / октет-потік <Довжина вмісту: 25 <З'єднання: зберегти живий <Тип вмісту: application / json
jmcollin92

1
@ jmcollin92 ваш коментар не має нічого спільного з запитанням, на яке було задано відповідь. тому що у вас, очевидно, є якийсь проксі_pass, fascgi_pass, що б там не було ... але я все одно відповідаю на розташування / healthcheck / h1_pio {# proxy_pass blablabla, що вам потрібно; тип вмісту proxy_hide_header; додаток add_header Content-Type / json; } в майбутньому задайте своє питання правильно та в потрібному місці
cadmi

6
@ jmcollin92, що може статися, якщо у вас є декларований де-небудь інший існуючий тип_замовчання Ви можете змінити його за допомогою default_type text/plain;внутрішньої частини блоку розташування замість add_headerдирективи.
tjb1982

20

Вам потрібно використовувати 204, оскільки Nginx не дозволить 200 без тіла відповіді. Щоб надіслати номер 204, ви просто використовуєте директиву повернення до return 204;відповідного місця.


Якщо ви спробуєте переглянути це через браузер, то виглядатиме так, що нічого не зробило. це навмисно. Ви нічого не служили (204), нічого не показує. Для того, щоб довести , що ви служили 204, використання curl.
jnovack

4

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

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


Звичайно, зробіть це 204, як це зробити? Хоча я дуже сумніваюся, будь-який браузер буде заплутаний порожнім корпусом.
Тео

1
порожнє тіло - це все ще відповідь, з об'єктом, таким як порожній index.html. Те, що ви попросили, - надати відповідь 200, не додаючи до неї жодного ресурсу (файл не подається). Що стосується того, як саме це зробити на nginx, мені потрібно шукати це сам, я лише один раз робив це на apache, і я не можу згадати з себе.
сандроїд

304, схоже, він би надсилав усі неправильні сигнали для таких речей, як налагодження та тимчасові повернення.
Kzqai

2

Щоб виконати відповідь @Martin Fjordval, будьте обережні, якщо ви використовуєте таку конфігурацію, щоб зробити перевірку здоров'я.

Хоча 204код HTTP семантично ідеально підходить для перевірки здоров’я (показник успіху без вмісту), деякі служби не вважають це успіхом.

А саме, у мене виникла проблема з балансувальниками Google Cloud Load .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.