详解Nginx配置SSL证书实现Https访问
背景
由于项⽬需求,安全起见,需要将之前的http接⼝访问变成https访问,所以需要配置SSL证书。项⽬的架构是这样的:
基本架构是硬负载(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 配置文件证书准备
Nginx配置需要.pem/.crt证书 + .key秘钥,如果您现在拥有的是其他形式的证书,请按照相关说明转化成要求的证书类型,否则是不能完成证书的配置的。⼀般购买商家都会有相应的转换⼯具。
准备好了之后,将证书和秘钥放到Nginx的conf⽬录下(也就是跟配置⽂件f在同⼀个⽬录),这⾥特别需要注意:
1. 如果是在linux系统下配置,这就算准备好了;
2. 如果是在windows系统下,需要将.key秘钥⽂件中的密码去除,否则就会导致配置之后Nginx启动不起来,这⾥是⼀个
坑,本⼈就卡在了这⾥,具体处理⽅法也很简单,在⽹上下载openssl的windows版本,然后将cmd切换到bin⽬录下,执⾏openssl rsa -in server.key -out server2.key,⽣成的server2.key就是配置需要的秘钥⽂件,但是需要将⽂件名改成server.key。
修改Nginx配置⽂件
以下是我f配置⽂件的局部,端⼝着迷没有使⽤默认的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 qlddm_server;
}
修改Tomcat配置⽂件
虽然不需要在Tomcat配置证书,但是仍然需要修改⼀下Tomcat的配置l配置⽂件,具体包含两个地⽅:
<Connector
executor="tomcatThreadPool"
port="7083"
protocol="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正常访问了。另外想说的是,由于本⼈⼯作场景是⼀个硬负载均衡两台服务器,所以相同的配置需要在两台服务器上分别做⼀次。本⽂仅供参考,如对您有所帮助,实乃万幸,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。