在CentOS上安裝Nginx配置HTTPS並設置系統服務和開機啟動(最全教程)

友情提示:全部配完大約需要20分鐘,本教程配合 xshell 和 xftp 使用更佳。
系統配置:CentOS 7.5
本教程 摘繁華 版權所有。

⛺操作按鍵

常用按鍵:

複製操作:Shift+Ins

編輯器vim按鍵操作具體如下:

開啟編輯: i 或者 Insert

退出編輯: Esc

退出vim: : + q

保存vim: : + w

保存退出vim: : + w + q

不保存退出vim: : + q + !

⚡第一步:安裝所需要的依賴

⛪1、所需要的依賴包括:gcc,pcre,zlib,openssl。

yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

GCC庫(用來編譯下載下來的 nginx 源碼)

GCC 是 Linux 下最主要的編譯工具,GCC 不僅功能非常強大,結構也非常靈活。它可以通過不同的前端模組來支援各種語言,如 Java、Fortran、Pascal、Modula-3 和 Ada。

PCRE庫( rewrite 模組需要 pcre 庫)

PCRE 支援正則表達式。如果我們在配置文件 nginx.conf 中使用了正則表達式,那麼在編譯 Nginx 時就必須把PCRE庫編譯進 Nginx,因為 Nginx 的 HTTP 模組需要靠它來解析正則表達式。另外,pcre-devel 是使用PCRE做二次開發時所需要的開發庫,包括頭文件等,這也是編譯 Nginx 所必須使用的。

ZLIB庫( gzip 模組需要 zlib 庫)
zlib 提供了很多壓縮和解方式,用於對 HTTP 包的內容做 gzip 格式的壓縮,如果我們在 nginx.conf 中配置了 gzip on,並指定對於某些類型(content-type)的HTTP響應使用 gzip 來進行壓縮以減少網路傳輸量,則在編譯時就必須把 zlib 編譯進 Nginx。zlib-devel 是二次開發所需要的庫。

OpenSSL庫(SSL功能需要 openssl 庫)
openssl 是一個安全套接字層密碼庫,如果伺服器不只是要支援 HTTP,還需要在更安全的 SSL 協議上傳輸 HTTP,那麼需要擁有 OpenSSL。另外,如果我們想使用 MD5、SHA1 等散列函數,那麼也需要安裝它。

顯示以下結果表示安裝完成。

在這裡插入圖片描述

⚡第二步:升級 openssl(非必需,不想升級可直接跳第三步)

這個不是必需!怕麻煩最好不升級,不升級也可以用,因為升級我踩過好多坑。

yum安裝的 openssl ,版本比較低,我們可以通過以下命令查看 openssl 的版本。

openssl version -a

在這裡插入圖片描述

openssl 的版本是 1.0.2k,這個是2017年發布的,已經有點老了,我們下載最新版本。

🏣1、進入 openssl官網 查看版本,這裡我下載的是 openssl-1.1.1j.tar.gz

cd /usr/local
wget //www.openssl.org/source/openssl-1.1.1j.tar.gz

☕2、解壓 openssl-1.1.1j.tar.gz 並進入解壓目錄。

tar -zxvf openssl-1.1.1j.tar.gz
cd openssl-1.1.1j

🍯3、進行重新編譯 openssl 。

./config shared zlib
make && make install

此過程需要 3 分鐘左右……

編譯完成後以下圖:

在這裡插入圖片描述

🍼4、備份當前openssl。

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak

🍶5、配置使用新版本:

ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/openssl

🍸6、更新動態鏈接庫數據:

echo "/usr/local/lib64/" >> /etc/ld.so.conf

重新載入動態鏈接庫。

ldconfig -v

🍴7、重新查看版本號進行驗證:

openssl version -a

在這裡插入圖片描述

🍻8、為適應NGINX編譯需要設置參數,需要修改openss路徑,不然會出現找不到openssl目錄的問題。

cd auto/lib/openssl
cp conf /mnt/
vim conf

        CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
        CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
        CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
        CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"

修改為

        CORE_INCS="$CORE_INCS $OPENSSL/include"
        CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
        CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
        CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"

🍱9、建立libssl.a和libcrypto.a的軟連接。

mkdir /usr/local/ssl/lib
ln -s /usr/local/lib64/libssl.a /usr/local/ssl/lib/libssl.a
ln -s /usr/local/lib64/libcrypto.a /usr/local/ssl/lib/libcrypto.a

🍙10、建立軟連接openssl後,/usr/local/ssl/下沒有include路徑,需重新指向。

ln -s /usr/include/ /usr/local/ssl/include
ll

⚡第三步:正式安裝Nginx

🍥1、先進入到 usr/local 目錄,創建並進入 nginx 目錄。

cd /usr/local
mkdir nginx
cd nginx

🍤2、通過 wget 命令在線獲取到 nginx 的安裝包,這裡我選擇的是 nginx-1.17.7 這個版本,命令是:

wget //nginx.org/download/nginx-1.17.7.tar.gz

最新版本可以直接點直通車查看:nginx下載地址

🍢3、解壓 nginx-1.17.7.tar.gz。

tar -zxvf nginx-1.17.7.tar.gz

🍩4、進入剛剛解壓的文件夾nginx-1.17.7進行安裝。

cd nginx-1.17.7

🍚5、使用–prefix參數指定nginx安裝的目錄。

./configure --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module

🍢6、用make、make install安裝,安裝命令。

make && make install

顯示以下結果表示安裝完成。

在這裡插入圖片描述

🍝7、查看nginx版本。

/usr/local/nginx/sbin/nginx -V

看到版本號為 1.17.7,各個模組也安裝正常。

在這裡插入圖片描述

執行完成後看看Nginx安在什麼地方了。

whereis nginx

可以看到,我的nginx是安裝在了 /usr/local/nginx。

在這裡插入圖片描述

🍦8、運行命令啟動nginx。

/usr/local/nginx/sbin/nginx

🍰9、用ps命令看看nginx進程跑起來沒有。

ps -ef | grep nginx

跑起來了,說明安裝沒有問題。

在這裡插入圖片描述

⚡​第四步:驗證Nginx是否已成功安裝

🍩1、現在在瀏覽器輸入ip地址或者localhost,就能看到Nginx的歡迎介面了。

在這裡插入圖片描述

到此,Nginx成功完成安裝!接下來就是配置nginx讓別人能訪問到你的網站。

⚡第五步:配置nginx(通過修改配置文件nginx.conf)

🍮1、打開文件夾 /usr/local/nginx/conf ,查看目錄結構。

cd /usr/local/nginx/conf
ll

在這裡插入圖片描述

可以看到裡面有nginx.conf這個文件,使用命令 vim 打開時是這樣的

在這裡插入圖片描述

後面要用到的鏈接說明文件

這裡有必要對nginx.conf說明一下:

#user  nobody;
worker_processes  1; # 工作進程:數目。根據硬體調整,通常等於cpu數量或者2倍cpu數量。

#錯誤日誌存放路徑。
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; # nginx進程pid存放路徑。

events {
    worker_connections  1024; # 工作進程的最大連接數量。
}


