我正在运行一个 HTTP 服务并希望将nginxSSL 终止放在前面。这可以通过两种方式完成;要么作为stream代理
stream {
server {
listen 443 ssl;
ssl_certificate /certs/fullchain.pem;
ssl_certificate_key /certs/privkey.pem;
proxy_pass ip-for-backend-service:80;
}
}
Run Code Online (Sandbox Code Playgroud)
或作为http代理
http {
server {
listen 443 ssl;
ssl_certificate /certs/fullchain.pem;
ssl_certificate_key /certs/privkey.pem;
location / {
proxy_pass http://ip-for-backend-service:80;
proxy_set_header ...;
}
}
}
Run Code Online (Sandbox Code Playgroud)
乍一看,stream代理的配置似乎要简单得多,因为您不必添加一堆额外的标头(proxy_set_header等)和其他配置。
我试图了解这两种方法之间的优缺点,特别是我有以下问题:
这两种方法是否会泄漏有关后端服务的更多信息?例如,是否ip-for-backend-service可见?
这两种方法都能更好地抵御攻击吗?我想如果后端服务有缺陷,它会通过这两个选项可见/可利用吗?
哪个选项更有效?我认为该stream选项可能会更快,因为它只是路由流量并且中间没有 http 服务器?