域名申请下来之后是可以访问了,但是如果需要用到小程序上面的话,还是需要支持https调用的。但是想着这还不难嘛。直接上ssl证书就好了。
那么问题就来了,白嫖一时爽。。。。。。
想白嫖SSL证书,单域名证书不是白嫖一次就行了,如果有多个服务,就要白嫖多次了。
刚开始申请完证书之后,直接上了www.yuming.com
然后就好了。
但是后面用到几个二级域名,也要支持https,刚开始我天真的以为一级域名的证书,应该也会支持二级域名的访问的。就这样上去就是一顿配置,结果gg。。。。。
Chrome浏览器直接就提示检测到abc.yuming.com
使用的是www.yuming.com
的证书。。。。
这就很尴尬了,不好使了。。。。
然后我对着搜索引擎就是一顿搜,结果就是没有结果,改来改去还是不行。。。。。
然后突然同事提到一句,你看下证书是不是单域名的证书,如果是单域名的证书的话,应该是不支持二级域名的。这让我突然想到刚开始的错误提示,就是明显的告诉你,当前域名使用的是另一个域名的证书。而我刚开始是真的没有意识到这一点,导致折腾了一俩小时。。。
废话唠完了,那就直接上配置就好了:
我用的是阿里云的服务器,当然也是购(bai)买(piao)了阿里云的免费的证书。
首先申请域名的证书前,需要保证该域名需要能ping通,否则会审核失败。
那么怎么购买免费的证书呢?
登录阿里云控制台,在左侧菜单栏产品与服务那里,搜证书
,然后直接进入SSL证书。
这里可以看到购买和申请的证书。
没有证书的,就可以点击购买证书了:白嫖党的福利,财大气粗的话,可以买多域名的,这样操作简单,一劳永逸。
勾选服务协议,然后支付0元。
可以看到有了一个未签发的证书,这时需要先申请,这就需要用到了域名了。
输入域名,申请人信息,下一步
下一步有个验证,验证通过之后,提交审核就好了。等十几二十秒后刷新,就可以看到已经
最后下载就好了,我这里使用的是nginx,所以下载对应的就好了,如果是traefik的话,需要下载Apache的证书。解压之后,就会出现这两个玩意,那么直接上传到服务器上。
我这里上传到nginx安装目录下的cert文件夹下了,cert是新建的文件夹。
然后就是修改conf文件了。
修改前,可能是这样的:
upstream pms{
server 127.0.0.1:50000 weight=1;
}
server {
listen 80;
server_name pms.yuming.com;
location / {
client_body_buffer_size 50m;
proxy_pass http://pms;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
修改后:
server {
listen 80;
server_name pms.yuming.com;
#rewrite ^(.*)$ https://$host$1 permanent;
location / {
client_body_buffer_size 50m;
proxy_pass http://pms;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
server {
listen 443 ssl;
server_name pms.yuming.com;
ssl_certificate "/alidata/server/cert/pms.yuming.com.pem";
ssl_certificate_key "/alidata/server/cert/pms.yuming.com.key";
location / {
proxy_pass http://pms;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect default;
}
}
其实就是加了一个监听443的端口,server_name 仍然同80端口的server_name,可以看到上面80端口哪里注释掉一行rewrite
,注释和不注释的区别就是,添加证书后是否 还支持http调用。
如果只允许https调用,就打开注释,这样http的请求就会直接转发到https上,也就是说不再支持http调用,如果使用http请求的话,服务端收到的请求将会丢失请求的body中的参数。
我还见到有将上面连个server写一块的,同时监听80端口和443端口,但是我没有尝试这种,其中用if判断请求
listen 80;
listen 443;
if($server_port !~ 443){
return 307 https://$server_name$request_uri;
}
接着就是重启测试nginx的配置文件是否正常了。
我这里使用的是自定义的配置文件:
/alidata/server/nginx-1.4.4/sbin/nginx -t -c /alidata/server/nginx/conf/nginx.conf
其中-t是测试,-c是启动。如果提示successful,则证明配置文件没问题。
如果正常,则重新加载配置文件即可。
/alidata/server/nginx-1.4.4/sbin/nginx -s reload -c /alidata/server/nginx/conf/nginx.conf