Hiểu các giá trị khác nhau cho chỉ thị 'nghe' nginx


10

Tôi đang viết nginx config, và tôi có một câu hỏi cơ bản.

Sự khác biệt giữa:

listen 443 ssl;đấu listen [::]:443 ssl;vớilisten [::]:443 ssl http2;

Mục tiêu của tôi là bảo mật ứng dụng web này, nhưng cũng vẫn tương thích với các khách hàng cũ.

Lưu ý: Tôi hiểu rằng [::]:443phải có ipv6, nhưng nó có bao gồm cả ipv4 trong trường hợp này không? Muốn xóa khái niệm của tôi.

Câu trả lời:


16

listen 443 ssl: làm cho nginx nghe trên tất cả địa chỉ ipv4 trên máy chủ, trên cổng 443 ( 0.0.0.0:443)

trong khi

listen [::]:443 ssl: làm cho nginx nghe trên tất cả địa chỉ ipv6 trên máy chủ, trên cổng 443 ( :::443)


[::]:443sẽ không làm cho nginx phản hồi trên ipv4 theo mặc định, trừ khi bạn chỉ định tham số ipv6only=off:

listen [::]:443 ipv6only=off;


Theo tài liệu: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

Tham số ssl (0.7.14) cho phép chỉ định rằng tất cả các kết nối được chấp nhận trên cổng này sẽ hoạt động ở chế độ SSL.

http2:

Tham số http2 (1.9.5) định cấu hình cổng để chấp nhận kết nối HTTP / 2 .

Điều này không có nghĩa là nó chỉ chấp nhận các kết nối HTTP / 2.

Theo RFC7540

Một khách hàng đưa ra yêu cầu cho URI "http" mà không có kiến ​​thức trước về hỗ trợ HTTP / 2 trong lần nhảy tiếp theo sử dụng cơ chế Nâng cấp HTTP. Máy khách thực hiện điều đó bằng cách thực hiện yêu cầu HTTP / 1.1 bao gồm trường tiêu đề Nâng cấp với mã thông báo "h2c".

Một máy chủ không hỗ trợ HTTP / 2 có thể đáp ứng yêu cầu như thể trường tiêu đề Nâng cấp không có.

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

Một máy chủ hỗ trợ HTTP / 2 chấp nhận nâng cấp với phản hồi 101 (Chuyển đổi giao thức). Sau khi dòng trống kết thúc phản hồi 101, máy chủ có thể bắt đầu gửi các khung HTTP / 2.

Để tóm tắt:

Một máy khách không hỗ trợ HTTP / 2 sẽ không bao giờ yêu cầu máy chủ nâng cấp giao tiếp HTTP / 2: giao tiếp giữa chúng sẽ hoàn toàn là HTTP1 / 1.

Một máy khách hỗ trợ HTTP / 2 sẽ yêu cầu máy chủ (sử dụng HTTP1 / 1) để nâng cấp HTTP / 2:

  • Nếu máy chủ đã sẵn sàng HTTP / 2, thì máy chủ sẽ thông báo cho khách hàng như vậy: giao tiếp giữa chúng sẽ được chuyển sang HTTP / 2.
  • Nếu máy chủ chưa sẵn sàng HTTP / 2, thì máy chủ sẽ bỏ qua yêu cầu nâng cấp trả lời bằng HTTP1 / 1: giao tiếp giữa chúng sẽ giữ nhiều HTTP1 / 1.

Có thể tóm tắt nhiều hơn ở đây: http://qnimate.com/http2-compabilities-with-old-browsers-and-servers/


Tuy nhiên, tài liệu nginx nêu sau đây về HTTP / 2 trên TLS:

Lưu ý rằng việc chấp nhận các kết nối HTTP / 2 qua TLS yêu cầu hỗ trợ mở rộng TLS Giao thức tầng ứng dụng (ALPN), chỉ khả dụng kể từ phiên bản OpenSSL 1.0.2.

Đảm bảo khách hàng cũ tuân thủ yêu cầu này.


0

Có một tùy chọn được gọi là ipv6onlyxác định xem địa chỉ IPv6 có áp dụng cho IPv4 hay không. Theo mặc định, nó được bật (có nghĩa là nó không).

Hướng dẫn sử dụng nói rằng nó chỉ có thể được đặt một lần, mà tôi nghĩ có nghĩa là nếu bạn tắt nó trong một listenchỉ thị, nó sẽ bị tắt cho tất cả.

Xem tài liệu này để biết chi tiết.


Xem bài viết này trên HTTP / 2.
Richard Smith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.