Optimización de Nginx y anti-sanguijuela (¡explicación detallada de gráficos y texto!)

Optimización de Nginx y anti-sanguijuela (¡explicación detallada de gráficos y texto!)

Uno, oculta el número de versión

Puede usar la herramienta Fiddler para tomar paquetes de datos y verificar la versión de Nginx, o puede usar el comando curl -I http://192.168.2.8 en CentOS para mostrar la información del encabezado del mensaje de respuesta.

curl -I http://192.168.2.8

Inserte la descripción de la imagen aquí

Método 1: modificar el método del archivo de configuración

vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;							#添加,关闭版本号
    ......
}

systemctl restart nginx
curl -I http://192.168.2.8

Inserte la descripción de la imagen aquí

Método 2: modificar el archivo fuente, recompilarlo e instalarlo

vim /opt/nginx-1.12.0/src/core/nginx.h
#define NGINX_VERSION "1.0.0" 					#修改版本号
#define NGINX_VER "IIS/" NGINX_VERSION 			#修改服务器类型

Inserte la descripción de la imagen aquí

cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install

Inserte la descripción de la imagen aquí

vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;  #打开版本信息显示
	......
}

Inserte la descripción de la imagen aquí

systemctl restart nginx.service 
curl -I http://192.168.2.8

Inserte la descripción de la imagen aquí

Dos, modificar usuarios y grupos

Método 1: se puede especificar al compilar e instalar, y no se volverá a demostrar. Vea mi último blog.

cd /opt/nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make && make install

Propietario del proceso nginx

Inserte la descripción de la imagen aquí

Método dos:

vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; 								#取消注释,修改用户为 nginx ,组为 nginx

systemctl restart nginx

ps -ef | grep nginx 或ps aux | grep nginx
主进程由root创建,子进程由nginx创建

Inserte la descripción de la imagen aquí

Tres, tiempo de caché

vim /usr/local/nginx/conf/nginx.conf
http {
......
	server {
	...... 
        location / {
            root   html;
            index  index.html index.htm;
        }

		#加入新的 location,以图片作为缓存对象
        location ~ \.(gif|jpg|jepg|png|bmp|ico)$ {
            root html;
            #指定缓存时间,1天
            expires 1d;
        }
......
	}
}

systemctl restart nginx.service

Inserte la descripción de la imagen aquí

En el sistema Linux, abra el navegador Firefox, haga clic derecho y haga clic para ver los elementos.
Seleccione Red -> seleccione HTML, WS, otro
acceso http://192.168.2.8/, haga doble clic en el mensaje de respuesta 304 para ver que el encabezado de respuesta contiene Cahce-Control: max- age = 86400 significa que el tiempo de caché es 86400 segundos. Es decir, para almacenar en caché la hora de un día, el navegador accede a esta página en un día, todos usan los datos en la caché, sin necesidad de volver a emitir una solicitud al servidor Nginx, lo que reduce el ancho de banda utilizado por el servidor.

Inserte la descripción de la imagen aquí

Cuatro, corte de troncos

Utilice scripts para dividir registros

vim /opt/fenge.sh
#!/bin/bash
#设置变量
#设置显示前一天的时间的变量
d=$(date -d "-1 day" "+%F")
logs_path="/var/log/nginx"
pid_path=`cat /usr/local/nginx/logs/nginx.pid`

#创建日志文件目录
[ -d $logs_path ] || mkdir -p $logs_path
#移动并重命名日志文件
mv /usr/local/nginx/logs/access.log ${logs_path}/mhh.com-access.log-{$d}

#重建日志文件
kill -USR1 $pid_path
#删除30天前的日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;
#find $logs_path -mtime +30 |xargs rm -rf

source fenge.sh
ls /var/log/nginx
ls /usr/local/nginx/logs/

crontab -e
0 1 * * * /opt/fenge.sh

Inserte la descripción de la imagen aquí

