問題是這樣的:(我是 NGinx 的新手,閱讀過相關內容,但還沒有找到我的工作解決方案。)
我在Windows系統上。
我的專案檔案系統位於那裡:
E:/www/
這是我稍後將在本範例中嘗試存取的專案資料夾:
E:/www/projectTest
我有一個運作良好的 apache 伺服器。我想並行設定一個 Nginx 伺服器,這就是我使用另一個連接埠配置 nginx 的原因(請參閱下面的設定檔)。
Nginx 檔案在那裡:
E:/nginx/
我在那裡複製了一個 php :
E:/nginx/php/
這是我放置在當前資料夾中的範例“index.php”來測試我的 php 和 nginx 配置:
<?php
echo "THIS IS A TEST";
?>
這是我的 nginx.conf 檔案(我刪除了註解行):
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8111;
server_name localhost;
root E:/nginx/;
index index.php index.html index.htm;
charset utf-8;
location / {
alias E:/www/;
}
location /projectTest/ {
alias E:/www/projectTest/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root ../www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/conf/$fastcgi_script_name;
include fastcgi_params;
}
}
}
看起來一切都運作良好,這意味著如果我想訪問我的“localhost:8111/index.php”或“localhost:8111/projectTest/index.php”,我會得到我放置在那裡的“index.php 」和我的螢幕上出現文字「這是一個測試」。
但 :
我注意到,當我打開 Firebug 來測試我的頁面時,我總是收到此錯誤訊息(即使我獲得了我的頁面):
NetworkError: 404 Not Found - http://localhost:8111/
//Same error when I call index.php in url :
NetworkError: 404 Not Found - http://localhost:8111/index.php
//Same error when I call my projectTest folder :
NetworkError: 404 Not Found - http://localhost:8111/projectTest/
//Same error when I call my index.php in projectTest url :
NetworkError: 404 Not Found - http://localhost:8111/projectTest/index.php
以下是我在命令列中啟動 Nginx 的方法:
E:\nginx>nginx.exe
E:\nginx\php>php-cgi.exe -b 127.0.0.1:9000 -c e:/nginx/php/php.ini
在 php.ini 中:
doc_root = "E:/www"
extension_dir = "E:/nginx/php/ext"
error_reporting = E_ALL
我的 nginx 設定一定有問題,我來自 Apache,所以我真的對這個 .conf 檔案感到困惑,我讀了很多關於它的內容,但我仍然對「root」或「別名」值,以及fast-cgi php 的東西.....
感謝您的閱讀/幫助/建議
答案1
您的配置有幾個問題:
- 您
root
在伺服器層級上指定,然後alias
在location
區塊中指定。這本身並沒有錯,但很容易造成混亂。
如果您的所有專案檔案都在 下E:/www
,我將使用這些刪除location
區塊與區塊,並且僅在區塊內部alias
設定。root E:/www
server
- 您在處理區塊
root
內指定指令.php
。那是行不通的。
如果您對 Web 伺服器沒有任何特殊要求,我會為 PHP 使用以下設定:
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
透過此設置,nginx 將從目錄中找到要提供服務的文件E:/www
,並將所有 PHP 文件傳遞給 PHP-FPM 執行。