分布式篇 - Nginx添加SSL實作HTTPS訪問
上一篇博文給大家介紹了Nginx的安裝與運行:
- 分布式篇 - Nginx安裝與運行
今天博主給大家分享如何給Nginx添加SSL,實作HTTPS訪問Nginx服務,但前提條件是你的服務器有SSL,博主是阿里云的服務器,可以免費申請SSL,其他云服務器平臺應該也是如此,
如果你沒有安裝Nginx,跟著博主一起動手即可(基本上博主的所有步驟都要進行操作,少數不需要操作的,博主會進行提示),
如果之前已經安裝好了,也不需要擔心,步驟其實都是差不多的,以下幾步需要注意,博主在操作之前也會進行提示:
- 確保安裝了
openssl, - 補全
nginx檔案夾下面的檔案夾和檔案(不然可能沒有configure檔案,就不能重新配置了), - 重新配置、編譯(所謂重新,就是你之前安裝Nginx,其實已經配置和編譯過了,只不過默認配置沒有添加SSL,如果你需要添加SSL,則需要修改默認配置,即重新配置,再重新編譯即可),但不需要重新安裝,不然會覆寫原有
nginx檔案夾下的所有檔案, - 將重新編譯生成的
nginx可執行檔案替代掉原來的nginx可執行檔案(可以備份一下原來的nginx可執行檔案,避免出現問題), - 將SSL證書添加到
nginx檔案夾下, - 修改Nginx組態檔,再啟動或者重啟Nginx服務即可,
安裝依賴環境
安裝gcc環境
yum install -y gcc-c++
安裝prce庫
yum install -y pcre pcre-devel
安裝壓縮和解壓縮依賴
yum install -y zlib zlib-devel
安裝openssl
yum install -y openssl openssl-devel
下載Nginx
Nginx下載地址:
- Nginx
下載穩定版(Linux系統),
下載好后,使用Xftp將該壓縮檔案放到虛擬機或服務器中,