Reiniciar el servicio nginx

systemctl restart nginx

Inserte la descripción de la imagen aquí

Hay un error en la imagen, se ejecuta a la 1 am todos los días

suplemento:

En el sistema operativo Linux, cada archivo tiene muchos parámetros de tiempo, de los cuales tres son más importantes, a saber, ctime, atime, mtime.

ctime (tiempo de estado):
cuando se modifican los permisos o atributos del archivo, este tiempo se actualizará. ctime no es el tiempo de creación, sino más bien el tiempo de cambio.
Este tiempo solo se actualizará cuando se actualicen los atributos o permisos del archivo. Sin embargo, este tiempo no se actualizará si se cambia el contenido.

atime (accesstime):
este tiempo se actualizará cuando se utilice este archivo.

mtime (hora de modificación):
Cuando se modifican los datos de contenido del archivo, esta hora se actualizará, y si se cambian los permisos o atributos, mtime no cambiará, esta es la diferencia con ctime.

Cinco, tiempo de espera de conexión

HTTP tiene un modo KeepAlive, que le dice al servidor web que mantenga abierta la conexión TCP después de procesar una solicitud. Si recibe otras solicitudes del cliente, el servidor utilizará esta conexión no cerrada sin tener que establecer otra conexión.
KeepAlive permanece abierto durante un período de tiempo y ocuparán recursos durante este período de tiempo. El uso excesivo afectará el rendimiento.

vim /usr/local/nginx/conf/nginx.conf
http {
...... 
    keepalive_timeout 65 180;
    client_header_timeout 80;
    client_body_timeout 80;
...... 
}

systemctl restart nginx

Inserte la descripción de la imagen aquí

keepalive_timeout
especifica el tiempo de espera de KeepAlive. Especifique cuánto tiempo puede durar cada conexión TCP y el servidor cerrará la conexión después de este tiempo. El valor predeterminado de Nginx es 65 segundos. Algunos navegadores solo retienen 60 segundos como máximo, por lo que se puede configurar en 60 segundos. Si se establece en 0, la conexión keepalive está prohibida.
El segundo parámetro (opcional) especifica el valor de tiempo en el encabezado de respuesta Keep-Alive: timeout = time. Este encabezado permite que algunos navegadores cierren activamente la conexión para que el servidor no tenga que cerrar la conexión. Sin este parámetro, Nginx no enviará encabezados de respuesta Keep-Alive.

client_header_timeout
El período de tiempo de espera para que el cliente envíe un encabezado de solicitud completo al servidor. Si el cliente no envía un encabezado de solicitud completo dentro del tiempo especificado, Nginx devuelve HTTP 408 (Solicitud agotada).

client_body_timeout
especifica el período de tiempo de espera para enviar el cuerpo de la solicitud después de que el cliente establece una conexión con el servidor. Si el cliente no envía ningún contenido dentro del tiempo especificado, Nginx devuelve HTTP 408 (Request Timed Out).

Seis, cambia el número de procesos

cat /proc/cpuinfo | grep -c "physical id"	#查看cpu核数
ps aux | grep nginx							#查看nginx主进程中包含几个子进程

Inserte la descripción de la imagen aquí

vim /usr/local/nginx/conf/nginx.conf
worker_processes  2;				#修改为核数相同或者2倍
worker_cpu_affinity 01 10;			#设置每个进程由不同cpu处理,进程数配2 4 6 8分别为0001 0010 0100 1000 

systemctl restart nginx

Siete, configure la compresión de la página web

vim /usr/local/nginx/conf/nginx.conf
http {
...... 
   gzip on;							#取消注释,开启gzip压缩功能
   gzip_min_length 1k;      		#最小压缩文件大小
   gzip_buffers 4 16k;      		#压缩缓冲区,大小为4个16k缓冲区
   gzip_http_version 1.1;   		#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
   gzip_comp_level 6;       		#压缩比率
   gzip_vary on;					#支持前端缓存服务器存储压缩页面
   gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;		#压缩类型,表示哪些网页文档启用压缩功能
...... 
}

