debian11 hexo+nginx 配置https

GK_Jerry發表於2024-06-24

環境準備

站點伺服器:Debian 11
個人PC:Vscode , nodejs , git , xshell遠端工具

這裡的站點伺服器可以是雲伺服器,也可以實體機子,我這裡使用家裡的NAS-unraid開了一臺Debian11虛擬機器,虛擬機器用任意linux發行最新版本均可。

因為某些原因需要去熟悉Debian,發現在Debian系統上編輯文件有點困難 Debian系統vi把我方向鍵吃了q.q,還是習慣redhat,nas雖然能vnc但是總是不穩定,所以unraid設定虛擬機器網路橋接後,直接用遠端工具+本地文件編寫+git版本管理同步進行搭建。

搭建開始

初步想法就是,基於hexo用靜態頁面做個人部落格站點,hexo有些主題挺貼我的喜好。

快速搭建hexo站點

遠端到Debian後,安裝git,nodejs,然後使用npm安裝hexo,這裡選擇全域性安裝,方便除錯

$ npm install -g hexo-cli

建立一個站點目錄,進行初始化

$ mkdir -p /home/hexo
$ hexo init /home/hexo/demo
$ cd /home/hexo/demo
$ npm install

在站點的根目錄下配置站點的基本資訊,一般只要去編輯# Site# URL兩個部分,其他部分保持預設即可

$ vi /home/hexo/demo/_config.yml

配置好_config.yml檔案後,直接啟動hexo服務把站點啟動,記得目錄保持在hexo初始化的根目錄。

$ hexo server 
#INFO  Validating config
#INFO  Start processing
#INFO  Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.

當無ERROR日誌則說明順利啟動,並且預設監聽在4000埠上,直接訪問該頁面,站點將按官方預設主題啟動,不過講真預設主題已經蠻好看的了

Ngnix配置HTTPS

不難發現,雖然站點起來了,但是發現只能用http訪問,使用https卻訪問不了。

經過一段時間的百度,考慮採用ngnix做代理轉發,將http轉成https。首先需要先安裝ngnix,apt安裝理論上是可行的,因為本地編譯安裝沒嘗試過,找了個帖子跟著做試試。

先下載ngnix最新原始檔包,apt安裝必要的編譯工具。

$ apt install -y build-essential libpcre3 libpcre3-dev openssl zlib1g-dev libssl-dev
# 下載原始碼
$ wget http://nginx.org/download/nginx-1.20.2.tar.gz

# 解壓並準備編譯
$ tar -xf nginx-1.20.2.tar.gz
$ cd nginx-1.20.2

# 參考帖子的編譯引數指令碼,其中:
#--prefix:Nginx主要安裝路徑,後續Nginx子目錄依照這個變數展開
#--user:設定Nginx程序啟動時,所屬的使用者
#--group:設定Nginx程序啟動時,所屬的使用者組
$ ./configure \
  --prefix=/usr/local/nginx \
  --user=www \
  --group=www \
  --sbin-path=/usr/local/nginx/sbin/nginx \
  --conf-path=/usr/local/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx.pid \
  --lock-path=/var/run/nginx.lock \
  --http-client-body-temp-path=/var/cache/nginx/client_temp \
  --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
  --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
  --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
  --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
  --with-file-aio \
  --with-threads \
  --with-http_addition_module \
  --with-http_auth_request_module \
  --with-http_dav_module \
  --with-http_flv_module \
  --with-http_gunzip_module \
  --with-http_gzip_static_module \
  --with-http_mp4_module \
  --with-http_random_index_module \
  --with-http_realip_module \
  --with-http_secure_link_module \
  --with-http_slice_module \
  --with-http_ssl_module \
  --with-http_stub_status_module \
  --with-http_sub_module \
  --with-http_v2_module \
  --with-mail \
  --with-mail_ssl_module \
  --with-stream \
  --with-stream_realip_module \
  --with-stream_ssl_module \
  --with-stream_ssl_preread_module

輸入配置命令後,如果按如下提示說明無誤,可以進行編譯

Configuration summary
  + using threads
  + 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"
  nginx configuration file: "/usr/local/nginx/nginx.conf"
  nginx pid file: "/var/run/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/var/log/nginx/access.log"
  nginx http client request body temporary files: "/var/cache/nginx/client_temp"
  nginx http proxy temporary files: "/var/cache/nginx/proxy_temp"
  nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp"
  nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp"
  nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"