http {
    include       mime.types; # 指定mime類型,由mime.type來定義。
    default_type  application/octet-stream;

    # 日誌格式設置
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    # 用log_format指令設置日誌格式後,需要用access_log來指定日誌文件存放路徑。
    #access_log  logs/access.log  main;

    # 指定nginx是否調用sendfile函數來輸出文件,對於普通應用,必須設置on。如果用來進行下載等應用磁碟io重負載應用,可設著off,以平衡磁碟與網路io處理速度,降低系統uptime。
    sendfile        on;
    # 此選項允許或禁止使用socket的TCP_CORK的選項,此選項僅在sendfile的時候使用。
    #tcp_nopush     on;
    
    # keepalive超時時間。
    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 開啟gzip壓縮服務。
    #gzip  on;

    # 虛擬主機。
    server {
        listen       80;  # 配置監聽埠號。
        server_name  localhost;  # 配置訪問域名,域名可以有多個,用空格隔開。

        #charset koi8-r;  # 字符集設置。

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        # 錯誤跳轉頁。
        #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   //127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        # 請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫。
        #location ~ \.php$ {
        
        #    root           html; # 根目錄。
        #    fastcgi_pass   127.0.0.1:9000; # 請求轉向定義的伺服器列表。
        #    fastcgi_index  index.php; # 如果請求的Fastcgi_index URI是以 / 結束的, 該指令設置的文件會被附加到URI的後面並保存在變數$fastcig_script_name中。
        #    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;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl; # 監聽埠。
    #    server_name  localhost; # 域名。

    #    ssl_certificate      cert.pem; # 證書位置。
    #    ssl_certificate_key  cert.key; # 私鑰位置。

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5; # 密碼加密方式。
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

🍞2、在這裡建議將現有的nginx.conf文件複製一份出來並重命名為nginx.conf.bak文件,方便以後配置錯了恢復。

cp -b /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

🍭3、然後打開 /usr/local/nginx/conf 看看目錄結構,發現已經複製好了

cd /usr/local/nginx/conf
ll

在這裡插入圖片描述

這時後就可以安心修改nginx.conf文件了!註:上面的說明文件和conf源文件一模一樣,我只是加了注釋,放心複製。

🍪4、直接在本地創建一個空 nginx.conf 文件,複製上面 說明文件的程式碼,按照我的注釋配置你的網站:

一般情況下只需要在最後一個}之前添加server配置就可以了

在這裡插入圖片描述

比如我的個人主頁網站配置如下:

在這裡插入圖片描述

下面說說我為什麼這麼配置(如果你的網站不需要https訪問,這一步可以忽略)。

現在網站 https 已經是標配,這個配置還是很重要的。

# -------------------http-----------------------
    # -------------配置跳轉https-------------
    server {
        listen 80;
        server_name *.zhaifanhua.cn;
        return 301 //$http_host$request_uri;
    }

上面的配置是為了 http 跳轉為 https ,當訪問 80 埠時 nginx 自動轉發為已經存在配置網址的 443 埠。比如別人訪問網站 //zhaifanhua.cn 會自動跳轉為 //zhaifanhua.cn

這裡我設置為 *.zhaifanhua.cn 是因為我有很多站點都需要跳轉為 https 協議訪問,並且我的證書是泛域名解析,乾脆用通配符 * 來配置一勞永逸。這樣訪問任何前綴的域名都可以跳轉為 https 協議了。

下面就是正式配置網站目錄和證書了,一下內容將參數 server_name、ssl_certificate、ssl_certificate_key、location 下的 root 修改你自己的域名和路徑即可。

# -------------------https-----------------------
    # -------------摘繁華主頁------------------
    server {
        listen					443 ssl;
        server_name				zhaifanhua.cn www.zhaifanhua.cn;
        # 證書位置
        ssl_certificate			/home/ssl/zhaifanhua.cn/full_chain.pem;
        # 私鑰位置
        ssl_certificate_key		/home/ssl/zhaifanhua.cn/private.key;
        # 開啟HSTS
        add_header Strict-Transport-Security "max-age=63072000" always;
        # 裝訂在線證書狀態協議
        ssl_stapling            on;
        ssl_stapling_verify     on;
        # 配置會話快取
        ssl_session_cache		shared:SSL:1m;
        ssl_session_timeout		5m;
        # 配置協議
        ssl_protocols			TLSv1 TLSv1.1 TLSv1.2;
        # 配置加密套件
        ssl_ciphers				ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

        # 根目錄
        root                    /home/www/www;
    }

🍢5、修改完成後保存,然後用xftp上傳到 /usr/local/nginx/conf 目錄進行覆蓋源文件,然後判斷配置文件是否正確,有successful表示可用。

/usr/local/nginx/sbin/nginx -t

🍲6、配置正確後,重啟 nginx 重新載入配置文件使配置生效:

/usr/local/nginx/sbin/nginx -s reload

🔒7、這時候訪問網站已經出現了鎖,說明 https 開啟成功。

在這裡插入圖片描述

⚡第六步:將nginx配置成系統服務並設置開機自啟動

🎃1、在系統服務目錄里創建 nginx.service 文件。

vim /lib/systemd/system/nginx.service

寫入內容如下:

[Unit]
Description=nginx
After=network.target
  
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target

[Unit] 服務的說明
Description 描述服務
After 描述服務類別
[Service] 服務運行參數的設置
Type=forking 是後台運行的形式
ExecStart 為服務的具體運行命令
ExecReload 為重啟命令
ExecStop 為停止命令
PrivateTmp=True 表示給服務分配獨立的臨時空間
[Install] 運行級別下服務安裝的相關設置,可設置為多用戶,即系統運行級別為3

注意:[Service]的啟動、重啟、停止命令全部要求使用絕對路徑,保存退出。

🎆2、設置用戶的許可權,重新載入 nginx.service 文件

chmod 755 ./nginx.service
systemctl daemon-reload

🎏3、殺死 nginx 重啟nginx

pkill -9 nginx
systemctl restart nginx
ps aux | grep nginx

在這裡插入圖片描述

說明配置系統服務成功!

📷4、設置開機自啟動

systemctl enable nginx.service

在這裡插入圖片描述

說明開機自啟動設置成功!

👻其他命令

# 啟動nginx服務
service nginx start
systemctl start nginx.service
# 查看服務當前狀態
service nginx status
systemctl status nginx.service
# 重新啟動服務
service nginx reload
systemctl restart nginx.service 
# 停止nginx服務
service nginx stop
systemctl stop nginx.service

# 設置開機自啟動
systemctl enable nginx.service
# 停止開機自啟動
systemctl disable nginx.service

# 查看所有已啟動的服務
systemctl list-units --type=service

🌹致謝及彩蛋

  • 這篇文章寫了整整兩天,希望能為你帶來幫助。由於知識水平有限,本文難免有不足之處,誠請各位同行提出批評和指正。
  • 配置功能可能需要沒多長時間,但為了能讓讀者儘可能一次配置成功,查了無數的資料,也實驗了好幾遍……還是蠻累的,不要忘了一件三連哦!

🍁彩蛋 :寫這篇文章之前,我的域名開了CDN加速,原本我的nginx是配置好的,我更新了我的網站程式後,怎麼刷新內容都不變,我還以為我的nginx出錯了,而且考慮到我的伺服器好長時間沒有清理了,直接TMD把伺服器重裝了,結果忘了備份一個重要的資料庫,導致所有資料都沒了,你能想到我當時的心情了吧!!!!不過要是沒有重裝,我也不會寫這篇文章了,哈哈哈哈……欲知後文,請關注我或者任何搜索引擎搜索「摘繁華」就能找到我,嘻嘻。

如果你覺得這篇文章還不錯,請動動小指頭點贊、收藏和關注哦!若本文帶給你很大幫助,也可以打賞部落客一杯可樂🍵ღゝ◡╹)ノ♡
摘繁華版權所有,轉發或引用請附上原文鏈接哦!