Настройка правил перезаписи для запрос оказалось довольно просто в Nginx. Для ответ, не так много (по крайней мере, не для меня). Я хочу удалить заголовок Content-Type из ответа, если заголовок Content-Length ответа не установлен. у меня есть NginxHttpHeadersMoreModule установлен, так что это должно позволить мне удалить заголовок, но я не могу найти способ проверить наличие заголовка Content-Length ответа с помощью правила в конфигурации Nginx. Мы будем очень благодарны за любые предложения о том, как это сделать!
Я думаю, вам нужно что-то вроде следующего в location
блок:
if ($sent_http_content_length ~ '') {
more_clear_headers Content-Type
...
}
Видеть $ sent_http_name
(Отказ от ответственности: я не пробовал это; я просто покопался в документации, потому что нашел вопрос интересным. Это может работать, а может и не работать)
Похоже, кто-то спросил об этом в Stack Overflow, и для каждого отправленного заголовка есть переменная $ sent_http_my_custom_header.
Видеть https://web.archive.org/web/20140606142058/http://wiki.nginx.org/HttpCoreModule#.24sent_http_HEADER для подробностей.
Ссылка: https://stackoverflow.com/questions/12431496/nginx-read-custom-header-from-upstream-server
Что ж, проверка на отсутствие чего-либо - всегда проблема ... но ....
Обычно я подключаюсь к порту, который прослушивает nginx, и делаю вручную созданный http-ответ:
telnet www.stackoverflow.com 80
Trying 69.59.196.211...
Connected to stackoverflow.com.
Escape character is '^]'.
GET /index.html HTTP/1.1
host: www.stackoverflow.com
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Fri, 30 Jul 2010 14:31:02 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Location: http://stackoverflow.com/index.html
Content-Length: 158
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://stackoverflow.com/index.html">here</a></body>
Вы также можете использовать параметры заголовка дампа для curl или wget. Например, wget поддерживает:
-S
--server-response
Print the headers sent by HTTP servers and responses sent by FTP
servers.
Наконец, пользовательское ведение журнала может позволить вам добавить определенные заголовки ответа, например:
log_format up_head '$remote_addr - $remote_user [$time_local] $request '
'upstream_http_content_type $upstream_http_content_type';
Есть переменная $content_length
что согласно документация является равно строке Content-Length заголовка запроса. Вы, наверное, можете сделать
if ($content_length = 0) {
do stuff with header
}
Я не уверен, какое значение примет $ content_length, и даже если оно будет существовать, если заголовок отсутствует, но вы можете использовать это как отправную точку для решения.