$ make

編譯順利直接安裝,然後建立systemctl守護服務

$ make install

$ vi /usr/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

這樣一來,那麼ngnix服務就已經安裝好了,需要注意如下資訊

/usr/local/nginx:為Nginx編譯安裝的地址。
/usr/local/nginx/nginx.conf:Nginx預設配置檔案。
使用systemctl對Nginx進行管理:
啟動Nginx服務:systemctl start nginx
過載Nginx配置:systemctl reload nginx
停止Nginx服務:systemctl stop nginx
與systemctl相關的擴充可參考這篇教程:《Linux系統服務神器:systemctl的配置與使用》

接著開始編寫配置檔案vi /usr/local/nginx/nginx.conf,前面部分內容不需要修改,主要將配置檔案最後關於https的部分取消註釋並按如下內容填寫

# http 80埠可以直接註釋掉,本專案暫時用不到
# 注意縮排格式
    # HTTPS server
    #
    server {
        listen       443 ssl;
        # 可填寫域名或者ip地址
        server_name  xxx.xxx.xxx.xxx;

        # ssl檔案目錄,圖方便直接丟/etc/nginx目錄
        ssl_certificate      /etc/nginx/server.crt;
        ssl_certificate_key  /etc/nginx/server.key;

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

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        # 這裡為站點的資源目錄,hexo靜態檔案存放在hexo專案根目錄xxx/public中
        root /xxx/xxx/public;
        # 這裡填寫根目錄,如果hexo上沒有設定子目錄就按預設填寫/即可,如果有設定就填寫/子目錄名/,proxy_pass位置同理
        location / {
             index index.html index.htm;
             proxy_pass http://xxx.xxx.xxx.xxx:4000/;
        }
    }

剛剛配置檔案中我們填寫了ssl檔案,直接過載nginx配置會直接報錯,我們需要先準備ssl檔案並放到配置的目錄中。
正常站點是需要進行站點備案、申請域名,然後再填寫資訊去申請ssl證書。
考慮到目前搭建的只是區域網內使用的,不對外開放,也沒有申請域名,直接使用自籤SSL證書

ps:雖然對外訪問的站點也可以使用自簽證書,但因為自簽證書安全性不高不推薦使用,僅限除錯測試使用。

生成rsa私鑰,使用des3演算法,2048位,私鑰檔案儲存為server.key

$ openssl genrsa -des3 -out server.key 2048

接下來生成CSR(證書籤名請求),執行該語句後會要求依次輸入國家,地區,城市,組織,組織單位,Common Name和Email等資訊反正是假的,無腦回車按預設值就行

$ openssl req -new -key server.key -out server.csr

最後生成自簽名證書,輸出自簽證書server.crt

$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

將兩個檔案放到配置檔案填寫的目錄,過載ngnix配置檔案

$ systemctl reload ngnix

然後直接訪問https://站點/,除了瀏覽器會提示告警外,已經可以使用https進行訪問了。

最後編輯時間 2023/02/26 01:26

References:

  1. ngnix安裝
    Debian上編譯安裝Nginx:https://www.gxlsystem.com/yunwei-33237.html
    debian11編譯安裝nginx最新穩定版1.22.1https://www.rezhuji.com/os/debian11/build/how_to_make_install_nginx_on_debian11.html
    Debian apt安裝nginx並配置反向代理:https://pangruitao.com/post/2106
  2. 反向代理與延伸
    Nginx透過location反向代理網站找不到CSS,JS及圖片問題解決方案:https://blog.csdn.net/chengliang666/article/details/126230750
    nginx 配置多個server與多個location:https://blog.csdn.net/GDKbb/article/details/124398453
    Nginx常見場景代理轉發配置:https://blog.csdn.net/faye0412/article/details/75200607/
  3. hexo站點搭建
    Hexo官方文件:https://hexo.io/zh-cn/docs/
    Hexo-Redefine主題文件:https://redefine-docs.ohevan.com/docs/intro
    Hexo新增分類及標籤:https://juejin.cn/post/6844903830216261645
    Redefine作者站點搭建分享:https://ohevan.com/vercel-hexo-configuration.html

相關文章