Розуміння різних значень для nginx директиви «прослуховування»


10

Я пишу nginx config, і у мене є принципове питання.

Чим відрізняються:

listen 443 ssl;проти listen [::]:443 ssl;vslisten [::]:443 ssl http2;

Моя мета - захистити цей веб-додаток, але також залишатися сумісним для старих клієнтів.

Примітка: Я розумію, що [::]:443це стосується ipv6, але чи охоплює він ipv4 і в цьому випадку? Хочете очистити мої концепції.

Відповіді:


16

listen 443 ssl: змушує nginx слухати всі адреси ipv4 на сервері, на порту 443 ( 0.0.0.0:443)

поки

listen [::]:443 ssl: змушує nginx слухати всі адреси ipv6 на сервері, на порт 443 ( :::443)


[::]:443не змусить nginx відповідати на ipv4 за замовчуванням, якщо не вказати параметр ipv6only=off:

listen [::]:443 ipv6only=off;


Відповідно до документа: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

Параметр ssl (0.7.14) дозволяє вказати, що всі з'єднання, прийняті на цьому порту, повинні працювати в режимі SSL.

http2:

Параметр http2 (1.9.5) налаштовує порт для прийому HTTP / 2 з'єднань.

Це не означає, що він приймає лише HTTP / 2 з'єднання.

Відповідно до RFC7540

Клієнт, який робить запит на URI "http" без попереднього знання про підтримку HTTP / 2 на наступному стрибку, використовує механізм оновлення HTTP. Клієнт робить це, роблячи запит HTTP / 1.1, який включає поле заголовка Оновлення з маркером "h2c".

Сервер, який не підтримує HTTP / 2, може відповісти на запит так, як ніби поле заголовка Оновлення відсутнє.

HTTP/1.1 200 OK Content-Length: 243 Content-Type: text/html

Сервер, що підтримує HTTP / 2, приймає оновлення у відповідь 101 (протокол комутації). Після порожнього рядка, який завершує 101 відповідь, сервер може почати надсилати HTTP / 2 кадри.

Узагальнити :

Клієнт, який не підтримує HTTP / 2, ніколи не запитає сервер на оновлення зв'язку HTTP / 2: зв'язок між ними буде повністю HTTP1 / 1.

Клієнт, який підтримує HTTP / 2, попросить сервер (використовуючи HTTP1 / 1) для оновлення HTTP / 2:

  • Якщо сервер готовий до HTTP / 2, то сервер помітить клієнта як такого: зв'язок між ними переключиться на HTTP / 2.
  • Якщо сервер не готовий до HTTP / 2, сервер ігнорує запит на оновлення, відповідаючи на HTTP1 / 1: зв'язок між ними повинен залишатися достатньо HTTP1 / 1.

Можливо, більш резюме тут: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


Однак nginx doc говорить про HTTP / 2 над TLS:

Зауважте, що для прийняття HTTP / 2 з'єднань через TLS потрібна підтримка розширення TLS "Протокол додатків рівня протоколу" (ALPN), яка доступна лише з OpenSSL версії 1.0.2.

Переконайтеся, що старі клієнти відповідають цій вимозі.


0

Існує опція, ipv6onlyяка називається, визначає, застосовується чи ні IPv6 адреса до IPv4. За замовчуванням він увімкнено (це означає, що це не так).

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

Докладніше див. У цьому документі .


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