Я установил nginx через apt-get install nginx
в Ubuntu 14.04. Таким образом, настройка по умолчанию включает конфигурации из каталога /etc/nginx/conf.d/
include /etc/nginx/conf.d/*.conf;
В моей папке conf.d у меня есть следующие два файла (site1.conf и site2.conf)
server {
listen 80;
location /site1/ {
proxy_pass http://127.0.0.1:3000/;
}
}
и
server {
listen 80;
location /site2/ {
proxy_pass http://127.0.0.1:3001/;
}
}
Когда я приезжаю http://x.x.x.x/site1/
, Я получаю ответ от сервера, работающего на порту 3000, как и ожидалось. Когда я приезжаю http://x.x.x.x/site2/
но я получаю 404. В журнале ошибок написано
2014/07/29 09:37:51 [error] 23060#0: *9 "/usr/share/nginx/html/site2/index.html" is not found (2: No such file or directory), client: 5.57.55.92, server: , request: "GET /site2/ HTTP/1.1", host: "217.147.85.96"
что указывает на то, что он использует конфигурацию по умолчанию, считая site2 папкой, в которой можно найти файл index.html.
Почему это так? Я не могу найти никаких причин, почему это было бы так. Я попытался установить server_name для обеих конфигураций, но это не имело значения.
Обе location
директивы должны быть в одной конфигурации vhost.
Разные vhosts предназначены для того, чтобы один и тот же сервер мог обслуживать разные имена хостов и / или протоколы. То, что вы сделали эффективно, - это создание двух виртуальных хостов, но без возможности различать их, например с server_name
директива. Поскольку он не может их различить, nginx
просто использует первую конфигурацию vhost по умолчанию и пытается сопоставить запрос, но поскольку нет ни одного каталога с именем site2
ни location
директива, она не может служить этому.