Соответствие местоположения 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;
....
Так что сделали свое дело.