Как правильно прописать через 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
  • Вопрос задан
  • 488 просмотров
Решения вопроса 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 не определён.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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