Как правильно прописать через NGINX редирект с регулярными выражениями и proxy_pass??

Подсказали что для получения данных с другого домена, при ошибке cors, можно использовать проксирование через NGINX с использованием proxy_pass

конфиг:
location ~* ^.*\/proxy\/(?<pschema>.*)?\/(?<phost>.*)?\/.*$ {
        set $adr $pschema://$phost;
        
        rewrite ^.*\/proxy\/.*?\/.*?(\/.*)$ $1 break;

        proxy_pass $adr;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $phost;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
        proxy_connect_timeout 1;
        proxy_intercept_errors on;
        expires 30;
        break;
    }


проксирование нужно сделать следующим образом: чтобы при запросе:
https://my.domain.ru/proxy/https/api.binance.com/api/v1/time

данные получались со след адреса:
https://api.binance.com/api/v1/time

такое решение увидел в этом вопросе
но при запросе вываливается 500 ошибка NGINX
  • Вопрос задан
  • 498 просмотров
Решения вопроса 1
dvershinin
@dvershinin
High performance web server engineer
Правильно так:

location ~* ^/proxy/(?<pschema>https?)/(?<phost>[\w.]+)(?<puri>/.*) {
    set $adr $pschema://$phost;
    rewrite .* $puri break;

    proxy_pass $adr;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $phost;
    proxy_set_header X-NginX-Proxy true;
    proxy_redirect off;
    proxy_connect_timeout 1;
    proxy_intercept_errors on;
    expires 30;
}


Свой собвственный первоисточник :)

P.S. неправилен был regex, и кстати не нужно делать escape прямых слэшей, так как delimiter не определён.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы