說(shuō)明
php有許多開源項(xiàng)目比較好像,在自己的機(jī)器上用Docker搭建了很多。
每個(gè)docker都是跑了個(gè)Apache,每個(gè)docker里面都有apache。
這樣好像有點(diǎn)浪費(fèi)資源,而平時(shí)都是用Nginx,所以研究了用nginx運(yùn)行php
中間竟然碰到許多坑,而回過(guò)頭來(lái)看,其實(shí)都很簡(jiǎn)單。
nginx運(yùn)行php的原理
nginx不能解析php,要和php-fpm配置使用。nginx負(fù)責(zé)將php的請(qǐng)求轉(zhuǎn)給php-fpm解析處理,然后返回響應(yīng)結(jié)果
nginx運(yùn)行php會(huì)遇到哪些坑
錯(cuò)誤的提示有很多,最基本有"File not found"、"403"、"404"、"nginx no input file specified"等等
總之能試出許多錯(cuò)誤。**而歸結(jié)到底,只有一個(gè)根本原因“權(quán)限”**
而最好的方法是,直接把nginx和php-fpm設(shè)置為root用戶運(yùn)行
測(cè)試環(huán)境
|對(duì)象|版本|
|--|--|
| 操作系統(tǒng) | fedora27 |
| nginx | 1.12.1 |
| php-fpm | php7 |
配置方法
* 安裝nginx
yum install nginx
* 安裝php-fpm
yum install php-fpm
經(jīng)過(guò)上面兩步, php-fpm會(huì)自動(dòng)將nginx配置好,只要將php放到/usr/share/nginx/html目錄就可以運(yùn)行。但是我不想放在這個(gè)目錄。
* 設(shè)置php-fpm以root用戶運(yùn)行
1.打開文件 /usr/lib/systemd/system/php-fpm.service
2.在ExecStart 最后面加上參數(shù)-R標(biāo)識(shí)可以用root身份運(yùn)行(php-fpm默認(rèn)不能用root運(yùn)行)
(有可能改了php-fpm.server文件不能運(yùn)行,請(qǐng)運(yùn)行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
* 設(shè)置nginx以root身份運(yùn)行
1.打開/etc/nginx/nginx.conf
2.將user改為root
* 配置自己的php項(xiàng)目
將下面內(nèi)容放到/etc/nginx/conf.d/目錄下
server {
listen 8080;
server_name localhost;
root /home/xxxxx; #改成自己的地址
index /_h5ai/public/index.php; #改成自己的php首頁(yè)
include /etc/nginx/default.d/*.conf; #使用已經(jīng)配置好的location
location / {
}
}
排錯(cuò)方法
如果在配置過(guò)程中,遇到了錯(cuò)誤。用什么方法調(diào)試呢?
* nginx調(diào)試方法
nginx的任務(wù)是把php的路徑調(diào)對(duì)。可以先把php-fpm注釋掉,專門調(diào)nginx,當(dāng)能從瀏覽器下載php文件,說(shuō)明配置正確。
* php-fpm調(diào)試方法
用命令運(yùn)行php-fpm會(huì)有清晰的輸出
/usr/sbin/php-fpm --nodaemonize -R
總結(jié)
nginx運(yùn)行php總的說(shuō)來(lái)很簡(jiǎn)單,由于權(quán)限問(wèn)題,會(huì)導(dǎo)致遇到許多的坑。
實(shí)際很多情況下,都是給內(nèi)部用,直接用root就可以。當(dāng)然這樣方法在正式環(huán)境不安全。