问题如下:(我是 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”,并且屏幕上会出现文本“THIS IS A TEST”。
但 :
我注意到,当我打开 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”或“alias”值以及 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 进行执行。