Sau một năm phát triển, một nhánh ổn định mới của máy chủ HTTP hiệu suất cao và máy chủ proxy đa giao thức nginx 1.28.0 đã được xuất bản, kết hợp những thay đổi tích lũy trong nhánh chính 1.27.x. Trong tương lai, mọi thay đổi trong nhánh ổn định 1.28 sẽ liên quan đến việc loại bỏ các lỗi và lỗ hổng nghiêm trọng. Nhánh chính của nginx 1.29 sẽ sớm được hình thành, trong đó việc phát triển các tính năng mới sẽ tiếp tục. Đối với người dùng thông thường không có nhiệm vụ đảm bảo khả năng tương thích với các mô-đun của bên thứ ba, nên sử dụng nhánh chính, trên cơ sở đó các bản phát hành sản phẩm thương mại Nginx Plus được hình thành ba tháng một lần.
Theo báo cáo tháng 245 của Netcraft, có khoảng 243 triệu trang web đang chạy trên nginx (289 triệu vào năm ngoái, 17.89 triệu vào hai năm trước). Nginx được sử dụng trên 18.15% tổng số trang web đang hoạt động (18.94% một năm trước, 16.03% hai năm trước), tương ứng với vị trí đầu tiên về mức độ phổ biến trong danh mục này (thị phần của Apache tương ứng với 20.09% (20.52% một năm trước, 17.81% hai năm trước), Cloudflare - 14.12% (11.32%, 9.89%), Google - 10.41% (9.89%, XNUMX%).
Khi xem xét tất cả các trang web, nginx vẫn duy trì vị trí dẫn đầu và chiếm 20.48% thị trường (một năm trước là 22.31%, hai năm trước - 25.94%), trong khi thị phần của Apache là 16.03% (20.17%, 20.58%), Cloudflare - 12.87% (11.24%, 10.17%), OpenResty (một nền tảng dựa trên nginx và LuaJIT) - 9.36% (7.93%, 7.94%).
Trong số một triệu trang web được truy cập nhiều nhất trên thế giới, nginx đứng thứ hai với thị phần 20.37% (một năm trước là 20.63%, hai năm trước là 21.37%). Cloudflare giữ vị trí đầu tiên với 22.32% (22.59% một năm trước, 21.62% hai năm trước). Tỷ lệ chia sẻ của Apache httpd là 17.95% (20.09%, 21.18%).
Theo W3Techs, nginx được sử dụng trên 33.8% trong số một triệu trang web được truy cập nhiều nhất (vào tháng 34.3 năm ngoái, con số này là 34.5%, năm trước nữa là 30.1%). Thị phần của Apache đã giảm từ 26.3% xuống 5% trong năm, trong khi thị phần của Microsoft IIS giảm từ 4% xuống 3.2%. Thị phần của Node.js tăng từ 4.4% lên 12.9% và thị phần của LiteSpeed tăng từ 14.6% lên XNUMX%.
Những cải tiến đáng chú ý nhất được thêm vào trong quá trình phát triển nhánh ngược dòng 1.27.x:
- Đối với các kết nối sử dụng giao thức QUIC, hỗ trợ đã được thêm vào cho thuật toán kiểm soát tắc nghẽn mạng CUBIC (RFC 9438), hoạt động bằng cách tăng dần kích thước cửa sổ tắc nghẽn cho đến khi xảy ra mất gói tin, sau đó kích thước cửa sổ sẽ được khôi phục về giá trị trước khi mất gói tin. Trong các thử nghiệm được tiến hành, việc sử dụng CUBIC giúp giảm thời gian truyền tệp 500MB xuống 24% với độ trễ 40ms và BDP 750K (Tích độ trễ băng thông) và giảm 73% với độ trễ 100ms và BDP 9M.
- Mô-đun luồng đã thêm hỗ trợ để kiểm tra việc thu hồi chứng chỉ ứng dụng khách bằng OCSP (Giao thức trạng thái chứng chỉ trực tuyến).
- Mô-đun luồng triển khai hỗ trợ cho kỹ thuật kiểm tra thu hồi chứng chỉ OCSP Stapling, bản chất của kỹ thuật này là khi đàm phán kết nối TLS, phản hồi OCSP được cơ quan chứng nhận chứng nhận sẽ được truyền bởi máy chủ phục vụ trang web mà không cần liên hệ trực tiếp với cơ quan chứng nhận).
- Việc lưu vào bộ nhớ đệm được thực hiện trong quá trình khởi động và cập nhật cấu hình. Chứng chỉ SSL, khóa và CRL (Danh sách thu hồi chứng chỉ).
- Đã thêm khả năng giảm mức tiêu thụ tài nguyên và tải CPU khi sử dụng TLS trong cấu hình có nhiều khối máy chủ và vị trí. Những thay đổi được thêm vào cho phép sử dụng ngữ cảnh SSL hiện có từ khối cha thay vì tạo một ngữ cảnh SSL riêng (SSL_CTX trong OpenSSL) cho mỗi khối cấu hình.
- Lệnh "ssl_client_certificate" cung cấp hỗ trợ cho các chứng chỉ có thông tin bổ sung.
- Để xác minh chứng chỉ SSL của máy khách, lệnh "ssl_client_certificate" không còn cần thiết nữa.
- Đã thêm hỗ trợ cho chế độ ĐĂNG NHẬP IMAP dành riêng cho SmarterMail với phản hồi KHẢ NĂNG không được gắn thẻ cho mô-đun ngx_mail_proxy_module.
- Lệnh “proxy_pass_trailers” đã được thêm vào mô-đun ngx_http_proxy_module, cho phép truyền các trường tiêu đề ở cuối phản hồi từ máy chủ proxy đến máy khách.
- Chỉ thị "server" được sử dụng trong khối "upstream" đã được cập nhật để hỗ trợ tham số "resolve", cho phép theo dõi thay đổi. Các địa chỉ IP Đối với tên miền được sử dụng và việc tự động cập nhật cấu hình khối "upstream" mà không cần khởi động lại nginx nếu địa chỉ thay đổi.
- Đã thêm khả năng sử dụng biến trong các chỉ thị "proxy_limit_rate", "fastcgi_limit_rate", "scgi_limit_rate" và "uwsgi_limit_rate".
- Trong các lệnh "proxy_bind", "fastcgi_bind", "grpc_bind", "memcached_bind", "scgi_bind" và "uwsgi_bind", cũng như địa chỉ máy khách trong ngx_http_realip_module, địa chỉ IPv6 trong dấu ngoặc vuông không có số cổng được cho phép.
- Đã thêm chỉ thị "keepalive_min_timeout", chỉ thị này xác định thời gian chờ mà nginx sẽ không đóng kết nối duy trì kết nối với máy khách.
- Theo mặc định, giao thức TLSv1 và TLSv1.1 bị tắt.
- Đã khắc phục sự cố tải tệp cấu hình lâu do phải phân tích cú pháp nhiều lần cùng một tập hợp chứng chỉ TLS, khóa và danh sách cơ quan cấp chứng chỉ. Cải thiện hiệu suất tải lại cấu hình bằng cách sử dụng lại các đối tượng TLS không thay đổi như chứng chỉ, khóa và CRL. Để vô hiệu hóa tính kế thừa của các đối tượng khi cập nhật cấu hình, chỉ thị "ssl_object_cache_inheritable" đã được thêm vào.
- Đã thêm bộ nhớ đệm cho chứng chỉ và khóa được tải bằng các biến trong lệnh (ví dụ: "ssl_certificate /etc/ssl/$ssl_server_name.crt"). Các chỉ thị "ssl_certificate_cache", "proxy_ssl_certificate_cache", "grpc_ssl_certificate_cache" và "uwsgi_ssl_certificate_cache" đã được thêm vào để quản lý bộ đệm. Các chỉ thị được chỉ định cho phép bạn cấu hình kích thước bộ đệm tối đa, thời hạn hiệu lực của bản ghi và thời gian dọn dẹp các bản ghi không sử dụng. Ví dụ: "ssl_certificate_cache max=1000 inactive=20s valid=1m;".
- Giảm mức tiêu thụ bộ nhớ khi xử lý các truy vấn dài hạn trong các cấu hình sử dụng lệnh "gzip", "gunzip", "ssi", "sub_filter" hoặc "grpc_pass".
- Kích thước tối đa của phiên SSL được lưu trong bộ nhớ chia sẻ đã được tăng lên 8192.
- Việc lắp ráp với thư viện Musl C đã được thiết lập.
- Công việc đã được thực hiện để tối ưu hóa hiệu suất và loại bỏ lỗi trong quá trình triển khai HTTP/3.
Ngoài ra, điều đáng chú ý là việc phát hành phiên bản FreeNginx 1.28.0, dự án phát triển nhánh Nginx. Bản fork này đang được phát triển bởi Maxim Dunin, một trong những nhà phát triển chính của Nginx. FreeNginx tự định vị mình là một dự án phi lợi nhuận cung cấp dịch vụ phát triển cơ sở mã Nginx mà không có sự can thiệp của công ty. Trong số những thay đổi cụ thể trong nhánh FreeNginx 1.28:
- Tham số "off" trong chỉ thị "pid" sẽ vô hiệu hóa việc tạo tệp PID.
- Giới hạn cường độ ghi tin nhắn vào nhật ký lỗi để tránh tình trạng nhật ký bị đầy những tin nhắn thông thường.
- Triển khai tham số đa đường dẫn trong chỉ thị listen để hỗ trợ TCP đa đường dẫn.
- Hỗ trợ tiêu đề "Tuổi" của HTTP để xác định thời gian tồn tại của các mục bộ đệm.
- Thêm phương thức xác thực XOAUTH2 và OAUTHBEARER vào mô-đun mail_proxy.
Nguồn: opennet.ru
