Дескриптор Nginx Expect: заголовок 100-continue - PullRequest
0 голосов
/ 23 апреля 2019

Мы интегрируем сторонний платежный шлюз, который при успешной транзакции отправляет запрос IPN . Поэтому мы создали конечную точку API для обработки запроса, которая прекрасно работает в dev env.

Теперь проблема в том, что когда мы используем nginx перед API-сервером, он получает 301 переадресацию. Когда мы используем прокси-туннель, такой как ngrok , который передает HTTP-запрос через серверы ngrok, запрос успешно проходит через nginx на наш сервер API, но когда запрос POST IPN напрямую передается нашему nginx, он получает 301 перенаправление. Чтобы глубже копать, мы перехватываем запрос с помощью питона SimpleHttpServer , что приводит нас к поиску разницы http-заголовков:

  • без ngrok (напрямую в nginx)

['Host: 35.154.216.72:4040\r\n', 'Accept: / \ r \ n', 'Content-Length: 1030 \ r \ n ',' Content-Type: application / x-www-form-urlencoded \ r \ n ', ' Ожидайте: 100-продолжить \ r \ n']

  • с нгрок

['Host: 543fdf1c.ngrok.io \ r \ n', 'Accept: / \ r \ n', 'Content-Length: 1013 \ r \ n ',' Content-Type: application / x-www-form-urlencoded \ r \ n ', 'X-Forwarded-For: 2a01: 4f8: 192: 22ec :: 2 \ r \ n']

Мы предполагаем, что проблема заключается в заголовках Expect: 100-continue. Таким образом, вопрос есть ли способ справиться с этим с Nginx? или каково стандартное отраслевое решение для такого scenerio?

К вашему сведению: Nginx conf:

location /api/ {

proxy_set_header Expect $http_expect;
client_body_in_file_only on;
proxy_pass_request_headers      on;
proxy_http_version 1.1;

proxy_set_header X-Forwarded-Proto https;
proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection 'upgrade';
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_pass_header X-CSRFToken;
#proxy_pass_header csrftoken;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://kk-api;
}

Конечная точка IPN равна /api/v1/ipn

...