Мне нужно обслуживать мое приложение через сервер приложений по адресу 8080
и статические файлы из каталога, не касаясь сервера приложений. Конфиг nginx у меня есть что-то вроде этого ...
# 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;
}
}
Теперь с этим конфигом все работает нормально. Обратите внимание, что root
директива закомментирована.
Если я активирую root
и деактивирую alias
- он перестает работать. Однако, когда я удаляю трейлинг /static/
из, root
он снова начинает работать.
Может кто-нибудь объяснить, что происходит. Также , пожалуйста , объясните ясно и пространно , каковы различия между root
и alias
, и их цель.
log_format scripts '$document_root | $uri | > $request';
вhttp
раздел иaccess_log /var/log/nginx/scripts.log scripts;
вserver
раздел конфигурации nginx ..nginx: [emerg] invalid number of arguments in "alias" directive
, и сервер перестал работать во время перезапуска.как сказать @treecoder
Одна картинка стоит тысячи слов
для
root
:для
alias
:источник
В вашем случае вы можете использовать
root
директиву, потому что$uri
частьlocation
директивы такая же, как и в последнейroot
части директивы.и
root
директива добавит$uri
к пути.источник
Просто быстрое дополнение к очень полезному ответу @ good_computer, я хотел заменить корень URL-адреса на папку, но только если он соответствовал подпапке, содержащей статические файлы (которую я хотел сохранить как часть пути).
Например, если запрошенный файл находится в
/app/js
или/app/css
, посмотрите в/app/location/public/[that folder]
.Я получил это, чтобы работать с помощью регулярных выражений.
источник
alias
используется для замены пути части местоположения (LPP) в пути запроса, в то времяroot
как используется для добавления к пути запроса.Это два способа сопоставить путь запроса с окончательным путем к файлу.
alias
может использоваться только в блоке местоположения, и он переопределит внешнийroot
.alias
иroot
не может использоваться в блоке местоположения вместе.источник
Блок сервера, чтобы жить статической страницей на nginx.
источник
Другими словами, соблюдая это кратко: в случае
root
, указанный аргумент location является частью пути и URI файловой системы . С другой стороны - дляalias
директивы аргумент оператора location является частью только URIТаким образом,
alias
это другое имя, которое отображает определенный URI на определенный путь в файловой системе, тогда какroot
добавляет аргумент location к корневому пути, указанному в качестве аргументаroot
директивы.источник