Problemy z konfiguracją Nginx 1.8

2

Oto problem: (Jestem nowy w NGinx, poczytałem o tym, ale jeszcze nie znalazłem mojego działającego rozwiązania).

Jestem w systemie Windows.

System plików moich projektów znajduje się tam:

E:/www/

oto folder projektu, do którego spróbuję dotrzeć później w tym przykładzie:

E:/www/projectTest

Mam serwer apache działający poprawnie. Chciałbym skonfigurować serwer Nginx równolegle, dlatego skonfigurowałem mojego nginx przy użyciu innego portu (patrz plik konfiguracyjny poniżej).

Istnieją pliki Nginx:

E:/nginx/

Skopiowałem tam php:

E:/nginx/php/

Oto mój przykład „index.php”. Umieszczam w bieżących folderach, aby przetestować konfigurację php i nginx:

<?php
    echo "THIS IS A TEST";
?>

Oto mój plik nginx.conf (usunąłem skomentowane linie):

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;
        }
    }
}

Wygląda na to, że wszystko działa poprawnie, co oznacza, że ​​jeśli chcę dotrzeć do mojego „localhost: 8111 / index.php” lub „localhost: 8111 / projectTest / index.php”, otrzymuję „index.php”, który tam umieściłem tekst „TO JEST TEST” pojawia się na moim ekranie.

ALE :

Zauważyłem, że kiedy otwieram Firebug w celu przetestowania mojej strony, zawsze otrzymuję ten komunikat o błędzie (NAWET JEŚLI UZYSKĘ MOJĄ STRONĘ):

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

Oto jak uruchamiam Nginx w linii poleceń:

E:\nginx>nginx.exe
E:\nginx\php>php-cgi.exe -b 127.0.0.1:9000 -c e:/nginx/php/php.ini

w php.ini:

doc_root = "E:/www"
extension_dir = "E:/nginx/php/ext"
error_reporting = E_ALL

Coś musi być nie tak z moją konfiguracją nginx, pochodzę z Apache, więc jestem naprawdę mylony z tym plikiem .conf, czytam wiele rzeczy na ten temat, ale nadal nie czuję się komfortowo z „rootem” lub „ alias ”, a wraz z szybką aplikacją php php ...

Dziękujemy za przeczytanie / pomoc / porady

Julo0sS
źródło

Odpowiedzi:

1

W twojej konfiguracji występuje kilka problemów:

  1. Podajesz rootna poziomie serwera, a następnie podajesz aliasw locationblokach. To samo w sobie nie jest złe, ale łatwo powoduje zamieszanie.

Jeśli wszystkie pliki projektu są poniżej E:/www, użyłbym ich, aby usunąć oba locationbloki z aliasblokami i skonfigurować je tylko root E:/wwwwewnątrz serverbloku.

  1. W bloku przetwarzania określa się rootdyrektywę .php. To nie zadziała.

Jeśli nie masz żadnych specjalnych wymagań dotyczących serwera WWW, użyłbym tej konfiguracji dla 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;
}

Przy tej konfiguracji nginx wyszuka twoje pliki, które mają być dostarczone z E:/wwwkatalogu, i przekaże wszelkie pliki PHP do PHP-FPM w celu wykonania.

Tero Kilkanen
źródło
dzięki za odpowiedź. Ale dla php: nie mam żadnego folderu / etc /. Moje fastcgi_params znajduje się gdzieś w folderze / nginx / php. A jeśli chodzi o fastcgi_param $ document_root $ fastcgi_script_name, co to znaczy $ document_root?
Julo0sS,
Twoja konfiguracja rozwiązała mój problem. Potrzebujesz więcej wyjaśnień, aby naprawdę zrozumieć blok php, jeśli potrafisz :)
Julo0sS
Ach, przepraszam, właśnie skopiowałem tutaj moją konfigurację Linux-a Nginx. $document_rootoznacza po prostu ścieżkę bieżącego katalogu głównego określonego w innym bloku lokalizacji. $fastcgi_script_nameoznacza wtedy nazwę pliku skryptu PHP na ścieżce.
Tero Kilkanen
Ok, dzięki za te szczegóły. Powodem, dla którego próbuję skonfigurować serwer Nginx, jest użycie go do ws: // czy masz w tym trochę wiedzy? możemy porozmawiać (jeśli masz trochę czasu)?
Julo0sS,
Niestety nie mam doświadczenia z ws: //
Tero Kilkanen