Ununtu伺服器安裝Nginx與PHP
1. 安裝Nginx:
1.1
sudo apt update
sudo apt install nginx
驗證結果,使用命令:
sudo systemctl status nginx
若有結果如下則說明成功:
但注意,此時只是在伺服器上配置好了nginx,執行nginx -v
應當可以看到版本號。此外,如果對nginx更新了配置,如增加了PHP解釋,則應當重啟nginx伺服器:
sudo systemctl restart nginx
1.2
但是從外界還是無法訪問,所以我們還需要配置防火牆,使用UFW防火牆管理工具可以輕鬆完成:
安裝UFW:
sudo apt-get install ufw -y
啟動UFW服務:
sudo ufw enable
(或者相反的,也可以關閉/重置防火牆,下面命令不在安裝流程內,不要執行)
sudo ufw disable
sudo ufw reset
!注意:一定要先開啟ssh埠的開放,不然下次連線就G了!!!連不上了!!!
sudo ufw allow 22
啟動服務後,需要配置防火牆,使得區域網內其他IP地址可以訪問伺服器的 HTTP(80
)和 HTTPS(443
)埠
sudo ufw allow 'Nginx Full'
驗證狀態:
sudo ufw status
成功則會如下所示:
測試連通性:
在本地瀏覽器輸入伺服器IP地址,預設使用http埠,即可訪問nginx預設介面:
2. 安裝PHP:
PHP是服務端經常使用的程式語言,命令只需一行:
sudo apt install php-fpm
一旦安裝完成,FPM 服務將會自動啟動。想要檢查服務狀態,執行(這裡安裝的是7.4版本,可以使用命令php -v
檢視,將7.4改成實際安裝版本即可):
sudo systemctl status php7.4-fpm
還可以安裝mysql擴充套件,以便使得PHP可以做資料庫相關操作:
sudo apt install php-mysql
安裝後也需要重啟PHP-FPM服務,以確保新更新被執行:
sudo systemctl restart php7.4-fpm
3. Nginx的相關配置
3.1
建立檔案:sudo vim /etc/nginx/php-fpm74.conf
,寫入如下內容:
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9004;
fastcgi_param PHP_SELF $uri;
fastcgi_param SERVER_NAME $host;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
include php_cgi.conf;
}
fastcgi_pass 127.0.0.1:9004代表要將資訊透過9004埠傳遞給php-fpm處理,2~6行都是定義的變數,7,8行是include的兩個檔案。
3.2
建立檔案:sudo vim /etc/nginx/php_cgi.conf
,寫入如下內容:
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
3.3
建立檔案:sudo vim /etc/nginx/conf.d/www.conf
,寫入如下內容:
server {
server_name 210.45.124.82;
index index.php;
root /opt/www;
include php-fpm74.conf;
}
進入/opt目錄,新建www目錄,這個目錄就是預設網站的頁面所在的目錄了:
cd /opt
sudo mkdir www
4. php-fpm的相關配置
建立檔案:sudo vim /etc/php-fpm.d/www.conf
,(注意這個地方寫的位置需要自己注意一下,我的安裝位置是/etc/php/7.4/fpm,裡面有這樣四個檔案或目錄:conf.d php-fpm.conf php.ini pool.d,php-fpm.conf即主配置檔案,其中有一句這樣的語句:include=/etc/php/7.4/fpm/pool.d/*.conf
,意思是匯入以conf結尾的檔案配置,所以我的檔案位置在這個地方/etc/php/7.4/fpm/pool.d/www.conf
),寫入如下內容:
[global]
pid = run/php-fpm.pid
error_log = log/error.log
[www]
listen = 127.0.0.1:9004
user = www-data
group = www-data
pm = static
pm.max_children = 5
rlimit_files = 20000
request_terminate_timeout = 10
pm.max_requests = 20000
user,group也需要自定義化,開啟檔案/etc/nginx/nginx.conf
,看第一行user www-data
,需與此值相同。
5. 重啟服務,更新配置:
sudo systemctl restart nginx php7.4-fpm
也可以將兩個服務加入開機服務(disable取消):
sudo systemctl enable nginx php7.4-fpm
6. 測試檔案
回到/opt/www目錄,建立檔案:sudo vim info.php
<?php
phpinfo();
?>
然後在瀏覽器輸入:ServerIP/info.php即可看到
7.可能錯誤排查
檢視錯誤日誌
// nginx
tail /var/log/nginx/error.log
// php
systemctl status php7.4-fpm.service
錯誤1:403,無檔案或者許可權不足
無檔案問題根據3.3節設定的index去看對應的資料夾是否有檔案
許可權不足問題,則需要檔案所有者賬戶將index的對應資料夾提權:sudo chmod R 777 /opt/www
錯誤2:503 gateway error,一般是php-fpm配置出錯,需注意配置檔案不要寫錯位置(要自己找安裝位置,一般在/etc或者/usr/local/etc中並且要從主配置檔案順藤摸瓜,找到include的檔案位置,並在相應位置建立),另外配置listen埠一定需與nginx的pass埠相同。