Назад | Перейти на главную страницу

Nginx игнорирует мою вторую директиву сервера

Я установил 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 директива, она не может служить этому.