Ununtu伺服器安裝Nginx與PHP

2023-04-15 06:01:07

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埠相同。