域名申请下来之后是可以访问了,但是如果需要用到小程序上面的话,还是需要支持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