解壓Nginx
[root@izoq008ryseuupz ~]# cd /usr/local/
[root@izoq008ryseuupz local]# ll
total 1068
drwxr-xr-x 7 kaven root 4096 Jan 4 06:05 aegis
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 bin
drwxr-xr-x 10 kaven root 4096 Jan 3 15:01 cloudmonitor
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 etc
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 games
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 include
drwxr-xr-x 7 kaven 143 4096 Oct 5 2019 jdk1.8.0_231
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 lib
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 lib64
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 libexec
-rw-r--r-- 1 root root 1039530 Jan 8 16:46 nginx-1.18.0.tar.gz
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 sbin
drwxr-xr-x. 7 kaven root 4096 Jul 24 11:01 share
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 src
[root@izoq008ryseuupz local]# tar -zxvf nginx-1.18.0.tar.gz
如果大家之前安裝過Nginx,現在開始,就需要跟著博主一起操作了,
[root@izoq008ryseuupz local]# cd nginx-1.18.0
[root@izoq008ryseuupz nginx-1.18.0]# ll
total 784
drwxr-xr-x 6 kaven kaven 4096 Jan 8 18:56 auto
-rw-r--r-- 1 kaven kaven 302863 Apr 21 2020 CHANGES
-rw-r--r-- 1 kaven kaven 462213 Apr 21 2020 CHANGES.ru
drwxr-xr-x 2 kaven kaven 4096 Jan 8 18:56 conf
-rwxr-xr-x 1 kaven kaven 2502 Apr 21 2020 configure
drwxr-xr-x 4 kaven kaven 4096 Jan 8 18:56 contrib
drwxr-xr-x 2 kaven kaven 4096 Jan 8 18:56 html
-rw-r--r-- 1 kaven kaven 1397 Apr 21 2020 LICENSE
drwxr-xr-x 2 kaven kaven 4096 Jan 8 18:56 man
-rw-r--r-- 1 kaven kaven 49 Apr 21 2020 README
drwxr-xr-x 9 kaven kaven 4096 Jan 8 18:56 src
如果你之前已經安裝過Nginx,并且上面這些檔案夾或者檔案都有,就不需要管,如果有些檔案夾或者檔案沒有,比如沒有configure檔案,就需要去官網下載同版本的Nginx,將缺少的檔案夾和檔案補齊(各個版本的Nginx的檔案結構可能不一樣,大家只要和官網下載的同版本Nginx的檔案結構一樣即可),
編譯Nginx
先進行配置,--with-http_ssl_module這個配置就是為了給Nginx添加SSL,
[root@izoq008ryseuupz nginx-1.18.0]# ./configure --with-http_ssl_module
checking for OS
+ Linux 3.10.0-1062.18.1.el7.x86_64 x86_64
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)
...
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
配置的目的是為了創建Makefile檔案,為后面的編譯階段提供編譯檔案,
[root@izoq008ryseuupz nginx-1.18.0]# ll
總用量 768
drwxr-xr-x. 6 1001 1001 4096 1月 7 16:24 auto
-rw-r--r--. 1 1001 1001 302863 4月 21 2020 CHANGES
-rw-r--r--. 1 1001 1001 462213 4月 21 2020 CHANGES.ru
drwxr-xr-x. 2 1001 1001 168 1月 7 16:24 conf
-rwxr-xr-x. 1 1001 1001 2502 4月 21 2020 configure
drwxr-xr-x. 4 1001 1001 72 1月 7 16:24 contrib
drwxr-xr-x. 2 1001 1001 40 1月 7 16:24 html
-rw-r--r--. 1 1001 1001 1397 4月 21 2020 LICENSE
-rw-r--r--. 1 root root 376 1月 7 16:37 Makefile
drwxr-xr-x. 2 1001 1001 21 1月 7 16:24 man
drwxr-xr-x. 3 root root 174 1月 7 16:41 objs
-rw-r--r--. 1 1001 1001 49 4月 21 2020 README
drwxr-xr-x. 9 1001 1001 91 1月 7 16:24 src
編譯
[root@izoq008ryseuupz nginx-1.18.0]# make
之前安裝過Nginx,不需要接下來的安裝操作,不然會覆寫原來的Nginx,但需要下面兩步來代替(之前沒有安裝過Nginx就不需要這兩個步驟):
- 備份原有的
nginx,
[root@izoq008ryseuupz nginx-1.18.0]# cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
- 然后將剛剛編譯好的
nginx(在objs檔案夾下)覆寫掉原有的nginx(這個時候nginx要是停止狀態),
[root@izoq008ryseuupz nginx-1.18.0]# cp ./objs/nginx /usr/local/nginx/sbin/
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y
安裝
[root@izoq008ryseuupz nginx-1.18.0]# make install
安裝之后,就會有nginx檔案夾,
[root@izoq008ryseuupz nginx-1.18.0]# cd ..
[root@izoq008ryseuupz local]# ll
total 1076
drwxr-xr-x 7 kaven root 4096 Jan 4 06:05 aegis
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 bin
drwxr-xr-x 10 kaven root 4096 Jan 3 15:01 cloudmonitor
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 etc
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 games
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 include
drwxr-xr-x 7 kaven 143 4096 Oct 5 2019 jdk1.8.0_231
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 lib
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 lib64
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 libexec
drwxr-xr-x 6 root root 4096 Jan 8 17:33 nginx
drwxr-xr-x 10 kaven kaven 4096 Jan 8 17:29 nginx-1.18.0
-rw-r--r-- 1 root root 1039530 Jan 8 16:46 nginx-1.18.0.tar.gz
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 sbin
drwxr-xr-x. 7 kaven root 4096 Jul 24 11:01 share
drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 src
添加SSL
下載SSL證書,

這里下載Nginx版的SSL證書,

