实战http切换成https
Server端使用Nginx + Tomcat
Niginx SSL on
Tomcat SSL non
步骤:
1、修改代码,将外部引用的http js css 文件修改为https,若外部链接不支持https 则需将静态文件下载到项目中 在项目中引用。
2、将申请到的https安全证书放入NGINX目录
3、修改Nginx配置文件,打开SSL支持,并将安全证书引入配置文件。
4、打开nginx websocket 支持
5、将js ,app中引用的websocket地址由ws改为wss
6、系统会直接调用外部平台的详情页面,需要将其代理到https域名,否则页面无法访问
7、./nginx -t 测试配置文件是否能够成功加载,若配置成功则重新加载niginx配置文件 ./nginx -s reload
8、FASTDFS文件服务器暂时不用https处理,http文件也可以访问
升级完成后测试点
1.系统各个页面,图标能正常访问
2.app调用接口能正常访问
3.app,web 跟踪页图片视频正常显示
4.锐明科技引用页面正常访问
5.监控大屏正常访问数据显示正常
6.外部平台能正常调用平台https接口
注意事项:
1、NGINX 缺少SSL模块
在centos中,配置nginx的https时,出现如下错误。
nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:102
A)到解压的nginx目录下
./configure --with-http_ssl_module
当执行上面语句,出现./configure: error: SSL modules require the OpenSSL library.
用 yum -y install openssl openssl-devel
B)再执行./configure
重新执行./configure --with-http_ssl_module
make ,切记不能make install 会覆盖。
C)把原来nginx备份
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
把新的nginx覆盖旧的
cp objs/nginx /usr/local/nginx/sbin/nginx
出现错误时cp: cannot create regular file ‘/usr/local/nginx/sbin/nginx’: Text file busy
用cp -rfp objs/nginx /usr/local/nginx/sbin/nginx解决
D)测试nginx是否正确
/usr/local/nginx/sbin/nginx -t
(nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful)
E)重启nginx
/usr/local/nginx/sbin/nginx -s reload
2、request.getScheme() 取到https正确的协议详解
A)配置nginx的转发项,配置文件为nginx.conf,添加以下内容如下:
proxy_set_header X-Forwarded-Proto $scheme;
B) 配置tomcat,配置文件为server.xml,添加内容如下:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"/>
3. NGINX的匹配顺序
location的语法规则如下: location [=|~|~*|^~] /uri/ { … }.
在nginx中location分为两类:普通location和正则location。普通 location ”是以“ = ”或“ ^~ ”为前缀或者没有任何前缀的 /uri/,包括“/”;“正则 location ”是以“ ~ ”或“ ~* ”为前缀的 /uri/ 。
那么如果一个 server 块中编写了多个 location 的时候,Nginx对于客户端请求匹配顺序如何呢?
官网说明如下:先匹配普通location,取的最大前缀匹配,再匹配正则location,如果匹配到则按照正则匹配,如果有多个正则可以匹配到,则按照第一个匹配结果处理,如果正则匹配失败则使用普通location的最大前缀匹配。Nginx也设置了几种机制可以打断这种顺序,分别是“^~ ”、“= ”或者location精确匹配。
简单的讲顺序如下:
首先普通location“=”精确匹配;
然后普通location的URL精确匹配;
然后普通location”^~"配置;
然后正则匹配;
然后其他普通location匹配;
最后“/”通用匹配