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

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

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

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

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

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

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

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

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

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

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

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

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

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

登录阿里云控制台,在左侧菜单栏产品与服务那里,搜证书,然后直接进入SSL证书。
记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_第1张图片
这里可以看到购买和申请的证书。
记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_第2张图片
没有证书的,就可以点击购买证书了:

白嫖党的福利,财大气粗的话,可以买多域名的,这样操作简单,一劳永逸。
记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_第3张图片
勾选服务协议,然后支付0元。
记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_第4张图片
记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_第5张图片
可以看到有了一个未签发的证书,这时需要先申请,这就需要用到了域名了。
记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_第6张图片
输入域名,申请人信息,下一步
记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_第7张图片
下一步有个验证,验证通过之后,提交审核就好了。等十几二十秒后刷新,就可以看到已经
记一次nginx配Https踏过的坑-单域名证书只能配置一个域名_第8张图片
在这里插入图片描述
最后下载就好了,我这里使用的是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

在这里插入图片描述

你可能感兴趣的:(【总结】,【Nginx】)