Заголовки запроса неправильно анализируются с использованием Nginx - PullRequest
0 голосов
/ 30 января 2020

Я только что создал новый экземпляр Ubuntu на AWS. После установки Nginx заголовки запроса не анализируются правильно, когда я запрашиваю использование устройства (Android / iOS).

Используя почтальон, я могу получить заголовки в приложении узла, но всякий раз, когда я пытаюсь с помощью устройство показывает неопределенное. Используя publi c DNS, я могу получить заголовки, поэтому я ожидаю, что проблема связана с конфигурацией Nginx.

Вот заголовки, которые я получаю в моем приложении Node js от почтальона. и android устройство соответственно:

// с использованием Почтальона

{ host: '<Host>',
 'x-real-ip': '<id-address>',
 connection: 'upgrade',
 'cache-control': 'no-cache',
 'postman-token': <token>,
 authorization: <auth_token>,
 'content-type': 'application/json',
 'user-agent': 'PostmanRuntime/6.2.5',
 accept: '*/*',
 'accept-encoding': 'gzip, deflate' }

// using android device
 { host: '<host>',
  'x-real-ip': '<ip-address>',
  connection: 'upgrade',
  'accept-encoding': 'gzip',
  'user-agent': 'okhttp/3.10.0' }

Как видно из заголовков устройств авторизация отсутствует, поэтому она отображается как неопределенная.

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

upstream backend {
    server 127.0.0.1:8000;
}
server {
if ($host = <host>) {
    return 301 https://$host$request_uri;
} # managed by Certbot

listen [::]:80;
listen 80;
server_name <host>;
return 404; # managed by Certbot
location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass  http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_next_upstream error timeout http_502 http_503 http_504;
}
}

Пожалуйста, помогите мне с этим.

Заголовки от iOS устройства

http://<request-url>/?is_new_device=false&device_id=A2F6C479-2C52-4A43-ADB6-D86771431B5A
 ▿ url : Optional<URL>
  ▿ some : http://<request-url>/?is_new_device=false&device_id=A2F6C479-2C52-4A43-D86771431B5A
   - _url : http://<request-url>/?is_new_device=false&device_id=A2F6C479-2C52-4A43-D86771431B5A
 - cachePolicy : 0
 - timeoutInterval : 60.0
 - mainDocumentURL : nil
 - networkServiceType : __C.NSURLRequestNetworkServiceType
 - allowsCellularAccess : true
 ▿ httpMethod : Optional<String>
  - some : "GET"
 ▿ allHTTPHeaderFields : Optional<Dictionary<String, String>>
  ▿ some : 2 elements
   ▿ 0 : 2 elements
    - key : "Authorization"
    - value : "Bearer google-oauth2 <token>"
   ▿ 1 : 2 elements
    - key : "User-Agent"
    - value : "Impact/3.5.16 iPhone9,3 iOS/13.3 CFNetwork/1121.2.2 Darwin/19.2.0"
 - httpBody : nil
 - httpBodyStream : nil
 - httpShouldHandleCookies : true
 - httpShouldUsePipelining : false

1 Ответ

0 голосов
/ 04 февраля 2020

Моя проблема решена путем удаления приведенного ниже кода из конфигурации Nginx. Заголовки не разбираются, когда я перенаправляю запросы из Http в https.

if ($host = <host>) 
{ return 301 https://$host$request_uri; } # managed by Certbot
...