Вот в чем проблема: (Я новичок в 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» или «alias», а также с fast-cgi php...
Спасибо за чтение/помощь/советы
решение1
В вашей конфигурации есть несколько проблем:
- Вы указываете
root
на уровне сервера, а затем указываетеalias
вlocation
блоках. Это само по себе не является неправильным, но легко вызывает путаницу.
Если все файлы вашего проекта находятся в E:/www
, я бы использовал их, удалил бы оба location
блока с alias
блоками и настроил бы только root E:/www
внутри server
блока.
- Вы указываете
root
директиву внутри вашего.php
блока обработки. Это не сработает.
Если у вас нет особых требований к вашему веб-серверу, я бы использовал следующую настройку для 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 для выполнения.