1. Introducción ngx_headers_more
ngx_headers_more se utiliza para agregar, configurar y borrar la información del encabezado de entrada y salida. Este módulo no está incluido en el código fuente de nginx y debe agregarse por separado.
Este módulo es una versión mejorada del módulo ngx_http_headers_module y proporciona más herramientas de utilidad, como restablecer o borrar la información de encabezado incorporada, como Content-Type, Content-Length y Server.
Puede usar la opción -s para especificar el código de estado HTTP, la opción -t para especificar el tipo de contenido y los comandos more_set_headers y more_clear_headers para modificar la información del encabezado de salida. Como:
more_set_headers -s 404 -t 'texto / html' 'X-Foo: Bar';
La información del encabezado de entrada también se puede modificar de esta manera, como:
location /foo {
more_set_input_headers 'Host: foo' 'User-Agent: faked';
# now $host, $http_host, $user_agent, and
# $http_user_agent all have their new values.
}
La opción -t también se puede utilizar en las instrucciones more_set_input_headers y more_clear_input_headers.
A diferencia de los módulos de encabezado estándar, las instrucciones del módulo se aplican a todos los códigos de estado, incluidos 4xx y 5xx. add_header solo se aplica a 200, 201, 204, 206, 301, 302, 303, 304 o 307.
Módulo de encabezado estándar ngx_http_headers_module ver: " módulo ngx_http_headers_module add_header y expira las instrucciones "
Dos, instale ngx_headers_more
wget 'http://nginx.org/download/nginx-1.5.8.tar.gz'
tar -xzvf nginx-1.5.8.tar.gz
cd nginx-1.5.8/
# Here we assume you would install you nginx under /opt/nginx/.
./configure --prefix=/opt/nginx \
--add-module=/path/to/headers-more-nginx-module
make
make install
Dirección de descarga del paquete ngx_headers_more: http://github.com/agentzh/headers-more-nginx-module/tags
ngx_openresty contiene este módulo.
3. Instrucciones
more_set_headers
语法: more_set_headers [-t <lista de tipos de contenido>] ... [-s <lista de códigos de estado>] ... <nuevo-encabezado> ...
Valor predeterminado: no
Sección de configuración: http, servidor, ubicación, ubicación si
Fase: filtro de encabezado de salida
Al reemplazar (si corresponde) o agregar (si no todos) los encabezados de salida especificados, el código de estado de la respuesta coincide con la opción -s y el tipo de contenido de la respuesta coincide con el tipo especificado por la opción -t.
Si no se especifica -s o -t, o hay un valor de tabla vacío, no se requiere ninguna coincidencia. Por lo tanto, para la siguiente especificación, se establece cualquier código de estado y cualquier tipo de contenido.
more_set_headers "Servidor: mi_servidor";
Los encabezados de respuesta con el mismo nombre siempre se sobrescriben. Si desea agregar un encabezado, puede usar la instrucción add_header estándar en su lugar.
Un solo comando puede configurar / agregar múltiples cabezales de salida. Como:
more_set_headers 'Foo: bar' 'Baz: bah';
En un solo comando, las opciones pueden aparecer varias veces, como:
more_set_headers -s 404 -s '500 503' 'Foo: bar';
Equivalente a:
more_set_headers -s '404 500 503' 'Foo: bar';
El nuevo jefe tiene una de las siguientes formas:
Name: Value
Name:
Name
最后两个有效清除的头名称的值。Nginx的变量允许是头值,如:
set $my_var "dog";
more_set_headers "Server: $my_var";
Nota: more_set_headers está permitido en el bloque de ubicación if, pero no está permitido en el bloque if del servidor. La siguiente configuración informará un error de sintaxis:
# This is NOT allowed!
server {
if ($args ~ 'download') {
more_set_headers 'Foo: Bar';
}
...
}
more_clear_headers
语法 :more_clear_headers [-t <lista de tipos de contenido>] ... [-s <lista de códigos de estado>] ... <nuevo-encabezado> ...
Valor predeterminado: no
Sección de configuración: http, servidor, ubicación, ubicación si
Fase: filtro de encabezado de salida
Borre el encabezado de salida especificado:
more_clear_headers -s 404 -t 'texto / plano' Foo Baz;
Equivalente a
more_set_headers -s 404 -t 'texto / plano' "Foo:" "Baz:";
o
more_set_headers -s 404 -t 'texto / plano' Foo Baz
También puede utilizar comodines *, como:
more_clear_headers 'X-Hidden- *';
Borre los encabezados de salida que comiencen por "X-Hidden-".
more_set_input_headers
语法 :more_set_input_headers [-r] [-t <lista de tipos de contenido>] ... <nuevo-encabezado> ...
Valor predeterminado: no
Sección de configuración: http, servidor, ubicación, ubicación si
Fase: reescribir la cola
Muy similar a more_set_headers, la diferencia es que funciona en el encabezado de entrada (o encabezado de solicitud), y solo admite la opción -t.
Nota: Utilice la opción -t para filtrar el tipo de contenido del encabezado de la solicitud, no el encabezado de la respuesta.
more_clear_input_headers
语法 :more_clear_input_headers [-t <lista de tipos de contenido>] ... <nuevo-encabezado> ...
Valor predeterminado: no
Sección de configuración: http, servidor, ubicación, ubicación si
Fase: reescribir la cola
Borre el encabezado de entrada especificado, como:
more_clear_input_headers -s 404 -t 'text/plain' Foo Baz;
等同于
more_set_input_headers -s 404 -t 'text/plain' "Foo: " "Baz: ";
或
more_set_input_headers -s 404 -t 'text/plain' Foo Baz
Cuarto, ngx_headers_more limitaciones
1. A diferencia del módulo de encabezado estándar, este módulo no será efectivo para los siguientes encabezados: Expires, Cache-Control y Last-Modified.
2. El encabezado de respuesta de Connection no se puede eliminar usando este módulo. La única forma es cambiar el archivo src / http / ngx_http_header_filter_module.c.
Cinco, use ngx_headers_more
# set the Server output header
more_set_headers 'Server: my-server';
# set and clear output headers
location /bar {
more_set_headers 'X-MyHeader: blah' 'X-MyHeader2: foo';
more_set_headers -t 'text/plain text/css' 'Content-Type: text/foo';
more_set_headers -s '400 404 500 503' -s 413 'Foo: Bar';
more_clear_headers 'Content-Type';
# your proxy_pass/memcached_pass/or any other config goes here ...
}
# set output headers
location /type {
more_set_headers 'Content-Type: text/plain';
# ...
}
# set input headers
location /foo {
set $my_host 'my dog';
more_set_input_headers 'Host: $my_host';
more_set_input_headers -t 'text/plain' 'X-Foo: bah';
# now $host and $http_host have their new values ...
# ...
}
# replace input header X-Foo *only* if it is already exists
more_set_input_headers -r 'X-Foo: howdy';
Seis, aplique ngx_headers_more
Modifique el software y la versión del servidor web y oculte la información del encabezado Content-Type, Accept-Range y Content-Length.
more_set_headers "Server: ttlsa.com Web Server";
more_clear_headers "Content-Type:";
more_clear_headers "Accept-Ranges: ";
more_clear_headers "Content-Length: ";
Código de estado 404 agregar encabezado
La configuración es la siguiente:
more_set_headers "Server: ttlsa.com Web Server";
more_set_headers -s 404 "Error: Not found";
more_clear_headers "Content-Type:";
more_clear_headers "Accept-Ranges: ";
more_clear_headers "Content-Length: ";