先總結(jié)下這個問題出現(xiàn)的提示
- 訪問php頁面顯示file not found
- 查看error.log日志文件提示"Primary script unknown" while reading response header from upstream"
描述下我操作的環(huán)境背景..
- 初學(xué)Linux,嘗試搭建LNMP環(huán)境
- 直接用root用戶操作(因為都是學(xué)習,我也就懶得創(chuàng)用戶了,但這也是導(dǎo)致我這次問題特別的原因)
- 因為是root用戶,我直接把nginx的安裝目錄<b>裝在了root目錄下</b>
百度的情況:
-
nginx配置文件中配置的php文件指向的目錄不對,導(dǎo)致找不到文件
這種情況應(yīng)該這么做,注意代碼中的{{{web目錄}}}改成你對應(yīng)的web目錄location ~ .*\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME {{{web目錄}}}$fastcgi_script_name; include fastcgi.conf; } 訪問web目錄的權(quán)限不夠
那這個你就相應(yīng)的提高需要的權(quán)限吧,-rwxrwxrwx,第一個-是文件類型,然后前三個rwx是所屬用戶的權(quán)限,中間三個是所屬用戶組的權(quán)限,后三個是其他用戶組的權(quán)限
我的情況:
默認php-fpm的配置文件在你的php安裝目錄下 路徑為xxx/etc/php-fpm.d/www.conf,vim打開可以看到里面有
user = nobody
group = nobody
這個設(shè)置,這就是說php-fpm是以nobody用戶啟動的,查看命令為ps -ef | grep php-fpm;
再看看nginx進程的用戶,是root(我只有root用戶)
再看了這篇文章后http://blog.csdn.net/qq_27754983/article/details/68195727 受了啟發(fā),但是我是root用戶,所以這里
user = nobody
group = nobody
就都改成了
user = root
group = root
然后啟動出錯,提示說請吧user group改為root以外的用戶,然后我糾結(jié)了一段時間,又去百度了,結(jié)果還真有一定改成root用戶開啟的方法,就是不推薦
在php安裝目錄下/sbin/下執(zhí)行./php-fpm -R,注意大寫R(這是強行以root用戶開啟進程)
然后再查看ps -ef | grep php-fpm和ps -ef | grep nginx,兩個的用戶是一樣的,訪問成功了。
總結(jié)
一開始我就覺得我這個一定是路徑問題,然后就一直改root指向的目錄,又是剛學(xué)linux,什么移動啊復(fù)制啊改名啊,頭很大.
后來想起來去看eroor.log,去百度里面的關(guān)鍵字,結(jié)果大部分說是權(quán)限問題
我就把整個nginx目錄和所有網(wǎng)頁文件設(shè)為了777權(quán)限。還是不行。
直到找到了這篇文章http://blog.csdn.net/qq_27754983/article/details/68195727 我才去試著改了php-fpm的用戶,最后是成功了。這就說明了的確是權(quán)限問題。
但直到我剛剛再去檢查一遍權(quán)限的時候。/root/這個文件夾的權(quán)限是550,就是說其他用戶組是根本進不來的。搜嘎。終于通了。
這一個下午過去了,但是感覺更了解了linux,nginx,php-fpm
附上今天研究的一點點點nginx配置的說明
多余的配置我刪了,反正我也不懂 , 這些我已經(jīng)夠搭起最基礎(chǔ)的php了,
馬上就要去召喚師峽谷了,寫注釋的時候發(fā)現(xiàn)還有很多不確定的,就大致看看吧~
user root root;#表示用什么用戶運行--大概吧
worker_processes 1;#work的進程數(shù)
events {
worker_connections 1024;#一個進程最大連接數(shù)
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;#訪問超時限制
root html;#吧本來在localtion里面的root參數(shù)提取出來,就在所有的location下用$document_root生效
index index.html index.php;#同理
server {
listen 80;#監(jiān)聽的端口
server_name localhost;#主機名
location / {
root html;
index index.php index.html;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#本來是沒有的,估計不用加,可以刪了,因為php下面配置了
}
location ~ /file/.* {#自己試試的一個路徑,吧 /file/xxx.xxx的訪問路徑定義到別的地方
root /root/www/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;#這個是php-fpm監(jiān)聽的端口,固定的,除非你去改php-fpm的配置文件
fastcgi_index index.php;#應(yīng)該是默認主頁吧
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#這里的$document_root指代最外層的root html;
include fastcgi.conf;#引用外部文件
}
}
}#話說當前目錄這里不用加./的