Я пытаюсь настроить 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;
....
Так что дело в шляпе.