說明
php有許多開源項目比較好像,在自己的機器上用Docker搭建了很多。
每個docker都是跑了個Apache,每個docker里面都有apache。
這樣好像有點浪費資源,而平時都是用Nginx,所以研究了用nginx運行php
中間竟然碰到許多坑,而回過頭來看,其實都很簡單。
nginx運行php的原理
nginx不能解析php,要和php-fpm配置使用。nginx負責將php的請求轉給php-fpm解析處理,然后返回響應結果
nginx運行php會遇到哪些坑
錯誤的提示有很多,最基本有"File not found"、"403"、"404"、"nginx no input file specified"等等
總之能試出許多錯誤。**而歸結到底,只有一個根本原因“權限”**
而最好的方法是,直接把nginx和php-fpm設置為root用戶運行
測試環境
|對象|版本|
|--|--|
| 操作系統 | fedora27 |
| nginx | 1.12.1 |
| php-fpm | php7 |
配置方法
* 安裝nginx
yum install nginx
* 安裝php-fpm
yum install php-fpm
經過上面兩步, php-fpm會自動將nginx配置好,只要將php放到/usr/share/nginx/html目錄就可以運行。但是我不想放在這個目錄。
* 設置php-fpm以root用戶運行
1.打開文件 /usr/lib/systemd/system/php-fpm.service
2.在ExecStart 最后面加上參數-R標識可以用root身份運行(php-fpm默認不能用root運行)
(有可能改了php-fpm.server文件不能運行,請運行systemctl reload重新加載)
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=notify
ExecStart=/usr/sbin/php-fpm --nodaemonize -R
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3.打開文件/etc/php-fpm.d/www.conf
4.將修改user和group為root
user=root
group=root
* 設置nginx以root身份運行
1.打開/etc/nginx/nginx.conf
2.將user改為root
* 配置自己的php項目
將下面內容放到/etc/nginx/conf.d/目錄下
server {
listen 8080;
server_name localhost;
root /home/xxxxx; #改成自己的地址
index /_h5ai/public/index.php; #改成自己的php首頁
include /etc/nginx/default.d/*.conf; #使用已經配置好的location
location / {
}
}
排錯方法
如果在配置過程中,遇到了錯誤。用什么方法調試呢?
* nginx調試方法
nginx的任務是把php的路徑調對。可以先把php-fpm注釋掉,專門調nginx,當能從瀏覽器下載php文件,說明配置正確。
* php-fpm調試方法
用命令運行php-fpm會有清晰的輸出
/usr/sbin/php-fpm --nodaemonize -R
總結
nginx運行php總的說來很簡單,由于權限問題,會導致遇到許多的坑。
實際很多情況下,都是給內部用,直接用root就可以。當然這樣方法在正式環境不安全。
