背景
我们采用开发直接上线署的方式来快速开发,但因客户已经开始正式使用我司开发的小程序了,为了减少对客户的影响,现在需要额外部署一套开发环境。这个时候首先想到的就是通过Nginx来进行反向代理,开发环境使用二级域名,(如https://dev.zai500.com),方便开发小程序时候使用。因为中间有一些部署前没有碰过的问题,记录下来,以便后期项目时注意。
证书转换
公司项目是从SpringBoot转换到jfinal的,所以之前使用的是JKS格式的证书,需要进行转换,当然如果可以重新申请也能获得不同格式的证书。
jks格式转pkcs12
1 | keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 -srcalias serverkey -destalias serverkey -srcstoretype jks -deststoretype pkcs12 -srcstorepass 111111 -deststorepass 111111 -noprompt |
参数说明
- importkeystore 指示导入导出keystore文件,可用于同类型或不同类型的导入导出
- srckeystore 指示源keystore文件
- srcalias 指示源实体别名
- srcstoretype 指示源store类型(jks/pkcs12..)
- srcstorepass 指示源store密码
- noprompt 不弹出提示
查看jks信息
如果不清楚scralias可能通过如下命令来查看
1 | keytool -list -keystore server.jks |
创建Nginx容器
因为我们的应用是使用Docker部署的,我们很自然的,使用Docker来部署Nginx。
拷贝配置
1 | docker run -p 80:80 -p 443:443 --name nginx -it nginx:stable |
以上命令用将nginx的配置信息拷贝到宿主机的当前目录,之后可以将nginx改成conf
重新创建容器
现在映射配置目录,不采用文件映射的方式,因为我们需要配置证书。
1 | docker stop nginx |
注意这里不使用文件的直接映射,因为需要配置证书。
修改配置
将证书文件放置在conf目录下
1 | - zai500.com |
修改nginx.conf
1 | server { |
注意事项
- 为减少对外暴露的端口,proxy_pass使用宿主机IP,可能通过
ip addr show docker0来查看,其中inet 172.17.0.1/16部分可获取。 - 如查有静态资源的访问需要配置好X-Forwarded-Proto和undertow(我自己是修改来程序逻辑),否则会出现Mixed Content的错误。
- WebSocket的代理需要额外配置。
小结
本次Nginx的调整除了方便之后开发外,也加强了自己对Ng配置的理解。中间因为Mixed Content的处理多花费了不少时间。
参考资料

https://blog.csdn.net/liuchuan_com/article/details/54376258