需求:项目原来时http://开始的访问路径,现有需求改为https开头的访问路径
申请一个自己的域名
好多的云服务提供商都可以提供域名申请和SSL证书申请
我是找了个免费的注册网站(新网 http://www.xinnet.com/)
SSL证书也有免费的
先说注册域名
新网 http://www.xinnet.com/注册的域名,新用户搞活动时可以申请一个免费一年的域名,域名申请需要实名认证,我们测试使用申请一个根域名便宜的域名即可,比如xyz结尾的
域名有了以后还需要在控制台添加域名解析才能用
根据官网的提示提交解析,新增域名解析时新增自己申请的域名和www.域名绑定IP地址即可
申请SSL证书
可以到这个https://letsencrypt.osfipin.com/网站申请SSL证书,有效期为3个月到期重新申请即可;也可以到https://freessl.cn/去申请我用的第一个网站申请的。
申请证书的方式有好多种,有付费的也有免费的,有命令式的也有图形式,下面这个时最简单的图形操作,新手容易理解上手,缺点就是到期需要手动重新申请
申请的时候按照人家官网提示操作即可,过程中需要验证域名的有效性,也是按照提示验证就行,
这里我有个疑问就是人家提供的验证方式有俩种,其中一种是需要在网站绝对路径下新增文件夹并拷贝一个txt验证文件进去,因为我不清楚网站的绝对路径是啥,
就选择了另外一种验证方式,到期再次申请的时候还要验证。
验证俩次,验证通过后就可以申请SSL证书了,并下载证书
证书下载完成后,解压压缩文件,修改证书和密钥的后缀,然后放在ngnix/config/的一个文件夹下面即可,放在其他地方ngnix启动时找不到ssl证书
ngnix配置
默认的一下配置可以管它们,我这里配置了负载均衡的代理和ssl证书
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream test{
ip_hash;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
server {
listen 80;
#监听域名
server_name www.test97.xyz;
rewrite ^(.*)$ https://$server_name$1 permanent; #这句是代表 把http的域名请求转成https
location / {
proxy_pass http://test;
proxy_set_header Host $host;#将请求头转发给后端服务器
proxy_set_header X-Forward-For $remote_addr;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# HTTPS server
server {
listen 443 ssl;
server_name www.test97.xyz;
ssl_certificate cert/fullchain.pem;
ssl_certificate_key cert/private.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://test;
}
}
}
启动ngnix或者重启
start ngnix.exe 或者nginx.exe -s reload
把项目跑起来,在浏览器用https访问一下试试
我的测试项目在自己电脑上运行,所以以上适用于windows使用,linux可以自己研究下,linux申请证书更容易直接使用命令,并且可以设置定时任务自己更新证书
测试时页面引用http的请求可以暂时更改浏览器的安全设置来实现