創建ssl檔案夾,
[root@izoq008ryseuupz local]# cd nginx
[root@izoq008ryseuupz nginx]# ll
total 36
drwx------ 2 nobody root 4096 Jan 8 18:43 client_body_temp
drwxr-xr-x 2 root root 4096 Jan 8 18:46 conf
drwx------ 2 nobody root 4096 Jan 8 18:43 fastcgi_temp
drwxr-xr-x 2 root root 4096 Jan 8 17:33 html
drwxr-xr-x 2 root root 4096 Jan 8 18:43 logs
drwx------ 2 nobody root 4096 Jan 8 18:43 proxy_temp
drwxr-xr-x 2 root root 4096 Jan 8 17:54 sbin
drwx------ 2 nobody root 4096 Jan 8 18:43 scgi_temp
drwx------ 2 nobody root 4096 Jan 8 18:43 uwsgi_temp
[root@izoq008ryseuupz nginx]# mkdir ssl
[root@izoq008ryseuupz nginx]# ll
total 40
drwx------ 2 nobody root 4096 Jan 8 18:43 client_body_temp
drwxr-xr-x 2 root root 4096 Jan 8 18:46 conf
drwx------ 2 nobody root 4096 Jan 8 18:43 fastcgi_temp
drwxr-xr-x 2 root root 4096 Jan 8 17:33 html
drwxr-xr-x 2 root root 4096 Jan 8 18:43 logs
drwx------ 2 nobody root 4096 Jan 8 18:43 proxy_temp
drwxr-xr-x 2 root root 4096 Jan 8 17:54 sbin
drwx------ 2 nobody root 4096 Jan 8 18:43 scgi_temp
drwxr-xr-x 2 root root 4096 Jan 8 18:41 ssl
drwx------ 2 nobody root 4096 Jan 8 18:43 uwsgi_temp
將剛剛下載好的Nginx版SSL證書放到ssl檔案夾下,

修改組態檔
[root@izoq008ryseuupz nginx]# cd conf
[root@izoq008ryseuupz conf]# ll
total 68
-rw-r--r-- 1 root root 1077 Jan 8 17:33 fastcgi.conf
-rw-r--r-- 1 root root 1077 Jan 8 17:33 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 Jan 8 17:33 fastcgi_params
-rw-r--r-- 1 root root 1007 Jan 8 17:33 fastcgi_params.default
-rw-r--r-- 1 root root 2837 Jan 8 17:33 koi-utf
-rw-r--r-- 1 root root 2223 Jan 8 17:33 koi-win
-rw-r--r-- 1 root root 5231 Jan 8 17:33 mime.types
-rw-r--r-- 1 root root 5231 Jan 8 17:33 mime.types.default
-rw-r--r-- 1 root root 2656 Jan 8 17:33 nginx.conf
-rw-r--r-- 1 root root 2656 Jan 8 17:33 nginx.conf.default
-rw-r--r-- 1 root root 636 Jan 8 17:33 scgi_params
-rw-r--r-- 1 root root 636 Jan 8 17:33 scgi_params.default
-rw-r--r-- 1 root root 664 Jan 8 17:33 uwsgi_params
-rw-r--r-- 1 root root 664 Jan 8 17:33 uwsgi_params.default
-rw-r--r-- 1 root root 3610 Jan 8 17:33 win-utf
[root@izoq008ryseuupz conf]# vim nginx.conf
在組態檔中添加一個server,就是監聽443埠,443埠主要是用于HTTPS服務,HTTPS是提供加密和通過安全埠傳輸的另一種HTTP,
server {
listen 443 ssl;
#配置HTTPS的默認訪問埠443,
#如果未在此處配置HTTPS的默認訪問埠,可能會造成Nginx無法啟動,
#如果你使用Nginx 1.15.0及以上版本,請使用listen 443 ssl代替listen 443和ssl on,
server_name yourdomain.com; #需要將yourdomain.com替換成證書系結的域名,
root html;
index index.html index.htm;
ssl_certificate cert/cert-file-name.pem; #需要將cert-file-name.pem替換成已上傳的證書檔案的名稱,
ssl_certificate_key cert/cert-file-name.key; #需要將cert-file-name.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; #表示使用的TLS協議的型別,
ssl_prefer_server_ciphers on;
location / {
root html; #站點目錄,
index index.html index.htm;
}
}
換成自己的域名和SSL證書即可,

啟動Nginx
[root@izoq008ryseuupz conf]# cd ..
[root@izoq008ryseuupz nginx]# cd sbin
[root@izoq008ryseuupz sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost sbin]# ./nginx
./nginx 啟動nginx,
./nginx -t 檢查nginx的組態檔是否符合要求
./nginx -s stop 此方式相當于先查出nginx行程id,再使用kill命令強制殺掉行程,
./nginx -s quit 此方式是待nginx行程處理完任務后,再停止nginx,
./nginx -s reload 重啟nginx,
現在就可以使用HTTPS來訪問Nginx服務了,

使用HTTP訪問Nginx服務會提示不安全,

Nginx添加SSL實作HTTPS訪問就介紹到這里,
寫博客是博主記錄自己的學習程序,如果有錯誤,請指正,謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246937.html
標籤:其他
