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

Сопоставление местоположения Nginx работает только при сопоставлении корня

Я пытаюсь настроить nginx, чтобы у меня было два места. Один для моего API узла, а другой для моего Jenkins CI.

http://my_ip/api должен указывать на мой сервер узла и http://my_ip/jenkins должен указать на моего Дженкинса CI

У меня есть этот серверный блок.

server {
listen 80;

server_name my_ip_address;

location /api {
    proxy_pass http://127.0.0.1:1234;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /jenkins {

   proxy_set_header        Host $host;
   proxy_set_header        X-Real-IP $remote_addr;
   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header        X-Forwarded-Proto $scheme;

   proxy_pass          http://localhost:8080;
   proxy_read_timeout  90;

}
}

Этот конфиг не работает. Но если я использую какое-либо из этих местоположений, соответствующих root, он работает.

Это работает без проблем. И то же самое, если я использую блок местоположения моего узла api с / только.

location / {

   proxy_set_header        Host $host;
   proxy_set_header        X-Real-IP $remote_addr;
   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header        X-Forwarded-Proto $scheme;

   proxy_pass          http://localhost:8080;
   proxy_read_timeout  90;

}

Но если я изменю / к /jenkins это больше не работает.

Я знаю, что мне здесь не хватает базовых знаний, но я не могу понять этого, поскольку везде, куда я смотрю, кажется, что это должно работать нормально.

Что ж, после некоторых дополнительных исследований по этому вопросу я заметил, что проблема с этой настройкой заключалась в том, что местоположение / api не подключалось к http://127.0.0.1:1234/ он пытался подключиться к http://127.0.0.1:1234/api и то же самое с Дженкинсом.

Таким образом, решение заключается в добавлении завершающих слэшей как к местоположению, так и к proxy_pass.

location /api/ {
    proxy_pass http://127.0.0.1:1234/;
....

location /jenkins/ {
   proxy_pass          http://localhost:8080/;
   proxy_read_timeout  90;

....

Так что дело в шляпе.