所在位置:
首頁 >
營銷資訊 >
建站知識 > CentOS7上部署Nginx實現(xiàn)https和http重定向https
CentOS7上部署Nginx實現(xiàn)https和http重定向https
時間:2023-02-09 02:51:01 | 來源:建站知識
時間:2023-02-09 02:51:01 來源:建站知識
目標(biāo):
- https訪問域名顯示網(wǎng)站
- http訪問域名重定向到https
我有什么?
- 一個云服務(wù)商VPS
- 一個已備案的域名
- 一個springboot程序
我已經(jīng)實現(xiàn)了什么?或我能實現(xiàn)什么?
- 已安裝CentOS7在云服務(wù)商VPS上
- 可以通過http訪問域名顯示網(wǎng)站
心路歷程:
第一階段:否定將https寫在springboot代碼里面。(大約1.5小時)
- 頭痛醫(yī)頭,腳痛醫(yī)腳。先在Google搜索:++https需要什么?++ 搜索結(jié)果:++需要證書++
- 操作:++云服務(wù)商控制臺上申請免費的SSL證書++
- 閱讀云服務(wù)商提供的證書安裝方式進(jìn)行證書的安裝方式(apache,IIS,nginx,tomcat),發(fā)現(xiàn)沒有提到如何給springboot進(jìn)行安裝的。與之最類似的是如何給tomcat安裝的。
- 靈機一動。直接在Google上搜索:++springboot使用https++ 搜索結(jié)果:++需要改動程序代碼,增加@Configuration的配置文件,更改server.port為443++
- 因為原springboot程序的依賴文件是用gradle實現(xiàn)的,并且用的開發(fā)語言是Groovy。所以單單是閱讀Gradle官網(wǎng)資料理解gradle如何使用,Groovy語法怎樣使用就費了很多精力和時間,還沒算上照貓畫虎修改了gradle文件從而添加依賴之后報錯的排查與修復(fù)的精力和時間。
- 但是,寫著寫著突然想到,https既然是代碼,那能不能不寫在springboot里面,以配置文件的方式寫成配置文件的方式多好???那樣就可以降低很大的耦合度!
第二階段:配置nginx(2小時)
- 既然是配置文件的方式,那不由自主的想到了nginx。沒吃過豬肉,還沒見過豬跑么。大大小小的專欄和課程都提到了nginx負(fù)載均衡,那么大概nginx也能實現(xiàn)個https的配置的功能吧?
- Google搜索:++nginx https++ 搜索結(jié)果:++nginx官網(wǎng)講解++
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ...}# 在自己服務(wù)器,照貓畫虎,下載nginx,配置,然后GG 顯示服務(wù)器拒絕連接。
- 在崩潰的心態(tài)下,想到,既然https崩了,那我試試http能不能成吧?
- springboot以80端口(因為之前就是按80方式運行才可以直接http訪問的)的方式運行,然后發(fā)現(xiàn)80端口被占用了,發(fā)現(xiàn)是nginx一直在使用80端口監(jiān)聽請求。
- 那么,就只能讓springboot換一個端口運行咯?換成8090,然后進(jìn)行端口轉(zhuǎn)發(fā)。Google搜索:++nginx 80 to 8080++ 搜索結(jié)果:++非常棒的github頁,1.4k star++
server{ listen 80; location / { proxy_pass http://127.0.0.1:8090; }}
- 網(wǎng)站成功顯示,這說明nginx端口轉(zhuǎn)發(fā)成功。
- PS:這里的8090只需nginx可訪問即可,與外網(wǎng)是否可訪問無關(guān)。
第三階段:nginx配置https
- 既然http能成功,那https肯定也能成功;
- 以http://www.domainname.com的證書配置,網(wǎng)站拒絕連接;
- 以http://ssl.domainname.com的證書配置,網(wǎng)站拒絕連接;
- 奶奶的,云服務(wù)商的443端口也開了呀!
- 突然想到,cenos7自身的firewall-cmd可能沒開443端口,所以:
開啟端口[root@centos7 ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent查詢端口號443 是否開啟:[root@centos7 ~]# firewall-cmd --query-port=443/tcp重啟防火墻:[root@centos7 ~]# firewall-cmd --reload查詢有哪些端口是開啟的:[root@centos7 ~]# firewall-cmd --list-port
- Then everything looks like good.訪問443端口,服務(wù)器不再拒絕訪問。
- nginx配置https證書,并配置80端口重定向到https
server { listen 443 ssl; #填寫綁定證書的域名 server_name www.domain.com; #證書文件名稱 ssl_certificate 1_www.domain.com_bundle.crt; #私鑰文件名稱 ssl_certificate_key 2_www.domain.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:8090; }}server { #nignx同時監(jiān)聽80端口,并重定向到https listen 80; #填寫綁定證書的域名 server_name www.domain.com; #把http的域名請求轉(zhuǎn)成https return 301 https://$host$request_uri; }
第四階段
爽了。
思考
在解決問題的過程中,我發(fā)現(xiàn)我的想法要么莫得,要么一下子跳出來好多個,當(dāng)我的大腦處理這些想法的時候,我似乎是以多線程的方式進(jìn)行,一會想一下這個,一會想一下那個,這樣的工作方式對計算機來說沒什么問題,但對條理沒那么清楚又感性的人來說似乎就有些難受。所以,記錄與排列優(yōu)先級和抗干擾以及執(zhí)行力就顯得尤為重要,上述四點每一點都不簡單,慢慢來吧。
PS:查資料,一定要看官方(或被認(rèn)可度較高的)文檔是怎么寫的,這樣才能少走彎路!