Решение проблемы с доменом Nginx - PullRequest
0 голосов
/ 11 октября 2018

У меня был прокси-сервер, который перенаправляет сообщения некоторым API на стороне клиента через https.Когда я использую конфигурацию с установленной восходящей переменной (proxy_pass $ upstream_endpoint $ request_uri;), разрешение DNS для этого домена (динамическое изменение IP-адреса) работает хорошо, но я получаю ответ 403. Несанкционированный.

Когда я использую конфигурацию безвверх по течению (proxy_pass https://api-test.example.com/api/), указать напрямую на домен клиента, он работает хорошо, я получаю ответ 200, но DNS resolver больше не работает ..

Конфигурация Nginx:

location /api-test.example.com/api/ {
            resolver 10.100.10.1 valid=5s;
            set $upstream_endpoint https://api-test.example.com;
            proxy_pass $upstream_endpoint$request_uri;
            #proxy_pass https://api-test.example.com/api/;
            proxy_ssl_name api-test.example.com;
            proxy_ssl_server_name on;
            proxy_set_header Host api-test.example.com;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

1 Ответ

0 голосов
/ 11 октября 2018

При добавлении URI в оператор proxy_pass запрошенный URI перезаписывается перед передачей его в восходящем направлении.Подробности смотрите в этом документе .

Таким образом, URI /api-test.example.com/api/foo переписывается в /api/foo.

Вы можете добиться того же поведения с помощью оператора rewrite...break.Подробнее см. в этом документе .

location /api-test.example.com/api/ {
    rewrite ^/api-test.example.com(.*)$ $1 break;
    set $upstream_endpoint https://api-test.example.com;
    proxy_pass $upstream_endpoint;
    ...
}
...