nginx配置https詳細過程

一劍天門發表於2023-03-09

準備工作

需要先準備好你域名對應的證照和私鑰,也就是cert證照和key。我部署是很常見的ng+tomcat雙層配置,ng作為前端的代理,所以tomcat就不需要自己處理https,ng作為代理以http協議將請求轉給tomcat處理,而後再把tomcat的輸出透過SSL加密發給使用者。

這種代理模式下,帶來的問題就是tomcat會認為所有請求都是ng發出的,你在程式碼邏輯如果使用request.getScheme()等函式獲取的資訊會總是http,這種解決辦法需要你在轉發tomcat的配置一些選項proxy_set_header等資訊。

該配置Demo是以客戶在華為雲上的一臺伺服器作為樣例,免費證照需要透過域名備案後,到雲證照管理服務中下載

Nginx

下載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專門存放,這是我當前存放證照的的路徑

 

nginx.conf配置

在配置前,我們先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

關閉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

 

相關文章