nginx 使用 php-fpm 下載 php 文件,而不是在 mac os x(本地環境)上執行它們
我無法讓 PHP 文件在我的本地開發機器上執行。我似乎已經成功安裝了nginx並且php-fpm似乎也已正確安裝,並且正在執行,但不能完全弄清楚為什麼 PHP 文件被下載而不是被執行。
在經歷了很多很多小時的挫折之後,我認為最好問問以前可能做過這件事的人!我已盡力提供所有資訊,但如果有任何可能有幫助或我遺漏的資訊,請隨時在評論中提問。
***請注意:***仔細閱讀我遇到的問題。我之所以這麼說是因為我已經閱讀了Google可以給我的幾乎所有與這個問題相關的文章,並嘗試了幾種不同的方法、修復、建議、重新安裝、配置等。他們每個人都無法提供幫助修復甚至調試我遇到的問題。換句話說,這絕對不是一個重複的問題。我花了幾個小時閱讀以確保!
我已經使用. _ _
https://github.com/josegonzalez/homebrew-php
好朋友brew doctor
確認一切都是最新的,我已經安裝了所有必要的東西(XQuartz、Xcode 命令行工具等)。以下是一些在嘗試了解我的設置時可能有用的文件摘錄:
php-fpm 日誌
tail -f /usr/local/var/log/php-fpm.log
[24-Dec-2013 00:05:59] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root [24-Dec-2013 00:05:59] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root [24-Dec-2013 00:05:59] NOTICE: fpm is running, pid 31745 [24-Dec-2013 00:05:59] NOTICE: ready to handle connections
如果我錯了,請糾正我,但這似乎表明 php-fpm 執行正常
我的 php-fpm 配置文件中的唯一變化
/usr/local/etc/php/5.4/php-fpm.conf
從第 145 行開始; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = myusername group = staff
我將其更改為的原因
myusername:staff
是因為這就是 user:group 在我的~
目錄中的設置方式。這可能是問題的一部分,我不確定。我確實遇到了所有常見的文件權限問題,並且可以確認我在 /clients/mywebsite/local 中的所有文件都使用
chown -R myusername:staff ./
and修復了這個問題chmod -R 0755 ./
。考慮到這一點,希望這不應該是權限問題。nginx配置文件
/usr/local/etc/nginx/nginx.config
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 8080; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.php index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443; # server_name localhost; # ssl on; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols SSLv2 SSLv3 TLSv1; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
我從位於 /usr/local/etc/nginx/nginx.conf.default 的原始文件中更改的唯一部分是將 index.php 添加到
location / {
塊中並取消註釋塊以允許對文件location ~ \.php$ {
進行 php-fpm 處理.php
還值得一提的是,我創建了一個
/usr/local/etc/nginx/conf.d/mywebsite.conf
文件並添加127.0.0.1 mywebsite.local
到我的主機文件中,該文件允許我訪問http://mywebsite.local
.Nginx 似乎設置正確,因為我可以訪問文件夾
http://mywebsite.local/test.html
中的絕對文件,/clients/mywebsite/local/web/test.html
但對於 PHP 文件,這是另一回事。它們只是被瀏覽器下載為 PHP 文件,根本沒有被執行。我的網站配置文件
/usr/local/etc/nginx/conf.d/mywebsite.conf
server { listen 80; listen [::]:80 default ipv6only=on; server_name mywebsite.local; location / { root /clients/mywebsite/local/web; index index.php index.html index.htm; } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
我假設這裡的任何部分都將被覆蓋,
http://mywebsite.local
並且這裡沒有的任何部分都取自普通/usr/local/etc/nginx/nginx.conf
文件。值得一提的是,我的
/usr/local/var/log/nginx/error.log
文件沒有返回任何錯誤。每次對.conf
文件進行更改時,我都會使用該命令重新啟動 nginx,並且sudo nginx -s reload
可以確認程序正在執行。php-fpm``nginx
我還閱讀了有關更改
127.0.0.1:9000
為/var/run/php5-fpm/php5-fpm.sock
which 似乎不在我的配置中的資訊。我嘗試使用find
甚至使用ack
來搜尋它的存在,但它不在我的機器上。我還閱讀了有關將此埠更改為其他內容的資訊,:9000
除非它已被使用。由於這是我的第一次安裝,我很確定情況並非如此,但我將如何進行測試呢?我還閱讀了有關位於其中的另一個文件,
/usr/share/nginx/html
但這又不存在。好吧,你已經讀到這裡了,謝謝!如果您無論如何都能提供幫助,我真的很感謝您花時間這樣做。
除了在 nginx.conf 文件中指定 PHP 部分,您可以在預設文件中指定伺服器位置(在站點可用目錄中)並重新載入或重新啟動 nginx:
server { listen 80; listen [::]:820; #ipv6only=on; root /var/www/; ##assuming your PHP application is in /var/www/ index index.php index.html index.htm; server_name PHPApp; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
此外,請確保您的 nginx.conf 文件具有以下指令:
include /etc/nginx/sites-enabled/*;