IT评测·应用市场-qidao123.com
标题:
nginx配置在一个端口下,同时支持http与https两种协议
[打印本页]
作者:
九天猎人
时间:
2025-3-17 15:50
标题:
nginx配置在一个端口下,同时支持http与https两种协议
Nginx
不支持
在
同一个端口
同时提供 HTTP 和 HTTPS 服务,缘故原由如下:
HTTP
和
HTTPS
利用的是差别的协议,HTTPS 需要
TLS 握手
,而 HTTP 不需要。
Nginx
无法在同一个端口上自动区分 HTTP 和 HTTPS
。
解决方案
虽然 Nginx 自己不支持 HTTP 和 HTTPS 共享同一端口,但你可以利用
SSL 预读(SSL Preread)
技能,通过 Nginx 的 stream 模块在
同一端口
上区分 HTTP 和 HTTPS 流量。
配置方式:利用 stream 模块监听 443 端口并区分 HTTP/HTTPS
# 在 http 之外的全局配置中
stream {
map $ssl_preread_protocol $name {
"" http_backend; # 没有 TLS 的是 HTTP
default https_backend; # 有 TLS 的是 HTTPS
}
upstream http_backend {
server 127.0.0.1:8080; # HTTP 服务器
}
upstream https_backend {
server 127.0.0.1:8443; # HTTPS 服务器
}
server {
listen 443;
proxy_pass $name;
ssl_preread on;
}
}
http {
server {
listen 8080;
server_name yourdomain.com;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
server {
listen 8443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
}
复制代码
工作原理
stream 监听 443 端口
利用 ssl_preread 读取数据流,判断是否是 HTTPS(即是否有 TLS 握手)。
假如是
HTTP
,转发到 http_backend(127.0.0.1:8080)。
假如是
HTTPS
,转发到 https_backend(127.0.0.1:8443)。
http {} 配置 HTTP 和 HTTPS
server 监听 8080 端口处理 HTTP。
server 监听 8443 端口处理 HTTPS。
最终结果
访问 http://yourdomain.com:443:会自动转发到 8080 端口的 HTTP 服务器。
访问 https://yourdomain.com:443:会自动转发到 8443 端口的 HTTPS 服务器。
这样,你就能在
一个端口(443)
上同时支持 HTTP 和 HTTPS 访问!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4