Muszę udostępniać aplikację za pośrednictwem serwera aplikacji pod adresem 8080
, a moje pliki statyczne z katalogu bez dotykania serwera aplikacji. Konfiguracja nginx, którą mam, jest mniej więcej taka ...
# app server on port 8080
# nginx listens on port 8123
server {
listen 8123;
access_log off;
location /static/ {
# root /var/www/app/static/;
alias /var/www/app/static/;
autoindex off;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Teraz przy tej konfiguracji wszystko działa dobrze. Należy zauważyć, że root
dyrektywa została skomentowana.
Jeśli aktywuję root
i dezaktywuję alias
- przestanie działać. Jednak po usunięciu spływu /static/
z root
niego zacznie ponownie działać.
Czy ktoś może wyjaśnić, co się dzieje. Również proszę wyjaśnić jasno plików i zgłasza jakie są różnice między root
i alias
oraz ich celów.
log_format scripts '$document_root | $uri | > $request';
dohttp
sekcji iaccess_log /var/log/nginx/scripts.log scripts;
doserver
sekcji konfiguracji nginx ..nginx: [emerg] invalid number of arguments in "alias" directive
, a serwer przestał działać podczas restartu.jak powiedzieć @treecoder
Obraz jest wart tysiąca słów
dla
root
:dla
alias
:źródło
W twoim przypadku możesz użyć
root
dyrektywy, ponieważ$uri
częśćlocation
dyrektywy jest taka sama jak ostatniaroot
część dyrektywy.a
root
dyrektywa dołączy$uri
do ścieżki.źródło
Szybki dodatek do bardzo pomocnej odpowiedzi @ good_computer. Chciałem zastąpić katalog główny adresu URL folderem, ale tylko wtedy, gdy pasował on do podfolderu zawierającego pliki statyczne (które chciałem zachować jako część ścieżki).
Na przykład jeśli żądany plik znajduje się w
/app/js
lub/app/css
, sprawdź/app/location/public/[that folder]
.Mam to do pracy przy użyciu wyrażenia regularnego.
źródło
alias
służy do zastąpienia ścieżki części lokalizacji (LPP) w ścieżce żądania, podczas gdyroot
poprzedza się ją ścieżką żądania.Są dwa sposoby mapowania ścieżki żądania do końcowej ścieżki pliku.
alias
może być użyte tylko w bloku lokalizacji i zastąpi to na zewnątrzroot
.alias
iroot
nie można ich używać razem w bloku lokalizacji.źródło
Blok serwera, aby uruchomić statyczną stronę na nginx.
źródło
Innymi słowy: w skrócie: w przypadku
root
podanego argumentu lokalizacji należy do ścieżki systemu plików i identyfikatora URI . Z drugiej strony - dlaalias
dyrektywy argument instrukcji lokalizacji jest tylko częścią URIWięc,
alias
to inna nazwa, która odwzorowuje pewną URI do określonej ścieżki w systemie plików, natomiastroot
Dokleja lokalizacji argumentu do toru głównego podanego jako argument doroot
dyrektywy.źródło