Configuración avanzada Nginx

Configuración avanzada Nginx

1. página de estado de Nginx

nginx módulo ngx_http_auth_basic_module lograr, es necesario agregar los parámetros del compilador al compilar la instalación de nginx -con-http_stub_status_module, o después de la finalización de la supervisión se le pedirá que configure los errores de sintaxis basadas.

información sobre el estado básico de la página de estado para dar salida a nginx

location /nginx_status {
    stub_status;
    allow 192.168.0.0/16;
    allow 127.0.0.1;
    deny all;
}

marca

Las conexiones activas: Actualmente las conexiones de clientes activos, incluidas las conexiones de espera para las conexiones libres.
acepta: estadísticas del PIB, el número total desde el inicio de la Nginx ha aceptado la solicitud del cliente.
manejados: estadísticas del PIB, desde el inicio de la Nginx ha terminado de procesar el número total de peticiones de los clientes, por lo general igual acepta, a menos que ya
se rechaza la conexión worker_connections restricciones.
solicitudes: las estadísticas del PIB, el número total de peticiones desde el inicio Nginx enviado por el cliente.
Lectura: El estado actual, las solicitudes de conexión de cliente de lectura paquetes de cabecera.
Escribiendo: estado actual, la respuesta que se transmite durante el número de paquetes de conexiones con el cliente.
Esperando: estado actual, el cliente está esperando que el número emitido solicitud de conexión de inactividad de mantenimiento de conexión caso abierto, y este valor es igual al activo - (lectura + escritura),

2. Los módulos de Nginx de terceros:

El tercer módulo es una extensión funcional de nginx, módulo de terceros requiere parámetros -add-módulo al compilar Nginx instalar el PATH = ruta especificada añadir algunos módulos por el desarrollador para el negocio de la empresa necesita el desarrollo a medida, hay el módulo se sube a los entusiastas de código abierto para el desarrollo de módulos de código abierto buena conducta de GitHub, nginx admite módulos de terceros tienen que recompilar el apoyo de fuente, como de código abierto de eco módulo

https://github.com/openresty/echo-nginx-module

Instalación de eco módulo

Referencia Nota: https: //github.com/openresty/echo-nginx-module#installation

Compatibilidad con el eco módulo de nginx: https: //github.com/openresty/echo-nginx-module#compatibility

En Nginx ha sido compilado, y la adición de eco módulo

  1. Descargar eco paquete fuente, y detener el proceso actual nginx

    root@z2:/usr/local/src# git clone https://github.com/openresty/echo-nginx-module.git
    root@z2:/usr/local/src# systemctl stop nginx
    
  2. Al visualizar el entorno actual no afecta a la actual nginx parámetros compilados con el fin de configurar al añadir add-módulos

    root@z2:/usr/local/src# nginx -V
    nginx version: nginx/1.16.1
    built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 
    built with OpenSSL 1.1.1  11 Sep 2018
    TLS SNI support enabled
    configure arguments: --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
    
  3. El cambio a la fuente original del paquete nginx

    root@z2:/usr/local/src# cd nginx-1.16.1/
    
  4. Reconstruir entorno del compilador

    ./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --add-module=/usr/local/src/echo-nginx-module
    
  5. Compilar (sin realizar la instalación)

    Cuando la marca se ha generado para todos los programas y archivos, make install sólo tienes que copiar los archivos generados en el directorio correspondiente, para completar la instalación llamada

    root@z2:/usr/local/src/nginx-1.16.1# make
    
  6. La nueva generación de programas de nginx las copian, reemplazar el archivo de programa principal nginx original, puede reiniciar

    root@z2:/usr/local/src/nginx-1.16.1/objs# mv /apps/nginx/sbin/nginx{,.bak} 
    
    root@z2:/usr/local/src/nginx-1.16.1# cd objs/
    root@z2:/usr/local/src/nginx-1.16.1/objs# cp nginx /apps/nginx/sbin/
    root@z2:/usr/local/src/nginx-1.16.1/objs# systemctl start nginx
    
  7. verificación

      location /hello {
    	default_type    text/plain;
        echo  "hello world";
    }
    

    Cuando se accede a http://www.mage.net/hello/, se mostrará hola mundo;

3. Variables Nginx

las variables nginx pueden ser referenciados en el archivo de configuración o el registro se determina en función de la utilización de otras escenas, que se puede dividir en variable y módulo de nginx hecha a la medida de las variables de las variables, las variables se construyen viene a ser adquiridos por el cliente muchas variables acceso a los valores pertinentes.

3.1 variables incorporadas

Documentos oficiales

Los siguientes son variables comunes

