#nginx #nginx-config #nginx-location
#nginx #nginx-config #nginx-расположение
Вопрос:
У меня следующая структура каталогов в файловой системе моего веб-сервера:
-srv
---someDir
| ---mySite
---someOtherDir
---yourSite
Оба, mySite
и yourSite
, должны быть доступны с одного и того же nginx
веб-сервера в разных каталогах (путь в адресной строке браузера), например
http://myServer/mySite и
http://myServer/yourSite
Я пытался иметь одну server
запись в конфигурации с двумя location
блоками (с различными настройками), но ни один из них не дал ожидаемого результата — ни с корневой записью «уровня сервера», ни без. Например (nginx.conf):
http {
...
server {
root /srv/;
location = /mySite {
root /srv/someDir/mySite/;
}
}
Как я уже сказал, все с разными комбинациями root
и try_files
т. Д.
Я подумал, что должно быть возможно иметь что-то вроде
...
server {
location = /mySite {
root /srv/someDir/mySite/;
}
location = /yourSite {
root /srv/someDir/yourSite/;
}
}
Где моя ошибка?
Ответ №1:
Самое простое решение — это когда у вас есть полный контроль над файловой системой и пространствами имен URI, так что приложение in /path/to/root/foo/index.html
доступно с помощью URI /foo/
, а приложение in /path/to/root/bar/index.html
доступно с помощью URI /bar/
.
В этом случае location
блоки не нужны, а значение root
имеет /path/to/root
значение, потому что путь к файлу создается путем объединения этого значения с URI. Подробности см. В этом документе.
Например:
server {
server_name example.com;
root /path/to/root;
}
Вышеупомянутый серверный блок оштрафует application foo at http://example.com/foo/
и application bar at http://example.com/bar/
.
В случае, когда элемент каталога верхнего уровня имеет имя, отличное от имени элемента URI верхнего уровня, вам нужно будет использовать alias
директиву внутри location
блока. Подробности см. В этом документе.
Например:
server {
server_name example.com;
location /foo/ {
alias /path/to/foos/directory/;
}
location /bar/ {
alias /path/to/bars/directory/;
}
}
И location
значение, и alias
значение должны заканчиваться на /
, или ни одно из них не должно заканчиваться на /
.
Обратите внимание, что location
директива используется без =
оператора, который используется только для сопоставления с одним URI. Подробности см. В этом документе.
Комментарии:
1. Я не понимаю первый пример, поскольку у меня может быть только одна
root
запись вserver
блоке, как это будет работать с двумя приложениями? Однако сработал второй пример (после настройкиbase href
элемента в моем html). Спасибо, что предоставили мне решение 🙂2. Если два приложения используют один и тот же общий корень, вам понадобится только один
root
оператор, который указывает на родительский каталог.