Nginx proxy_pass через 2 сервера и пользовательские заголовки теряются - PullRequest
0 голосов
/ 08 марта 2020

У меня проблема с моей Nginx конфигурацией.

У меня есть Nginx сервер (A), который добавляет пользовательские заголовки, а затем этот proxy_passes на другой сервер (B), который затем прокси передает в мое приложение flask (C), которое читает заголовки. Если I go из A -> C, приложение flask может читать установленные заголовки, но если I go - B (A -> B -> C), заголовки, кажется, удалены.

Config

events {
    worker_connections 512;
}

http {
    # Server B
    server {
        listen 127.0.0.1:5001;
        server_name 127.0.0.1;

        location / {
            proxy_pass http://127.0.0.1:5000;
        }
    }

    # Server A
    server {
        listen 4999;
        server_name domain.com;

        location / {
            proxy_pass http://127.0.0.1:5001;
            proxy_set_header  X-Forwarded-User 'username';
        }
    }
}

Flask приложение, работающее на 127.0.0.1:5000

Если я изменю конфигурацию сервера A на proxy_pass http://127.0.0.1:5000, тогда приложение Flask может увидеть X-Forwarded-User, но если я go через сервер B, заголовки "потеряны"

Я не уверен, что я делаю неправильно. Есть предложения?

Спасибо

1 Ответ

1 голос
/ 08 марта 2020

Я не могу воспроизвести проблему, отправив пользовательский заголовок X-custom-header: custom на моем сервере Netcat. Я получаю:

nc -l -vvv -p 5000
Listening on [0.0.0.0] (family 0, port 5000)
Connection from localhost 41368 received!
GET / HTTP/1.0
Host: 127.0.0.1:5000
Connection: close
X-Forwarded-User: username
User-Agent: curl/7.58.0
Accept: */*
X-custom-header: custom

(см.? X-custom-header на последней строке)

когда я запускаю эту команду curl:

curl -H "X-custom-header: custom" http://127.0.0.1:4999/

против nginx сервера, на котором работает такая точная конфигурация:

events {
    worker_connections 512;
}

http {
    # Server B
    server {
        listen 127.0.0.1:5001;
        server_name 127.0.0.1;

        location / {
            proxy_pass http://127.0.0.1:5000;
        }
    }

    # Server A
    server {
        listen 4999;
        server_name domain.com;

        location / {
            proxy_pass http://127.0.0.1:5001;
            proxy_set_header  X-Forwarded-User 'username';
        }
    }
}

, таким образом, я могу только предположим, что проблема в той части вашей конфигурации, которую вы не показывает нам. (Вы сказали это сами, вы показываете не реальную конфигурацию, а реплику. В частности, реплику, которая не показывает проблему)

, поэтому я проголосовал, чтобы закрыть этот вопрос как «может не воспроизводить "- по крайней мере, я не могу.

...