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

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

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;

}
}

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

Это работает без проблем. И то же самое, если я использую блок местоположения моего узла 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 это больше не работает.

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

1 ответ

Решение

Что ж, после еще нескольких исследований по теме я заметил, что проблема с этой настройкой заключалась в том, что местоположение /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;

....

Так что сделали свое дело.

Другие вопросы по тегам