需要先準備好你域名對應的證書和私鑰,也就是cert證書和key。我部署是很常見的ng+tomcat雙層設定,ng作為前端的代理,所以tomcat就不需要自己處理https,ng作為代理以http協定將請求轉給tomcat處理,而後再把tomcat的輸出通過SSL加密發給使用者。
這種代理模式下,帶來的問題就是tomcat會認為所有請求都是ng發出的,你在程式碼邏輯如果使用request.getScheme()等函數獲取的資訊會總是http,這種解決辦法需要你在轉發tomcat的設定一些選項proxy_set_header等資訊。
該設定Demo是以客戶在華為雲上的一臺伺服器作為樣例,免費證書需要通過域名備案後,到雲證書管理服務中下載
下載nginx自己去官網,可以wget http://nginx.org/download 對應的版本號,自己解壓安裝後,我們檢查下是否有設定SSL模組
$ /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.10.2
如果沒有看到configure arguments: --with-http_ssl_module 則需要設定SSL模組,在解壓後的nginx目錄(注意,不是在安裝好的那個nginx目錄)執行make編譯命令,編譯好後,在當前目錄下會多出一個objs資料夾。
$ cd nginx-1.10.2
$ make
用新的nginx覆蓋當前的安裝好的nginx檔案
$ cp objs/nginx /usr/local/nginx/sbin/
再次檢查安裝的模組 /usr/local/nginx/sbin/nginx -v,如果能看到 configure arguments: --with-http_ssl_module 則表示SSL模組已經安裝
將從華為雲上下載的免費證書和祕鑰通過sftp工具上傳到雲伺服器上。可以建立一個資料夾cert專門存放,這是我當前存放證書的的路徑
在設定前,我們先copy一份原組態檔防止出錯。然後在組態檔內新增一個server
server {
$ 埠號,開啟ssl listen 443 ssl;
# 域名,多個以空格分開 server_name xxx www.xxx.com; #charset koi8-r; #access_log logs/host.access.log main; # 域名證書檔案存放位置 ssl_certificate /usr/local/nginx/cert/xxx.crt; # 域名私鑰存放位置 ssl_certificate_key /usr/local/nginx/cert/xxx.key; # 快取有效期 ssl_session_timeout 5m; # 可選的加密協 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 加密演演算法 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # https加密套件, ssl_prefer_server_ciphers on; #靜態檔案存放位置 location / { try_files $uri $uri/ /index.html; #root html; #index index.html index.htm; } location ~.*\.js$ { root /usr/local/nginx/html/build; } location ~.*\.css$ { root /usr/local/nginx/html/build; } #tomcat 對映的伺服器設定 location ^~/cms-manage/{ proxy_pass http://127.0.0.1:8080; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
以上就是在組態檔內新增的server,然後在將原http重定向htps
server { listen 80; server_name xxx.com www.xxx.top; return 301 https://$server_name$request_uri; }
關閉nginx,把佔用的埠釋放
$ netstat -lntp
殺掉原程序,重啟,最後記得修改防火牆和入站規則,將443埠放開
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
嘗試存取下域名,已可正常存取
參考:https://support.huaweicloud.com/usermanual-ccm/ccm_01_0082.html