iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Software Development

Laravel專案練習-寶可夢管理系統系列 第 11

Day11 寶可夢專案-部署練習-虛擬伺服器軟體安裝--Nginx設定

  • 分享至 

  • xImage
  •  

選擇web server在部署的環節中也是一個很重要的過程,這裡我會分享我選擇用nginx以及整個設定我遇到的一些問題。

1.Web server是什麼?:

Web Server的主要作用是存儲和提供網頁內容。當用戶透過網頁瀏覽器發送請求時,Web Server會根據請求返回對應的網頁資料。

簡單來說就是處理請求,響應該請求要的資訊或是錯誤給使用者的一個應用程式。

2. Nginx的基本組成

  • 主配置文件
    • /etc/nginx/nginx.conf 是Nginx的主配置文件,它包含了Nginx伺服器的全局設定,例如用戶、工作進程數量、錯誤日誌的位置等。
  • 伺服器塊(Server Blocks)
    • 伺服器塊用於定義Virtual Hosts。透過Virtual Hosts,你可以在一台伺服器上運行多個網站,每個網站有自己獨立的域名和文檔根目錄。
    • Nginx中的“伺服器塊(Server Blocks)允許一台實體伺服器托管多個不同的網站,每個網站都可以有自己的域名和根目錄,就好像它們各自運行在獨立的伺服器上一樣。

2**. 安裝Nginx**

  • Step 1: 下載Nginx

    sudo apt-get update
    sudo apt-get install nginx
    
  • Step 2: 啟動Nginx

    通常使用AWS的ubuntu的AMI話要注意他有沒有內建apache 如果有的話要先把它關掉才能使用nginx。

    常見的指令

    • 啟動Nginx: sudo systemctl start nginx
    • 停止Nginx: sudo systemctl stop nginx
    • 重新啟動Nginx: sudo systemctl restart nginx
    • 重新加載配置(無需重新啟動): sudo systemctl reload nginx
    • 查看Nginx狀態: sudo systemctl status nginx
  • Step 3: 設定Nginx伺服器塊(server blocks)

    就是為你的專案設定server block,主要會創建在/etc/nginx/sites-available的下面。

    1. 創建設定檔:(文字編輯器看個人,我習慣用vim)(wade.monster 為我的域名)
    
    sudo vim /etc/nginx/sites-available/wade.monster
    
    
    1. 輸入以下內容
    
    server {
        listen 80;
        server_name wade.monster www.wade.monster;
    
        root /var/www/pokemonProject/public;
        index index.php index.html index.htm;
    
        location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;  # 請確保此路徑與PHP版本相對應
        }
    }
    
    

    在上面的配置中:

    • server_name 定義了此設定檔適用於哪些域名。

    • root 指定了網站文件的根目錄。

    • index 定義了伺服器應該嘗試載入的預設文件。

    • 最後的 location ~ \.php$ 區塊是專為處理PHP文件所設。

      1. location ~ \.php$:此設定確保該規則只適用於以**.php**結尾的文件。

      2. include snippets/fastcgi-php.conf:這行加入了另一個設定文件,其中包含了關於如何通過FastCGI與PHP交互的細節設定。

      3.fastcgi_pass unix:/var/run/php/php8.2-fpm.sock:這行指示Nginx要將PHP請求轉發到指定的Unix socket。

    • 這裡假設使用的是PHP 8.2,但請確保使用的路徑與PHP FPM版本匹配。

      fastcgi_pass 是Nginx的一個指令,用於指定請求應該被傳遞到哪裡以進行FastCGI處理。它告訴Nginx將PHP請求傳遞到上述的UNIX socket

    看到了這個設定,我就想知道什麼是FPM,為什麼要設定他?

    FPM

    • 什麼是FPM?

      什麼是FPM?首先要說說什麼事CGI:

      • CGI (Common Gateway Interface):
        • 當Web伺服器(如Apache、Nginx)收到HTTP請求並需要執行後端程式(例如PHP)時,它如何與這些程式交互的方式就是透過CGI。
        • 簡單來說就是有點類似web server及後端應用程式之間的http,他是一個協議。
        • CGI的運作方式是每次請求都啟動一個新的程式實例,當請求完成後再終止該實例。由於這樣的運作模式會增加很多開銷,所以衍生出了FastCGI。
      • FastCGI:
        • 與CGI相比,FastCGI的主要優勢是它能保持後端程式(如PHP解釋器)的常駐,這意味著不需要對每個請求都啟動和終止程式,提高了效能。
      • FPM (FastCGI Process Manager):
        • FPM是FastCGI的一個實現,可以說他是一個執行FastCGI的一個應用程式,專為PHP設計。它提供了更多的特性,如進程管理、健康檢查和平滑的PHP版本切換等。

        • 結合Web伺服器(特別是Nginx),FPM可以提供更好的效能和資源管理,使得PHP應用運行更為穩定且效能更高。

        • 小結語

          所以整個過程可以理解為, 主要就是要讓發進來的請求,經由web server經手,交給php 編譯器去解析php 檔,然後再回傳內容給客戶。

          而nginx就是透過FPM去和php編譯器溝通。

    • Apache和Nginx在處理php編譯上的差別:

      所以這裡的重點就是再交給PHP編譯器的方式,使用apache和nginx是不同的,apache是將php編譯器寫在自己的apache程式碼裡(一個叫mod_php的組件),而nginx是另外經由FPM去對php 編譯器做溝通。

  • Step 4: 設定Nginx伺服器塊(server blocks)

    前面提到創建了一個屬於我們自己專案的server block了,現在要讓主要server知道請求發過來的時候,我要如何根據域名去發送到不同的server block。

    創建一個符號鏈接(symlink)到**sites-enabled**目錄:

    
    sudo ln -s /etc/nginx/sites-available/wade.monster /etc/nginx/sites-enabled/
    
    
    1. 測試設定檔是否正確
    
    sudo nginx -t
    
    

    這裡他會測試你的語法,以及目錄有等等…..有沒有正確。

    如果沒有錯誤,可以重啟Nginx使設定生效:

    
    sudo systemctl restart nginx
    
    

結語

結果講那麼多,試著從外部試著連入我的主機出現了:

502 Bad Gateway


nginx/1.18.0 (Ubuntu)

先不要慌,這部分後需我是如何處理我想到下一篇文章在分享。


上一篇
Day10 寶可夢專案-部署練習-虛擬伺服器軟體安裝-PHP
下一篇
Day12寶可夢專案-部署練習-虛擬伺服器軟體安裝-Nginx設定-遇到的問題
系列文
Laravel專案練習-寶可夢管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言