輕鬆部署 Laravel 應用 | 《09. 手動部署 - 配置 Nginx 站點》

Wi1dcard發表於2019-03-09

:clap: 本系列持續更新中,歡迎關注:https://github.com/wi1dcard/laravel-deploy...

由於課程上下文關聯比較緊密,在開始前請先閱讀 本文

你的支援是我寫作的動力;關注我的客官們,請在右上角點個贊,將會讓文章在首頁展示,幫助更多人。

感謝 :clap: !

在先前的小節中,我們已經成功地完成了手動部署中所需要的「安裝執行環境」、「部署應用程式碼」,還差最後臨門一腳「配置執行環境」。

Nginx 站點配置

根據 Laravel 5.8 部署文件 的說明,我們可直接拿到一份現成的 Nginx 配置檔案,稍作調整即可:

server {
    listen 80;
    server_name laravel-deployment.wi1dcard.cn; # 此為必修改項,請替換為伺服器公網 IP 或域名
    root /var/www/deployment/public; # 此為必修改項,請注意指向站點根目錄的 public 子目錄

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # 請注意核對 PHP 版本
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

提示:關於以上 Nginx 配置項的解析,可參見 這篇部落格

通常我們僅需修改 server_namerootfastcgi_pass;請注意閱讀 # 後的註釋。

我們將以上內容儲存到本地檔案(例如 deployment.conf)內,使用 SCP 即可上傳至伺服器:

$ scp ~/deployment.conf root@laravel-deployment.wi1dcard.cn:/etc/nginx/sites-enabled/

提示:如果你熟悉 vi 等文字編輯器,也可以直接在伺服器上操作,此處不再展開。

其中:

  • ~/deployment.conf 請替換為配置檔案的實際儲存路徑,該路徑位於本地。
  • /etc/nginx/sites-enabled/ 為存放 Nginx 站點配置的目錄,該目錄位於伺服器。

過載 Nginx

配置完成後,請務必重啟(Restart)或過載(Reload)Nginx。

什麼是 過載?實際上,直接重啟 Nginx 是不安全的。原因有二:

  • 在 Nginx 程式結束再重新執行的過程中,將造成極短時間的閃斷。雖然這一時間通常很短(一般來說在秒級別),但倘若面對大量併發,還是極易造成一部分請求無法訪問,即服務中斷。
  • 在重啟的過程中,若此時 Nginx 恰好正在處理請求,與客戶端的 TCP 連線將會斷開,客戶端無法收到正確響應,造成前後端資訊不一致。

在之前的小節中,已經提到重啟 Nginx 的方法;

$ service nginx restart

同樣地,亦可使用 service 命令過載 Nginx:

$ service nginx reload

另一種等效的方法是:

$ nginx -s reload

最終效果

在瀏覽器內輸入伺服器公網 IP 或域名並訪問,你將會看到 Laravel 應用的預設主頁:

是的,跟之前一毛一樣,我也是複製過來的截圖 :P

恭喜你,部署成功。

我感謝自己平凡,敢愛敢恨沒負擔。
我感謝自己不凡,可愛可恨都包攬。

相關文章