記一次nginx配Https踏過的坑-單域名證書只能配置一個域名

域名申請下來之後是可以訪問了,但是如果需要用到小程序上面的話,還是需要支持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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章