评论

收藏

[Nginx] 详解Nginx配置SSL证书实现Https访问

web服务器 web服务器 发布于:2021-08-15 12:02 | 阅读数:513 | 评论:0

背景
由于项目需求,安全起见,需要将之前的http接口访问变成https访问,所以需要配置SSL证书。项目的架构是这样的:
DSC0000.png

基本架构是硬负载(ReadWhere)+ 软负载(Nginx)+ Tomcat集群,现在的问题是SSl证书要配置在哪里,直接配置在硬负载上?还是分别配置在Nginx和Tomcat上?还是其他的配置方法呢?
首先在硬负载上配置放弃了,然后通过在网上查找资料,发现可以只在Nginx上配置证书,就是说Nginx接入使用Https,而Nginx与Tomcat之间使用Http进行衔接,这样就游了一个整体思路。
关于SSL证书
关于SSL证书这里简单进行介绍,也是因为项目需要,进行了简单的了解。
SSL证书分为大致分为三种,域名级(DV)、企业级(OV)、增强级(EV),安全性以及价格依次增加。根据自己的需求进行选择,个人使用可以使用DV,便宜;企业用的话一般使用OV,特殊情况下使用EV。下面是几家云服务商的OV SSL证书的价格对比,Symantec和GeoTrust被选用的比较多,都属于赛门铁克旗下。
云服务商证书品牌价格阿里云Symantec4000/年阿里云GeoTrust2062.4/年腾讯云Symantec5000/年腾讯云GeoTrust2850/年西部数码Symantec3880/年西部数码GeoTrust2137/年SSL证书配置
由于Nginx对于SSL证书配置的支持才使得这种实现方式成为了可能,不得不感叹Nginx的强大。
证书准备
Nginx配置需要.pem/.crt证书 + .key秘钥,如果您现在拥有的是其他形式的证书,请按照相关说明转化成要求的证书类型,否则是不能完成证书的配置的。一般购买商家都会有相应的转换工具。
准备好了之后,将证书和秘钥放到Nginx的conf目录下(也就是跟配置文件nginx.conf在同一个目录),这里特别需要注意:

  • 如果是在linux系统下配置,这就算准备好了;
  • 如果是在windows系统下,需要将.key秘钥文件中的密码去除,否则就会导致配置之后Nginx启动不起来,这里是一个坑,本人就卡在了这里,具体处理方法也很简单,在网上下载openssl的windows版本,然后将cmd切换到bin目录下,执行openssl rsa -in server.key -out server2.key,生成的server2.key就是配置需要的秘钥文件,但是需要将文件名改成server.key。
修改Nginx配置文件
以下是我nginx.conf配置文件的局部,端口着迷没有使用默认的443,而是改成了8185,根据您的需要进行修改即可,其他配置基本上按照下面就没问题。
server {
  listen  8185;
  server_name localhost; 
  ssl     on; 
  ssl_certificate   server.pem; 
  ssl_certificate_key server.key; 
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; 
  ssl_prefer_server_ciphers  on;
 
  location / {
    proxy_set_header Host $host:$server_port; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_connect_timeout  5;
    proxy_send_timeout   5;
    proxy_read_timeout   5; 
    proxy_pass http://qlddm_server;
  }
修改Tomcat配置文件
虽然不需要在Tomcat配置证书,但是仍然需要修改一下Tomcat的配置Server.xml配置文件,具体包含两个地方:
<Connector
  executor="tomcatThreadPool"
  port="7083"
  protocol="org.apache.coyote.http11.Http11Nio2Protocol"
  connectionTimeout="20000"
  maxConnections="8000"
  redirectPort="8185"
  proxyPort="8185"
  enableLookups="false"
  acceptCount="100"
  maxPostSize="10485760"
  compression="on"
  disableUploadTimeout="true"
  compressionMinSize="2048"
  acceptorThreadCount="2"
  compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
  URIEncoding="utf-8"
  />
需要将redirectPort和proxyPort都修改为您的Nginx监听端口号。
<Valve className="org.apache.catalina.valves.RemoteIpValve"
     remoteIpHeader="X-Forwarded-For"
     protocolHeader="X-Forwarded-Proto"
     protocolHeaderHttpsValue="https" httpsServerPort="8185"/>
需要增加以上的Value标签,注意httpsServerPort也需要修改为Nginx监听端口号。
写在最后
至此,关于SSL的配置基本上就完成了,启动Nginx以及Tomcat容器之后,不出意外应该就可以通过Https正常访问了。另外想说的是,由于本人工作场景是一个硬负载均衡两台服务器,所以相同的配置需要在两台服务器上分别做一次。本文仅供参考,如对您有所帮助,实乃万幸,也希望大家多多支持服务器之家。
原文链接:http://www.jianshu.com/p/19f05fdd292b?utm_source=tuicool&utm_medium=referral

关注下面的标签,发现更多相似文章