$remote_addr;
#存放了客户端的地址,注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为路由器的公网IP。
$args;
#变量中存放了URL中的指令,例如http://www.magedu.net/main/index.do?id=20190221&partner=search中的id=20190221&partner=search
$document_root
#保存了针对当前资源的请求的系统根目录,如/apps/nginx/html。
$document_uri
#保存了当前请求中不包含指令的URI,注意是不包含请求的指令,比如 http://www.magedu.net/main/index.do?id=20190221&partner=search会被定义为/main/index.do
$host
#存放了请求的host名称。
$http_user_agent
#客户端浏览器的详细信息
$http_cookie
#客户端的cookie信息。
limit_rate 10240;
echo $limit_rate;
#如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0。
$remote_port
#客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口。
$remote_user;
#已经经过Auth Basic Module验证的用户名。
$request_body_file
#做反向代理时发给后端服务器的本地资源的名称。
$request_method
#请求资源的方式,GET/PUT/DELETE等
$request_filename
#当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径,
如/apps/nginx/html/main/index.html
$request_uri
#包含请求参数的原始URI,不包含主机名,如:/main/index.do?id=20190221&partner=search 。
$scheme
#请求的协议,如ftp,https,http等。
$server_protocol
#保存了客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等。
$server_addr
#保存了服务器的IP地址。
$server_name
#请求的服务器的主机名。
$server_port
#请求的服务器的端口号。
3.2 Variables personalizadas

Si lo desea, personalizada nombre de la variable y el valor, utilizando el conjunto de valor variable $ instrucción;, es el siguiente

Contexto: servidor, ubicación, si

Syntax: set $variable value; Default: — 
location /zdy {
    default_type    text/plain;
    set $name mage;
    echo $name;
    set $my_port $server_port;
    echo $my_port;
    echo "$server_name:$server_port";
}

Autenticación: Acceso http://www.mage.net/zdy/ el resultado

magedu
80
www.mage.net:80

4. Nginx registro de acceso personalizada

El registro de acceso es un disco que es cliente específico del usuario solicita información de contenido, el registro mundial error_log módulo de configuración es un nivel sin precedentes de tala y guardar el nginx ruta del servidor se está ejecutando, por lo que esencialmente diferentes, pero generalmente sólo registro de errores Nginx a, pero puede definir una pluralidad de registro de acceso, el registro define una necesidad de ahorrar la ruta en el diferente access_log especificado servidor de registro, un log_format registro especificado formato, el formato definido en el contenido específico del registro para ser salvado.

4.1 Si el formato de origen para conservar el registro, el registro sólo tiene que añadir el contenido correspondiente, la configuración es la siguiente:

Añadir '$ server: $ server_port'

http configure

log_format nginx_format1 '$remote_addr - $remote_user [$time_local]"$request" '
                                '$status $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"' '$server_name:$server_port';

servidor configurado

access_log /data/nginx/logs/www-mage-net_access.log nginx_format1;

Verificación:

Cuando se accede a http://www.mage.net/, el registro posterior tiene www.mage.net:80

root@z2:~# tail -f /data/nginx/logs/www-mage-net_access.log 

192.168.0.1 - - [12/Mar/2020:10:31:16 +0800]"GET /zdy HTTP/1.1" 200 47 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"www.mage.net:80

formato JSON 4.2 encargo del registro

Nginx registro de acceso por defecto registra el contenido es relativamente simple, el formato por defecto no es fácil de hacer después del registro de análisis estadístico, los entornos de producción suelen
convertir JSON nginx registros para el registro, y luego hacer con el uso de la recopilación de registros ELK - estadística - análisis.

Ese modo de valor clave

log_format access_json '{"@timestamp":"$time_iso8601",'
                                '"host":"$server_addr",'
                                '"clientip":"$remote_addr",'
                                '"size":$body_bytes_sent'
                                '"responsetime":$request_time,'
                                '"upstreamtime":"$upstream_response_time",'
                                '"upstreamhost":"$upstream_addr",'
                                '"http_host":"$host",'
                                '"uri":"$uri",'
                                '"domain":"$host",'
                                '"xff":"$http_x_forwarded_for",'
                                '"referer":"$http_referer",'
                                '"tcp_xff":"$proxy_protocol_addr",'
                                '"http_user_agent":"$http_user_agent",'
                                '"status":"$status"}';

