artzub
@artzub
Программист

Проксирование кросс-доменных запросов через nginx унифицированный конфиг?

Есть конфиг для nginx.
Задача сделать проксирование кросс-доменных ajax запросов через свой сервер.

server {

    listen   80;
    server_name  domain.com;

    access_log  /var/log/nginx/domain.access.log main;
    error_log  /var/log/nginx/domain.error.log info;

    root /var/www;

    location ~* ^.*\/proxy\/(?<pschema>.*)?\/(?<phost>.*)?\/.*$ {
        set $adr $pschema://$phost;

        rewrite ^.*\/proxy\/.*?\/.*?(\/.*)$ $1 break;

        proxy_pass http://domain1.com;
#       если вот так то не работает
#       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;
    }

    location / {
        index index.html index.htm;
    }

    location ~* \.(jpg|ico|gif|png|css|js|svg)$ {
        access_log off;
        expires 30d;
    }
}


вроде работает если явно указываешь на какой хост делать proxy_pass, а когда в proxy_pass передается переменная он не хочет работать.
proxy_pass http://domain1.com;
# если вот так то не работает
# proxy_pass $adr;

Как решить проблему, чтоб для каждого нового нужного домена не писать свой location?

UPD: Конфиг который решает поставленную задачу
server {

    listen   80;
    server_name  domain.com;

    access_log  /var/log/nginx/domain.access.log main;
    error_log  /var/log/nginx/domain.error.log info;

    root /var/www;

    location ~* ^.*\/proxy\/(?<pschema>.*)?\/(?<phost>.*)?\/.*$ {
        resolver $dns_from_your_interfaces;
        #если есть свой dns на 127.0.0.1 то можно прописать его

        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;
    }

    location / {
        index index.html index.htm;
    }

    location ~* \.(jpg|ico|gif|png|css|js|svg)$ {
        access_log off;
        expires 30d;
    }
}
  • Вопрос задан
  • 4805 просмотров
Решения вопроса 2
maxaon
@maxaon
Попробуйте схему указать
proxy_pass http://$phost
И посмотрите, правильные ли вы регулярки сделали.
И какой у вас вид запроса?
Ответ написан
Anonym
@Anonym
Программирую немного )
Пригласить эксперта
Ваш ответ на вопрос

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

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