Inserte la descripción de la imagen aquí

cd /usr/local/nginx/html
先将xlql.png文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="xlql.png"/>				#网页中插入图片
</body>
</html>

systemctl restart nginx

Inserte la descripción de la imagen aquí

echo "192.168.2.8 www.mhh.com" >> /etc/hosts #添加映射关系

在Linux系统中,打开火狐浏览器,右击点查看元素
选择 网络 ---> 选择 HTML、WS、其他 
访问 http://www.mhh.com ,双击200响应消息查看响应头中包含 Content-Encoding: gzip

Inserte la descripción de la imagen aquí

Ocho, configure la cadena antirrobo

Host de origen web (192.168.2.8)

Preparación anti-hotlink:

vim /usr/local/nginx/conf/nginx.conf
http {
......
	server {
	......
        location ~*\.(png|gif|swf)$ {
          valid_referers *.mhh.com mhh.com;
          if ( $invalid_referer ) {
          rewrite ^/ http://www.mhh.com/error.jpg;
          #return 403;
          }
        }
	......
	}
}

systemctl restart nginx
----------解释--------------------
~* .(jpg|gif|jepg|bmp|ico)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;
后面的网址或者域名 :referer 中包含相关字符串的网址;
if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为1,则执行后面的操作,即进行重写或返回 403 页面。

Inserte la descripción de la imagen aquí

~ *. (jpg | gif | jepg | bmp | ico) $: esta expresión regular indica que la coincidencia no distingue entre mayúsculas y minúsculas y que los archivos terminan en .jpg o .gif o .swf;
valid_referers: establece sitios web de confianza, puede ser imágenes de uso normal; la
siguiente URL o nombre de dominio: la URL que contiene la cadena relevante en el referente;
declaración if: si el nombre de dominio de origen del enlace no está en la lista de referencias válidas, y $ invalid_referer es 1, entonces las siguientes operaciones se realizará, es decir, reescribir O volver a la página 403.

Preparación de la página web:

cd /usr/local/nginx/html
将xlql.png、error.jpg文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="xlql.png"/>
</body>
</html>

echo "192.168.2.8 www.mhh.com" >> /etc/hosts
echo "192.168.2.7  www.dao.com" >> /etc/hosts

Inserte la descripción de la imagen aquí

Host del sitio web Hotlink (192.168.2.7)

#先安装nginx服务
cd /usr/local/nginx/html
vim index.html
...... 
<img src="http://www.mhh.com/xlql.png"/>
</body>
</html>

echo "192.168.2.8 www.mhh.com" >> /etc/hosts
echo "192.168.2.7  www.dao.com" >> /etc/hosts

Inserte la descripción de la imagen aquí

Realice la verificación del navegador en el host del sitio web de la imagen robada

http://www.mhh.com
http://www.dao.com

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Nueve, optimización de parámetros de fpm

cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
pid = run/php-fpm.pid

vim /usr/local/php/etc/php-fpm.d/www.conf
#96行;fpm进程启动方式,动态的
pm = dynamic
#107行;fpm进程启动的最大进程数
pm.max_children=20
#112行;动态方式下启动时默认开启的进程数,在最小和最大之间
pm.start_servers = 5
#117行;动态方式下最小空闲进程数
pm.min_spare_servers = 2
#122行;动态方式下最大空闲进程数
pm.max_spare_servers = 8

#启动php-fpm,不可用于重启
/usr/local/php/sbin/php-fpm  -c /usr/local/php/lib/php.ini
#执行第一个命令后,就可以使用下面这条命令查看pid号重启php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
netstat -anpt | grep 9000

Supongo que te gusta

Origin blog.csdn.net/qq_35456705/article/details/113290967
Recomendado
Clasificación