access_log /data/nginx/logs/www-mage-net_access.log  access_json;
{"@timestamp":"2020-03-12T10:48:58+08:00","host":"192.168.1.102","clientip":"192.168.0.1","size":0"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"www.mage.net","uri":"/index.html","domain":"www.mage.net","xff":"-","referer":"-","tcp_xff":"","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36","status":"304"}

5. compresión Nginx

Nginx apoyo para el tipo específico de archivo se comprime y luego se transmite al cliente, sino también la relación de compresión deformación permanente por compresión, el tamaño de archivo del archivo comprimido de la fuente significativamente menor, lo que ayuda a reducir la utilización de ancho de banda de exportación, redujo el gasto de TI corporativa, pero se llevará a los recursos de la CPU apropiadas.

Nginx comprime los archivos depende de la ngx_http_gzip_module módulo de función, documentos oficiales , instrucciones de configuración son las siguientes:

#启用或禁用gzip压缩,默认关闭
gzip on | off;
#压缩比由低到高从1到9,默认为1
gzip_comp_level level;
#禁用IE6 gzip功能
gzip_disable "MSIE [1-6]\.";
#gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
#启用压缩功能时,协议的最小版本,默认HTTP/1.1
gzip_http_version 1.0 | 1.1;
#指定Nginx服务需要向服务器申请的缓存空间的个数*大小,默认32 4k|16 8k;
gzip_buffers number size;
#指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错
gzip_types mime-type ...;
#如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”
gzip_vary on | off;

Ejemplos:

gzip on;
gzip_comp_level 5;
gzip_min_length 1k;

gzip_types text/plain application/javascript application/x-javascript
text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg
image/gif image/png;

gzip_vary on;

después de la compresión

marca

marca

Sin compresión antes

root@z2:~# ll  /data/nginx/html/pc/test.html 
-rw-r--r-- 1 root root 1086284 Mar 12 11:48 /data/nginx/html/pc/test.html

root@z2:~# curl -I http://www.mage.net/test.html
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 12 Mar 2020 04:01:55 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1086284
Last-Modified: Thu, 12 Mar 2020 03:48:20 GMT
Connection: keep-alive
ETag: "5e69b104-10934c"
Accept-Ranges: bytes

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo cargado directamente (img-9wbB3aYK-1584259839251) (A:% 5Cimage_typoral_used% 5Cimage-20200312120616343.png)]

característica 6. https

la página de inicio de sesión sitio Web mediante HTTPS se cifran transmisión de datos encriptados para garantizar la seguridad de los datos, HTTPS puede cifrar la información, a fin de no adquirir información sensible por un tercero, por lo que el mayor nivel de seguridad muchos sitios de banca o servicio de correo electrónico, etc. utilizará el protocolo HTTPS, HTTPS se compone realmente de dos partes: HTTP + SSL / TLS, es decir, en un módulo HTTP añadió una capa de procesamiento de la información cifrada. Servicio y el cliente la información se transmite cifrada mediante TLS, así que después de la transmisión de los datos se cifran los datos.

6.0 https proceso de implementación es el siguiente:

marca

  1. Los iniciados cliente HTTPS:

    acceso de los clientes a una cara a la banda dirección https, por lo general el puerto 443

  2. configuración del servidor

    El uso de https servidor de protocolo debe tener un certificado, puede aplicar para algunas organizaciones, puede hacer su propio, muchos sitios domésticos están hágalo usted mismo, cuando se visita un sitio web cuando el certificado se le pida indica que el certificado no es de confianza para hacer su propia certificado es una clave pública y una clave privada, como una cerradura y llave, en circunstancias normales, sólo las teclas que puede abrir las cerraduras, se puede dar esto a alguien más lo encerraron en una caja, que está lleno de dinero o secreta, otros no saben qué poner dentro y otros no están abiertos, sólo se pueden abrir las llaves.

  3. certificado de transferencia

    El servidor al cliente el certificado de transferencia, de hecho, una clave pública, que contiene una gran cantidad de información, por ejemplo, la obtención de una autoridad de certificación, fecha de vencimiento y así sucesivamente.

  4. certificado de análisis del cliente

    Esta parte del trabajo se ha completado el cliente, en primer lugar volver a verificar la validez de la clave pública, como autoridad, fecha de vencimiento y así sucesivamente, si usted encuentra un cuadro de advertencia emergerá certificado pronta anormal que puede haber un problema, no hay problema si se genera el certificado un valor aleatorio, y luego cifra con el certificado del valor aleatorio, como paso 2 dijo que el valor aleatorio encerrado, no permitiendo a la gente para ver.

  5. etapa de transferencia de datos encriptados 4

    Es pasar un número aleatorio para el certificado de cifrado para el servidor, el propósito es permitir que el servidor para obtener este valor aleatorio, después de que el cliente de comunicación y el servidor pueden ser encriptados desencriptados por el valor aleatorio de

  6. La información de descifrado del lado del servicio

    Después de que el valor aleatorio encriptado utilizando la clave privada del servidor para descifrar la Etapa 5, para obtener un pase al valor aleatorio cliente (clave privada), y luego el valor de contenido simétrica cifrada, y el cifrado simétrico información de clave privada es algorítmicamente junto mixta, por lo menos que conozca la clave privada, o es incapaz de obtener el contenido de su interior, pero sólo el cliente y el servidor es consciente de esta clave privada, siempre y cuando el algoritmo secreto puede ser complicado suficiente para garantizar la seguridad de los datos.

  7. información de cifrado del tráfico

    El servidor de transmisión de la clave privada para cifrar los datos para el cliente, el cliente puede reducirse al contenido de datos original.

  8. La información de descifrado cliente

    Generación de clientes antes del final de una clave privada para descifrar los datos pase al servidor obtenidos, ya que los datos han sido cifrados, por lo que incluso si un tercero para adquirir los datos no puede conocer los detalles.

