Konfiguracja Nginx: dwie aplikacje w tej samej domenie


Mam dwie aplikacje: frontend HTML + JS i backend PHP. Chciałbym skonfigurować Nginx tak, aby oba były obsługiwane z tej samej domeny. Żądania zaplecza są tworzone przy użyciu adresów URL zaczynających się od
/api
.
Moja próba była taka:
server {
root/path/to/frontend;
index index.html;
server_name example.com; location/{
try_files $uri $uri//index.html;
} location/api {
alias/path/to/backend;
index index.php;
try_files $uri $uri//index.php;
} location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}

Jednak dla wszystkich żądań do zaplecza otrzymuję błąd 404: główny scenariusz jest nieznany.
Czy jest sposób, aby osiągnąć to, co próbuję tutaj zrobić? W jaki sposób?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Popełniłeś powszechny błąd, w którym ludzie nie rozumieli, jak działa Nginx. Pamiętaj o następujących kwestiach:

nginx zawsze obsługuje żądanie z

Pojedynczy
           location
tylko blok

.
Proponuję (ponownie) przeczytać następujące informacje:

Jak Nginx obsługuje żądanie
http://nginx.org/en/docs/http/ ... .html
Teraz, patrząc na twoją konfigurację, żądania serwera powinny być obsługiwane przez dwie lokalizacje:
  •            location/api         
  •            location ~\.php$         

Następujący
           location
http://nginx.org/en/docs/http/ ... ation
dokumentacja, pierwsza to tzw

prefiks

miejsce, a drugie -

Wyrażenie regularne

(wyrażenie regularne) jeden. nginx sprawdzi oba, ale ostatecznie wybierze tylko jeden, który w twoim przypadku jest wyrażeniem regularnym.
Teraz, podczas przetwarzania go, nginx przekieruje żądanie do
/path/to/frontend/<yourFile>.php
w PHP, budując ścieżkę z
         root/path/to/frontend
ponieważ jest to jedyne określone. Następnie zaplecze nie może znaleźć określonego pliku.
Możesz spróbować tego:
location/api {
alias/path/to/backend;
index index.php;
try_files $uri $uri//index.php; location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # Useless? Request always ending up with '.php' here...
fastcgi_index index.php; include fastcgi_params; # Try to secure this block, which might lead to arbitrary code execution.
}
}

Jeśli chodzi o brak bezpieczeństwa, pod koniec października wygłosiłem wykład na temat nginx i PHP-FPM na stronie nginx.conf 2014. Dostępne slajdy:

https://rosset.net/LAMP_just_died.pptx
https://rosset.net/LAMP_just_died.pptx... Film będzie dostępny wkrótce.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się