介绍
- 安装 Nginx
- 从源码构建 Nginx
- 初学者指南
- 控制 nginx
- 连接处理方式
- 设置哈希
- 调试日志
- 记录日志到 syslog
- 配置文件度量单位
- 命令行参数
- Windows 下的 nginx
- QUIC 和 HTTP/3 支持
- nginx 如何处理请求
- 服务器名称
- 使用 nginx 作为 HTTP 负载均衡器
- 配置 HTTPS 服务器
- UDP 会话
- 关于 nginScript
其他
How-To
开发
模块参考
- 核心功能
- HTTP
- ngx_http_core_module
- ngx_http_access_module
- ngx_http_addition_module
- ngx_http_auth_basic_module
- ngx_http_auth_jwt_module
- ngx_http_auth_request_module
- ngx_http_autoindex_module
- ngx_http_browser_module
- ngx_http_charset_module
- ngx_http_dav_module
- ngx_http_empty_gif_module
- ngx_http_f4f_module
- ngx_http_fastcgi_module
- ngx_http_flv_module
- ngx_http_geo_module
- ngx_http_geoip_module
- ngx_http_grpc_module
- ngx_http_gunzip_module
- ngx_http_gzip_module
- ngx_http_gzip_static_module
- ngx_http_headers_module
- ngx_http_hls_module
- ngx_http_image_filter_module
- ngx_http_index_module
- ngx_http_js_module
- ngx_http_keyval_module
- ngx_http_limit_conn_module
- ngx_http_limit_req_module
- ngx_http_log_module
- ngx_http_map_module
- ngx_http_memcached_module
- ngx_http_mirror_module
- ngx_http_mp4_module
- ngx_http_perl_module
- ngx_http_proxy_module
- ngx_http_random_index_module
- ngx_http_realip_module
- ngx_http_referer_module
- ngx_http_rewrite_module
- ngx_http_scgi_module
- ngx_http_secure_link_module
- ngx_http_session_log_module
- ngx_http_slice_module
- ngx_http_spdy_module(过时)
- ngx_http_split_clients_module
- ngx_http_ssi_module
- ngx_http_ssl_module
- ngx_http_status_module(过时)
- ngx_http_stub_status_module
- ngx_http_sub_module
- ngx_http_upstream_module
- ngx_http_upstream_conf_module
- ngx_http_upstream_hc_module
- ngx_http_userid_module
- ngx_http_uwsgi_module
- ngx_http_v2_module
- ngx_http_xslt_module
- Stream
- ngx_stream_core_module
- ngx_stream_access_module
- ngx_stream_geo_module
- ngx_stream_geoip_module
- ngx_stream_js_module
- ngx_stream_keyval_module
- ngx_stream_limit_conn_module
- ngx_stream_log_module
- ngx_stream_map_module
- ngx_stream_proxy_module
- ngx_stream_realip_module
- ngx_stream_return_module
- ngx_stream_split_clients_module
- ngx_stream_ssl_module
- ngx_stream_ssl_preread_module
- ngx_stream_upstream_module
- ngx_stream_upstream_hc_module
- ngx_stream_zone_sync_module
- 其他
- ngx_http_api_module
QUIC 和 HTTP/3 支持
从1.25.0后,对 QUIC 和 HTTP/3 协议的支持可用。同时,1.25.0之后,QUIC 和 HTTP/3 支持在Linux二进制包 (binary package)中可用。
QUIC 和 HTTP/3 支持是实验性的,请谨慎使用。
从源码构建
使用configure
命令配置构建。请参考从源码构建 nginx 以获得更多细节。
当配置nginx时,可以使用 --with-http_v3_module
配置参数来启用 QUIC 和 HTTP/3。
构建nginx时建议使用支持 QUIC 的 SSL 库,例如 BoringSSL,LibreSSL,或者 QuicTLS。否则,将使用不支持早期数据的OpenSSL兼容层。
使用以下命令为 nginx 配置 BoringSSL:
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../boringssl/include"
--with-ld-opt="-L../boringssl/build/ssl
-L../boringssl/build/crypto"
或者,可以使用 QuicTLS 配置 nginx:
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../quictls/build/include"
--with-ld-opt="-L../quictls/build/lib"
或者,可以使用现代版本的 LibreSSL 配置 nginx:
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../libressl/build/include"
--with-ld-opt="-L../libressl/build/lib"
配置完成后,使用 make
编译和安装 nginx。
配置
ngx_http_core_module 模块中的 listen
指令获得了一个新参数 quic
,它在指定端口上通过启用 HTTP/3 over QUIC。
除了 quic
参数外,还可以指定 reuseport
参数,使其在多个工作线程中正常工作。
有关指令列表,请参阅 ngx_http_v3_module。
要启用地址验证:
quic_retry on;
要启用 0-RTT:
ssl_early_data on;
要启用 GSO (Generic Segmentation Offloading):
quic_gso on;
为多个 token 设置 host key:
quic_host_key <filename>;
QUIC 需要 TLSv1.3 协议版本,该版本在 ssl_protocols
指令中默认启用。
默认情况下,GSO Linux 特定优化处于禁用状态。如果相应的网络接口配置为支持 GSO,请启用它。
配置示例
http {
log_format quic '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http3"';
access_log logs/access.log quic;
server {
# for better compatibility it's recommended
# to use the same port for quic and https
listen 8443 quic reuseport;
listen 8443 ssl;
ssl_certificate certs/example.com.crt;
ssl_certificate_key certs/example.com.key;
location / {
# required for browsers to direct them to quic port
add_header Alt-Svc 'h3=":8443"; ma=86400';
}
}
}
故障排除
一些可能有助于识别问题的提示:
- 确保 nginx 是使用正确的 SSL 库构建的。
- 确保 nginx 在运行时使用正确的 SSL 库(
nginx -V
显示当前使用的内容)。 - 确保客户端实际通过 QUIC 发送请求。建议从简单的控制台客户端(如 ngtcp2)开始,以确保服务器配置正确,然后再尝试使用可能对证书非常挑剔的真实浏览器。
- 使用调试支持构建nginx并检查调试日志。它应包含有关连接及其失败原因的所有详细信息。所有相关消息都包含“
quic
”前缀,可以轻松过滤掉。 - 为了进行更深入的调查,可以使用以下宏启用其他调试:
NGX_QUIC_DEBUG_PACKETS, NGX_QUIC_DEBUG_FRAMES, NGX_QUIC_DEBUG_ALLOC, NGX_QUIC_DEBUG_CRYPTO
。./configure --with-http_v3_module --with-debug --with-cc-opt="-DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_CRYPTO"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论