开发者社区 问答 正文

采用slb负载均衡,如何使用http/2.0

slb >nginx>tomcat。slb默认走七层协议,slb80端口转发nginx80端口,slb443端口转发nginx443端口,nginx80端口rewrite443端口。由于slb到nginx走的是http协议,而nginx开启http/2.0协议需要开启ssl,ssl走的是https协议,有冲突,新手求指教。不胜感激。

展开
收起
火堆公益 2017-11-24 23:51:14 4171 分享 版权
阿里云 AI 助理回答

在您的架构中,SLB(负载均衡服务)作为前端接收客户端请求,并将这些请求转发到后端的Nginx服务器,而Nginx进一步代理到Tomcat服务器。您提到的问题在于想要在Nginx上启用HTTP/2协议,但遇到了SSL配置的困惑,因为HTTP/2通常与TLS(Transport Layer Security,即SSL的继承者)一起使用以提供安全连接。这里是一个解决方案步骤,帮助您解决这个问题:

  1. 配置SLB监听

    • SLB的80端口设置为HTTP监听,用于接收未加密的HTTP请求,并转发到后端Nginx的80端口。
    • SLB的443端口设置为HTTPS监听,需要上传SSL证书和私钥到SLB。这一步是关键,因为SLB直接处理HTTPS请求并解密,然后以未加密的HTTP形式转发给后端Nginx。这样,Nginx就不需要直接处理SSL握手,而是直接从SLB接收已解密的请求。
  2. Nginx配置

    • 在Nginx配置文件中,确保80端口配置重定向到443端口,这是为了强制用户使用HTTPS,提升安全性。示例配置如下:
      server {
       listen 80;
       server_name your_domain.com;
       return 301 https://$host$request_uri;
      }
      
    • 配置443端口以启用SSL和HTTP/2。由于SLB已经处理了SSL,Nginx这边实际上不需要再进行SSL配置,而是直接开启HTTP/2支持。但是,出于完整性考虑,如果Nginx后面还有其他用途,可以这样配置:

      server {
       listen 443 ssl http2;
       server_name your_domain.com;
      
       # SSL证书和私钥路径
       ssl_certificate /path/to/your/cert.pem;
       ssl_certificate_key /path/to/your/privatekey.pem;
      
       # 其他Nginx location配置...
      }
      
    • 注意:由于SLB已经在前面处理了SSL,所以Nginx这里的SSL配置实际上是不必要的,除非Nginx还直接对外提供服务。正确的做法是让SLB处理SSL,Nginx只关注HTTP/2的配置和优化。
  3. 测试与验证

    • 确保所有配置正确无误后,重启Nginx服务。
    • 使用浏览器或HTTP/2测试工具检查网站是否通过HTTPS且启用了HTTP/2协议。

总结来说,关键是利用SLB处理外部的SSL连接,使得Nginx可以直接在内部网络中以未加密的形式接收请求,从而简化Nginx的配置,同时也能顺利启用HTTP/2以提升性能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答