Как добавить содержимое тела запроса в качестве заголовка ответа в nginx? - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь добавить заголовок "X-Body" и установить его в теле ответа на запрос в nginx conf.

pid logs/nginx.pid.test;
 error_log logs/error.log.test debug;
worker_rlimit_core 500M;
worker_processes  1;
master_process off;


events {
    worker_connections  1024;
}

http {
    include            mime.types;
    default_type       application/json;
    sendfile           on;
    keepalive_timeout  65;
    variables_hash_max_size 2048;

    server {
        listen       65311;
        server_name  test;
        access_log   logs/test;

        location / {
            echo "Nginx response";
            proxy_pass_request_headers on;
            default_type application/json;

            echo_read_request_body;
            add_header X-Body $request_body;
            return 200;
        }
     }
}

Ожидается заголовок X-Body для следующего запроса скручивания. Но не смог найти.

curl -vk "localhost:65311" -d '{"key":"value"}' -H "Content-Type: application/json"
* Rebuilt URL to: localhost:65311/
*   Trying ::1...
* TCP_NODELAY set
* connect to ::1 port 65311 failed: Connection refused
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 65311 (#0)
> POST / HTTP/1.1
> Host: localhost:65311
> User-Agent: curl/7.52.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 15
>
* upload completely sent off: 15 out of 15 bytes
< HTTP/1.1 200 OK
< Server: Test
< Date: Wed, 09 Oct 2019 19:28:14 GMT
< Content-Type: application/json
< Content-Length: 0
< Connection: keep-alive
<
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact

Также в nginx встроен модуль эха. Как добавить опубликованный JSON в качестве заголовка ответа?

1 Ответ

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

nginx не добавляет пустые заголовки. $request_body пусто, поэтому вы его не видите. В соответствии с документами , $request_body добавляется только в определенных условиях, особенно при прокси.

Вот конфигурация, которая работает:

http {
  log_format postdata escape=json '"$request_body"';

  server {
    listen       65311;
    server_name  test;

    location /success {
        return 200;
    }

    location / {
        proxy_redirect off;
        proxy_pass_request_body on;
        proxy_pass $scheme://127.0.0.1:$server_port/success;
        add_header X-Body $request_body;
        access_log  logs/test.log postdata;
    }
  }
}
...