Nginx Stream 模块实现 443 端口复用与流量分发
最近有一些需求需要普通的的 TCP/UDP 与 HTTP 流量共用 443 端口
笔者使用的 Nginx 作为 WEB 服务,其中的 stream 模块可以很好的实现这个功能
首先要检查 Nginx 是否含有 stream 模块:
1 | nginx -V |
输出中需要含有如下内容:
1 | --with-stream=dynamic |
通常来说,最近几年的 nginx 都是涵盖了 stream 模块的,在此就不加以赘述。
本文使用 nginx 进行 443 端口的复用是基于 sni 识别的,443 则被 stream 模块独占了,首先需要将原有的已监听443端口的站点的端口改为其他端口,如 8443 :
1 | listen 8443 ssl; |
接着对 nginx.conf 进行编辑,通常是在 /etc/nginx/nginx.conf
, 直接在 http 前加入 stream 字段:
1 | stream { |
这样即可实现 123 走 TCP 服务,@ 与 www 以及默认的站点都通过 443 走 http 服务
对于强制 https 跳转与平常设置也是没有区别的,只是后续新建的站点 https 端口均不能使用 443:
1 | location / { |
参考链接:https://nginx.org/en/docs/stream/ngx_stream_core_module.html