最近开发登录系统,由于涉及到密码相关,请求需要以https方式,而线上大前端的nginx有认证的数字证书,因此线上可以解析我们的https请求,并成功返回,但是在测试环境中,直接配置域名host,返回404。
于是乎,要自己配置https相关内容。
首先,生成证书相关文件,从网上查到资料如下:
# 生成一个RSA密钥
$ openssl genrsa -des3 -out my.key 1024
# 拷贝一个不需要输入密码的密钥文件
$ openssl rsa -in my.key -out my_nopass.key
# 生成一个证书请求
$ openssl req -new -key my.key -out my.csr
# 自己签发证书
$ openssl x509 -req -days 365 -in my.csr -signkey my.key -out my.crt
第3个命令是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email一定要是你的域名后缀的。这样就有一个 csr 文件了,提交给 ssl 提供商的时候就是这个 csr 文件。当然我这里并没有向证书提供商申请,而是在第4步自己签发了证书。
这样,就可以得到一个自己的证书了。
其次,nginx打开https。
server {
listen 443 ssl;
server_name localhost;
ssl_certificate my.crt;
ssl_certificate_key my_nopass.key;
location / {
proxy_pass https://127.0.0.1:8080;
}
}
最后,重启nginx,成功:
/opt/apps/nginx/sbin/nginx -s reload
PS:
如果tomcat需要也是支持https的,则upstream需要配置成如下
server {
listen 443 ssl;
server_name localhost;
ssl_certificate my.crt;
ssl_certificate_key my_nopass.key;
location / {
proxy_pass https://127.0.0.1:8443;
}