基于SNI的Nginx代理无需解密

我正在使用以下(简化)configuration通过同一个端口代理http和https连接(aws elastic beanstalk所要求的):

server { listen 777 ssl; server_name foo.com; ssl_certificate /etc/nginx/ssl/foo.crt; ssl_certificate_key /etc/nginx/ssl/foo; root /usr/share/nginx/www; index index.html index.htm; error_page 418 = @upstream; error_page 497 = @upstream; location / { return 418; } location @upstream { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } } 

我想将上游更改为uwsgi,并让uwsgi处理ssl,因为这会简化部署。

我怎样才能调整我的configuration工作SNI HTTPS和HTTP没有Nginx解密sslstream量?

,你不能用Nginx做。 默认情况下,Nginx始终解密内容,所以Nginx可以应用请求路由。 一些可以尝试的解决scheme:

  • 有第三方模块叫做nginx_tcp_proxy_module 。 我还没有尝试过。 由于该模块在networking层进行代理,因此会传递请求而不解密。

  • 首选的解决scheme是使用HAProxy。 本教程build议您可以使用SNIfunction执行TCP代理。


边注

默认情况下,Nginx始终充当代理上的SSL卸载/解密过程。 这里有一些做SSL卸载的优点(取自这里 )

  • 改进的性能
  • 更好地利用后端服务器
  • 智能路由
  • 证书pipe理
  • 安全补丁