@ua9msn
JS PRG

Как использовать URI в proxy_pass для @location?

Вроде простейший конфиг, но
server {
    listen 80;
    server_name "test";
    
    location @remote {
        proxy_pass                  https://someremoteserver/api/;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For f$proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
        proxy_next_upstream  error timeout http_404 http_502 http_504;
    }

    location / {
        root /home/www/test/;
        index index.html;
        try_files $uri $uri/ @remote;
    }
}

не работает. Ошибка
"proxy_pass" cannot have URI part in location given by regular expression...
"/api/" убирать нельзя. Хотя без него ошибка пропадает.

Как перенаправить запрос к апи?
  • Вопрос задан
  • 11443 просмотра
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Можно просто изменить $uri:
location @remote {
    rewrite (.*) /api$1 break;
    proxy_pass https://someremoteserver;
    ...
}


Вот что в документации

Если внутри проксируемого location с помощью директивы rewrite изменяется URI, и именно с этой конфигурацией будет обрабатываться запрос (break):

location /name/ {
        rewrite    /name/([^/]+) /users?name=$1 break;
        proxy_pass http://127.0.0.1;
    }


В этом случае URI, указанный в директиве, игнорируется, и на сервер передаётся изменённый URI запроса целиком.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы