轉載自:https://blog.csdn.net/qq_36290650/article/details/90411807;添加和修改了部分內容
一、說明
正在嘗試基於nginx+php搭建web服務器,中途遇到不少問題。掙扎了三四個小時終於完成了,這里分享下經驗。
實驗環境
操作系統:Ubuntu 18.04 64位
nginx:1.14.0
php:7.2.17-0
php-fram:php7.2-fpm
二、實驗步驟
1、安裝必要程序以及依賴
#安裝程序包
sudo apt-get install php7.2
sudo apt-get install php7.2-fpm #nginx與php之間的橋梁(這個貌似在安裝php7.2的時候就自動安裝了)
sudo apt remove apache2* #刪除自動安裝的Apache2,注意最后面有星號
sudo apt autoremove # 清除Apache2的依賴
sudo apt-get install nginx
#安裝必要依賴
sudo apt-get install php-json
sudo apt-get install php-curl
sudo apt-get install php7.2-mysql
sudo apt-get install php7.2-cgi
2、打開 http://127.0.0.1,出現下面界面則表示安裝成功
有可能顯示為阿帕奇主頁,不要緊張,可以嘗試刪除 /var/www/html/index.html(這是因為nginx的一個Server的根木錄也是/var/www/html,而安裝php的時候會自動安裝apache2導致往這里寫了這個index.html靜態文件,哪怕是卸載了Apache2,但是由nginx提供的index.html還是變成了Apache的)
3、配置php-frm
(1)編輯fpm配置文件
sudo gedit /etc/php/7.2/fpm/php.ini
#修改參數如下:
# 778行 ;cgi.fix_fathinfo=1 更改為 cgi.fix_fathinfo=1
sudo gedit /etc/php/7.2/fpm/pool.d/www.conf
#修改參數如下
# 36行 listen = 127.0.0.1:9000 (原先值是/run/php/php7.2-fpm.sock)
# 62行 listen.allowed_clients = 127.0.0.1(這個根據自己情況設置,可以不管他)
# 113行 pm.max_children = 50
# 139行 pm.max_requests = 500
# 340行 request_terminate_timeout = 0
# 344行 rlimit_files = 1024
# 以上部分,包括但不限於去除前面的";"(注,上面的我就改了個listen)
(2)編寫php測試程序
創建文件: /var/www/html/index.php,內容如下:
<h1>
<span> hello, this is test page </span>
</h1>
創建文件: /var/www/html/info.php,內容如下:
<?php phpinfo(); ?>(如果全是php代碼沒有html似乎可以不用后面的?>)
(3)配置nginx
sudo gedit /etc/nginx/sites-available/default
第44行,在index.html前面加入index.php
第56-62行,用如下內容替換(不是替換,其實就是取消注釋):(這里其實只需要保留fastcgi_pass 127.....和一個include snippets/...的配置即可,其他的nginx都幫我們寫好了)
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
(4)重啟服務
sudo service php7.2-fpm restart
sudo service nginx restart (-s reload即可)【這兩個都是會開啟自動啟動的(如果是用apt安裝的話)】
【個人修改注:它的原理其實就是nginx發現是php文件然后發現有配置這種文件的cgi,然后就將它發送給php-fpm(9000端口)去處理返回一個靜態數據,然后再由nginx返回,其實這個時候php-fpm就已經類似我們的后端服務了,而.php文件就類似后端服務的模板文件,不過區別在於.php文件是由nginx獲取給php處理,而java后端的模板文件則是nginx將一個請求轉發給java服務,java服務發現這個請求是請求模板文件,然后處理為靜態文件返回】(所以真心沒看出來PHP的優勢是什么,為啥那么多公司用。。)
【可以在/var/www/html/里創建一個比如叫shopping-app的目錄,表示這里存放的是shopping-app這個應用的前端文件,同時配置一個nginx配置來訪問此目錄所有文件,然后將這個目錄作為php項目的目錄,在里面添加各種.php文件
,這樣就能用vscode來打開該目錄進行PHP文件開發了】
三、檢驗成果
1、瀏覽器訪問 http://127.0.0.1 或者 http://127.0.0.1/index.php
2、瀏覽器訪問 http://127.0.0.1/info.php
3、瀏覽器訪問 http://127.0.0.1/index.nginx-debian.html