0
点赞
收藏
分享

微信扫一扫

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名


域名申请下来之后是可以访问了,但是如果需要用到小程序上面的话,还是需要支持https调用的。但是想着这还不难嘛。直接上ssl证书就好了。

那么问题就来了,白嫖一时爽。。。。。。

想白嫖SSL证书,单域名证书不是白嫖一次就行了,如果有多个服务,就要白嫖多次了。

刚开始申请完证书之后,直接上了​​www.yuming.com​​然后就好了。

但是后面用到几个二级域名,也要支持https,刚开始我天真的以为一级域名的证书,应该也会支持二级域名的访问的。就这样上去就是一顿配置,结果gg。。。。。

Chrome浏览器直接就提示检测到​​abc.yuming.com​​​使用的是​​www.yuming.com​​的证书。。。。

这就很尴尬了,不好使了。。。。

然后我对着搜索引擎就是一顿搜,结果就是没有结果,改来改去还是不行。。。。。

然后突然同事提到一句,你看下证书是不是单域名的证书,如果是单域名的证书的话,应该是不支持二级域名的。这让我突然想到刚开始的错误提示,就是明显的告诉你,当前域名使用的是另一个域名的证书。而我刚开始是真的没有意识到这一点,导致折腾了一俩小时。。。

废话唠完了,那就直接上配置就好了:

我用的是阿里云的服务器,当然也是购(bai)买(piao)了阿里云的免费的证书。

首先申请域名的证书前,需要保证该域名需要能ping通,否则会审核失败。

那么怎么购买免费的证书呢?

登录阿里云控制台,在左侧菜单栏产品与服务那里,搜​​证书​​,然后直接进入SSL证书。

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_配置文件


这里可以看到购买和申请的证书。

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_配置文件_02


没有证书的,就可以点击购买证书了:白嫖党的福利,财大气粗的话,可以买多域名的,这样操作简单,一劳永逸。

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_二级域名_03


勾选服务协议,然后支付0元。

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_二级域名_04


记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_SSL_05


可以看到有了一个未签发的证书,这时需要先申请,这就需要用到了域名了。

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_nginx_06


输入域名,申请人信息,下一步

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_SSL_07


下一步有个验证,验证通过之后,提交审核就好了。等十几二十秒后刷新,就可以看到已经

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_配置文件_08


记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_Https_09


最后下载就好了,我这里使用的是nginx,所以下载对应的就好了,如果是traefik的话,需要下载Apache的证书。解压之后,就会出现这两个玩意,那么直接上传到服务器上。

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_nginx_10


我这里上传到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

记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_SSL_11


举报

相关推荐

0 条评论