6.1 parámetros de configuración SSL

El módulo de aplicación ngx_http_ssl_module función https nginx basa, por lo que si se compila y se instala nginx desee utilizar el parámetro
ngx_http_ssl_module función Open SSL, sino como una función básica de nginx, yum install nginx está activada de forma predeterminada, compilado e instalado necesidad nginx para especificar los parámetros de construcción - con-http_ssl_module, abrir documentos oficiales , parámetros de configuración son las siguientes:

ssl on | off;
#为指定的虚拟主机配置是否启用ssl功能,此功能在1.15.0废弃,使用listen [ssl]替代。

ssl_certificate /path/to/file;
#当前虚拟主机使用使用的公钥文件,一般是crt文件

ssl_certificate_key /path/to/file;
#当前虚拟主机使用的私钥文件,一般是key文件

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
#支持ssl协议版本,早期为ssl现在是TSL,默认为后三个

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
#配置ssl缓存  off: 关闭缓存  none: 通知客户端支持ssl session cache,但实际不支持
#builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
#[shared:name:size]:在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,一兆可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称。

ssl_session_timeout time;#客户端连接可以复用ssl session cache中缓存的有效时长,默认5m
6.2 certificado autofirmado
root@z2:~# cd /apps/nginx/
root@z2:/apps/nginx# mkdir certs
root@z2:/apps/nginx# cd certs/

Llenar CN BJ BJ rs mage mage.ca

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt

Llenar CN BJ BJ mago dev www.mage.net

openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.mage.net.key -out www.mage.net.csr

La emisión de certificados

openssl x509 -req -days 3650 -in www.mage.net.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.mage.net.crt

configuración del servidor

listen 443 ssl;
ssl_certificate /apps/nginx/certs/www.mage.net.crt;
ssl_certificate_key /apps/nginx/certs/www.mage.net.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
6.3 multidominio HTTPS

Nginx es compatible con una sola dirección IP para lograr la función multi-dominio, y también es compatible nombre de dominio único sobre la base de la IP de múltiples implementar HTTPS, Nginx se basa realmente en
función de lograr SNI (Servidor de Nombres Indicación), SNI es resolver un servidor Nginx utilizando una IP unión de varios nombres de dominio y certificados de
función, y su función es específica de un cliente envía un nombre de dominio (nombre de host) para acceder a los sitios antes de conectarse al servidor para establecer una conexión SSL, este servicio
se devuelve al cliente un certificado adecuado, de acuerdo con el nombre de dominio .

Cada servidor puede ser configurado con una ruta de certificación diferente

7. Sobre favicon.ico

icono del archivo favicon.ico se visualiza cuando la colección de direcciones del navegador, cuando el cliente utiliza un navegador para pedir la página, el navegador iniciar una solicitud para obtener sus propias páginas de archivo favicon.ico, pero cuando la solicitud favicon.ico explorador de archivos cuando no existe, el servidor registrará registro 404, y el navegador mostrará el error 404. (Navegador Curl no lo hace)

{"@timestamp":"2020-03-12T18:23:35+08:00","host":"192.168.1.102","clientip":"192.168.0.1","size":548"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"www.mage.net","uri":"/favicon.ico","domain":"www.mage.net","xff":"-","referer":"https://www.mage.net/","tcp_xff":"","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36","status":"404"}

solución:

1. No grabe registros relacionados

location = /favicon.ico {
    log_not_found off;
    access_log off;
}

2. Establecer ubicación favicon.ico

Por ejemplo: el día que el gato Favicon.ico a su sitio con el uso de

marca

Compruebe la otra, la siguiente imagen es que el pequeño, descargar

root@z2:~# mkdir /data/nginx/html/pc/images
root@z2:~# cd  /data/nginx/html/pc/images
root@z2:/data/nginx/html/pc/images# wget https://img.alicdn.com/tfs/TB1XlF3RpXXXXc6XXXXXXXXXXXX-16-16.png
root@z2:/data/nginx/html/pc/images# mv TB1XlF3RpXXXXc6XXXXXXXXXXXX-16-16.png  favicon.ico

configuración conf:

#location ~ ^/favicon\.ico$ {
location = /favicon.ico {
	root /data/nginx/html/pc/images;
}

Verificación:

marca

Publicado 62 artículos originales · ganado elogios 7 · vistas 1257

Supongo que te gusta

Origin blog.csdn.net/qq_36801585/article/details/104880473
Recomendado
Clasificación