提问人:Simone Giacco 提问时间:11/8/2023 更新时间:11/8/2023 访问量:32
Nginx ssl 终止和ssl_preread
Nginx ssl termination and ssl_preread
问:
我正在尝试使用 nginx 反向代理 xmpp 和 http 连接,具有相同的端口、相同的 ip、相同的服务器名称,以便:
- 与 https://example.com:443/ 的 HTTP 连接代理到 localhost:8080
- 与 example.com:443 的 XMPP 连接代理到 localhost:5222
如果我不启用SSL终止,这将可以完美地工作。
该逻辑通过利用 和 变量来工作,但是当我启用 ssl 终止时,变量始终为空。ssl_preread
ssl_preread_alpn_protocols
ssl_preread_*
换言之:
listen 443 ssl;
有效,因为 XMPP 调用和 HTTP 调用之间不同ssl_preread_alpn_protocols
listen 443 ssl;
不起作用,因为总是空的ssl_preread_alpn_protocols
以下是配置的摘要:
stream {
map $ssl_preread_alpn_protocols $upstream_by_alpn {
"" xmpp;
~xmpp xmpp;
default http;
}
upstream xmpp {
server 127.0.0.1:5222;
}
upstream http {
server 127.0.0.1:8443;
}
server {
listen 443 ssl; #listen 443; works / listen 443 ssl; does not work
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
proxy_pass $upstream_by_alpn;
ssl_preread on;
}
}
http {
server {
server_name example.com;
listen 8443;
location / {
proxy_pass http://127.0.0.1:8080/;
}
}
}
问题:
- 有没有办法在应用指令时使变量工作?
ssl_preread_*
ssl
- 有没有更好的方法来识别 http 和非 http 请求?
- 有没有更好的方法来代理传递 http 和 xmpp 并启用 ssl 卸载并保持相同的服务器、ip 和端口?
PS:我知道通过使用不同的端口或域,我不会遇到这样的问题,但现在这不是一个选择。
尝试使用 ssl_preread_protocol、ssl_preread_alpn_protocols ssl_preread_server_name,但当启用 ssl 终止时,它始终为空。
尝试使用$protocol,但它始终是 TCP
答: 暂无答案
评论