選擇web server在部署的環節中也是一個很重要的過程,這裡我會分享我選擇用nginx以及整個設定我遇到的一些問題。
Web Server的主要作用是存儲和提供網頁內容。當用戶透過網頁瀏覽器發送請求時,Web Server會根據請求返回對應的網頁資料。
簡單來說就是處理請求,響應該請求要的資訊或是錯誤給使用者的一個應用程式。
/etc/nginx/nginx.conf
是Nginx的主配置文件,它包含了Nginx伺服器的全局設定,例如用戶、工作進程數量、錯誤日誌的位置等。Step 1: 下載Nginx
sudo apt-get update
sudo apt-get install nginx
Step 2: 啟動Nginx
通常使用AWS的ubuntu的AMI話要注意他有沒有內建apache 如果有的話要先把它關掉才能使用nginx。
常見的指令
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl status nginx
Step 3: 設定Nginx伺服器塊(server blocks)
就是為你的專案設定server block,主要會創建在/etc/nginx/sites-available的下面。
sudo vim /etc/nginx/sites-available/wade.monster
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文件所設。
location ~ \.php$
:此設定確保該規則只適用於以**.php
**結尾的文件。
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?首先要說說什麼事CGI:
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/
sudo nginx -t
這裡他會測試你的語法,以及目錄有等等…..有沒有正確。
如果沒有錯誤,可以重啟Nginx使設定生效:
sudo systemctl restart nginx
結果講那麼多,試著從外部試著連入我的主機出現了:
nginx/1.18.0 (Ubuntu)
先不要慌,這部分後需我是如何處理我想到下一篇文章在分享。