Ответ с 200 от Nginx конфигурируется, не обслуживая файл

Попробуйте Comodo. Мы использовали его в течение многих лет как Торговый посредник. Это является разумным, но не самым дешевым. Никакие проблемы до сих пор.

128
задан 1 November 2010 в 16:54
6 ответов

Да, можно

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;
}
273
ответ дан 28 November 2019 в 19:18

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

20
ответ дан 28 November 2019 в 19:18

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

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

4
ответ дан 28 November 2019 в 19:18

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

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

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

2
ответ дан 28 November 2019 в 19:18

Если вы хотите вернуть текст в формате 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), работающая на множестве серверов.

18
ответ дан 1 July 2020 в 16:22

Расширение ответа @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 Заголовок вместо изменения заголовка по умолчанию.

2
ответ дан 11 May 2021 в 10:22

Теги

Похожие вопросы