условный прокси-сервер nginx - PullRequest
17 голосов
/ 24 октября 2011

Я пытаюсь настроить nginx, чтобы прокси передавал запрос на другой сервер, только если переменная $ request_body совпадает с определенным регулярным выражением.

Моя проблема в том, что я не могу точно настроить это поведение.

В настоящее время я согласен с этим:

server {
    listen 80 default;
    server_name test.local;

    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $http_host;

            if ($request_body ~* ^(.*)\.test) {
                    proxy_pass http://www.google.de;
            }

            root /srv/http;
    }

}

, но проблема здесь в том, что root всегда имеет верхний регистр.прокси не будет передан в любом случае.

есть идеи, как мне этого добиться?

заранее спасибо

Ответы [ 2 ]

14 голосов
/ 24 октября 2011

попробуйте это:

server {
    listen 80 default;
    server_name test.local;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;

        if ($request_body ~* ^(.*)\.test) {
            proxy_pass http://www.google.de;
            break;
        }

        root /srv/http;
    }

}
0 голосов
/ 10 января 2019

Маршрутизация Nginx основана на директиве location, которая совпадает с URI запроса.Решение состоит в том, чтобы временно изменить это, чтобы перенаправить запрос на другие конечные точки.

server {
    listen 80 default;
    server_name test.local;

     if ($request_body ~* ^(.*)\.test) {
         rewrite ^(.*)$ /istest/$1;
     }

     location / {
         root /srv/http;
     }

     location /istest/ {
        rewrite ^/istest/(.*)$  $1 break;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://www.google.de;

    }
}

Условие if может безопасно использоваться только в Nginx с модулем перезаписи , который онэто часть.В этом примере.rewrite префикс URI запроса с istest.

Блоки location дают приоритет ближайшему совпадению.Все, что соответствует /istest/, перейдет во второй блок, который использует другой rewrite для удаления /istest/ из URI запроса перед пересылкой в ​​прокси восходящего потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...