最近因为小程序发布需要接口https化的原因,不得不让自己的网站支持https。一些原理啥的我就不讲了,直接说下自己怎么做的吧
首先需要在阿里云去购买一个https证书,你可以点击这儿进行传送,免费版的不收钱,而且可以申请很多个,如果你有多个网站需要支持https的话。
购买之后,点击补充信息,并在接下来的页面填写完必要的信息。域名校验类型注意选择dns,并且勾选下方的复选框。
点击系统生成src,点击创建。这样申请https证书的请求就被创建了。 大概等个5分钟,阿里就会给出回复。一般情况下域名的txt解析都已经被自动添加上去了,如果提示未成功,那自己按照提示手动添加下吧。
创建成功之后我们就可以看到证书已签发,然后卸载证书到计算机本地,想要传到服务器,你可以通过sftp或者ftp,如果这些做不到就找一个存放资源的空间—比如七牛云空间,把pem和key文件传送去,复制他们的url,然后在命令行里输入
wget http://xxxxx.pem
这样你就获取到他们了。 在你的服务器上新建一个目录,把这些文件放在这个目录下
mkdir /var/ssl
mv xxx.pem /var/ssl/
mv xxx.key /var/ssl/
接下来就是配置nginx了,不讲那么多了,直接贴代码了
########### website(使http可以访问) ##########
server {
listen 80;
# listen 443 default ssl;
server_name api.andylistudio.com;
# rewrite ^(.*)$ https://$host$1 permanent;
location / {
proxy_pass http://localhost:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
# listen 443 default ssl;
server_name khdoc.andylistudio.com;
# rewrite ^(.*)$ https://$host$1 permanent;
location / {
proxy_pass http://localhost:8083/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
############ ssl(使https可以访问) ################
server {
listen 443 ssl;
server_name api.andylistudio.com;
ssl on;
root html;
index index.html index.htm;
ssl_certificate /var/ssl/api/api.pem;
ssl_certificate_key /var/ssl/api/api.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
server_name khdoc.andylistudio.com;
ssl on;
root html;
index index.html index.htm;
ssl_certificate /var/ssl/khdoc/khdoc.pem;
ssl_certificate_key /var/ssl/khdoc/khdoc.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8083/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
参考文档: nginx 同一个IP上配置多个HTTPS主机 nginx使用ssl模块配置支持HTTPS访问
详情可以查看我的博客 http://www.andylistudio.com/2017/04/22/website_https/
let’sencrypt 路过
cloudflare 路过
推荐caddy