Foros del Web » Administración de Sistemas » Unix / Linux »

Como configurar Nginx en vps

Estas en el tema de Como configurar Nginx en vps en el foro de Unix / Linux en Foros del Web. Alguien conoce algún buen tutoreal/manual para configurar NGINX + PHP FPM + MARIADB y lograr sacar el máximo provecho? Tengo un VPS en digitalocean con ...
  #1 (permalink)  
Antiguo 07/06/2018, 12:22
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Como configurar Nginx en vps

Alguien conoce algún buen tutoreal/manual para configurar NGINX + PHP FPM + MARIADB

y lograr sacar el máximo provecho?

Tengo un VPS en digitalocean con
CPU(s): 12
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 12
Ram 32gb
SSD 320 gb

El CPU jamas se satura, si al caso llega al 10% de consumo y de ram llego a ocupar los 5gb
La base de datos pesa 1.2 GB

Y trabaja relativamente bien, pero apenas sube el trafico por alguna publicación relevante el servidor empieza a indicar que no puede responder la solicitud y manda error 500

Siendo que el procesador y la ram están bien relax sin carga que sature todo.

En el ultimo año he hecho infinidad de cambios intentando mejorar el rendimiento.,
Estas son las configuraciones que tengo en mi nginx.conf

Cita:
user nginx;
worker_processes 10;
worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log error;

events {
worker_connections 2048;
multi_accept on;
use epoll;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log off;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 3;
types_hash_max_size 5120;
client_body_timeout 12;
client_header_timeout 12;
send_timeout 10;

gzip on;
gzip_disable "msie6";

gzip_vary on;
#gzip_min_length 10240;
#gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;


client_body_buffer_size 128K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
include /etc/nginx/mime.types;
default_type application/octet-stream;


server {
listen 80;
server_name xxxxxx.com;

rewrite ^/xxxx/$ http://yyyyy/ permanent;
rewrite ^/xxxx/$ http://yyyyy/ permanent;

root /var/www/xxxxx;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php?$args;
}

error_page 404 /404-redirect.php;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

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

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
#fastcgi_param PHP_VALUE 128M
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
include fastcgi_params;
fastcgi_read_timeout 300;
}

location ~ /\.(ht|ssh) {
deny all;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 360d;
log_not_found off;
access_log off;
}

}

Última edición por ArturoGallegos; 07/06/2018 a las 16:37
  #2 (permalink)  
Antiguo 14/06/2018, 04:43
Avatar de lauser
Moderator Unix/Linux
 
Fecha de Ingreso: julio-2013
Ubicación: Odessa (Ukrania)
Mensajes: 3.278
Antigüedad: 11 años, 5 meses
Puntos: 401
Respuesta: Como configurar Nginx en vps

Hola Arturo necesito un par de aclaraciones...

* El CPU jamas se satura, si al caso llega al 10% de consumo
10% del total o de nucleo?

* ram llego a ocupar los 5gb
El poco consumo de la ram indica que no estas cacheando nada.

* La base de datos pesa 1.2 GB
Que motor estas usando?

* Y trabaja relativamente bien, pero apenas sube el trafico por alguna publicación relevante el servidor empieza a indicar que no puede responder la solicitud y manda error 500
Al afirmar que sube el trafico... especifica un poco más. Ese sistema debería soportar más de 350 recurrentes sin ningún problema.

* Siendo que el procesador y la ram están bien relax sin carga que sature todo.

Deberías monitorizar desde el segundo 0 al lanzar un articulo, aunque parece un problema de timeout.

Revisa el tema de la cache que mencione anteriormente.

Tal vez te interese echar un vistazo a CENTMIN MOD.
__________________
Los usuarios que te responden, lo hacen altruistamente y sin ánimo de lucro con el único fin de ayudarte. Se paciente y agradecido.
-SOLOLINUX-
  #3 (permalink)  
Antiguo 14/06/2018, 08:55
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Como configurar Nginx en vps

Desde que puse este post tuve tiempo de hacer algunas pruebas, que me han dado algo mas de estabilidad

Cambie el keepalive_timeout 3; a 5, si bien note que aumento unos segundos el tiempo de carga al menos no me reportaron caídas en la ultima nota que jalo trafico.

Ejecutando top en la terminal ahora me da esto

Tasks: 199 total, 3 running, 196 sleeping, 0 stopped, 0 zombie
%Cpu(s): 9.0 us, 0.5 sy, 0.0 ni, 90.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 25.6/32781060 [||||||||||||||||||||||||| ]


* El CPU jamas se satura, si al caso llega al 10% de consumo
10% del total o de nucleo?
al ejecutar top el valor que me da en Cpu(s) tengo entendido que es el consumo del total de los cpus, a menos que este equivocado, que es probable no lo niego.

* ram llego a ocupar los 5gb
El poco consumo de la ram indica que no estas cacheando nada.
Tienes toda la razón, actualmente no estoy cacheando, eso porque entre tantas caídas lo he deshabilitado para probar., voy a activarlo para la próxima nota que tenga mucho trafico.

* La base de datos pesa 1.2 GB
Que motor estas usando?
He instalado MariaDB

MariaDB [(none)]> STATUS
--------------
mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1

Connection id: 4033808
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 5.5.56-MariaDB MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 13 days 11 hours 30 min 39 sec

Threads: 2 Questions: 320918069 Slow queries: 3 Opens: 3072 Flush tables: 2 Open tables: 256 Queries per second avg: 275.551


* Y trabaja relativamente bien, pero apenas sube el trafico por alguna publicación relevante el servidor empieza a indicar que no puede responder la solicitud y manda error 500
Al afirmar que sube el trafico... especifica un poco más. Ese sistema debería soportar más de 350 recurrentes sin ningún problema.
Como que dato te serviria para este punto... el keepalive lo incremente a raíz de este mensaje en el log
WARNING: [pool www] server reached pm.max_children setting (5),
consider raising it.

Actualmente el php-fpm lo tengo
pm = dynamic
pm.max_children = 50
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.process_idle_timeout = 10s;


* Siendo que el procesador y la ram están bien relax sin carga que sature todo.
Deberías monitorizar desde el segundo 0 al lanzar un articulo, aunque parece un problema de timeout.

Voy a revisar el enlace que me dejas para ver que puedo implementar.


Muchas gracias por tu respuesta!
  #4 (permalink)  
Antiguo 15/06/2018, 11:18
Avatar de lauser
Moderator Unix/Linux
 
Fecha de Ingreso: julio-2013
Ubicación: Odessa (Ukrania)
Mensajes: 3.278
Antigüedad: 11 años, 5 meses
Puntos: 401
Respuesta: Como configurar Nginx en vps

Un apunte Arturo...

De donde sacas esta cifra? worker_processes 10;
Para alto trafico lo lógico sería "auto", y si lo quieres en manual en tu caso 12 (estas capando 2 núcleos).

Tampoco me cuadra "keepalive_timeout 3;", estas obligando a abrir y cerrar conexiones continuamente. Mejor 60 o 65.

El "large_client_header_buffers 2 1k;" --- más correcto 4 4k.


Actualiza Mariadb, pero no a la 10.2 que usa el motor innoDB, mejor la 10.1 que monta XtraDB.
__________________
Los usuarios que te responden, lo hacen altruistamente y sin ánimo de lucro con el único fin de ayudarte. Se paciente y agradecido.
-SOLOLINUX-
  #5 (permalink)  
Antiguo 15/06/2018, 12:00
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Como configurar Nginx en vps

De donde sacas esta cifra? worker_processes 10;
Para alto trafico lo lógico sería "auto", y si lo quieres en manual en tu caso 12 (estas capando 2 núcleos).
No sabia que se podia poner en auto, ya mismo lo cambio, el 10 lo puse porque son 12 núcleos, y pensando en que la base de datos siempre tuviera al menos 2 núcleos para trabajar y no se cayera., si leí que se puede fijar en un valor igual a la cantidad de núcleos., pero por X razón pensé en dejar esos 2 libres por si las dudas.

Tampoco me cuadra "keepalive_timeout 3;", estas obligando a abrir y cerrar conexiones continuamente. Mejor 60 o 65.
lo fije en 3 por una recomendación en un blog que lei, igual pensando en que si tarda de 3 a 15 segundos en cargar el sitio pues se liberara lo antes posible esa conexión., en lugar de dejarla viva en espera de algo.
Por que seria mejor en 60 o 65? no seria mucha espera?


El "large_client_header_buffers 2 1k;" --- más correcto 4 4k.
este no me queda muy claro su funcionamiento y veo que dicen sirve para combatir los bad bots y ataques DoS, seguiré tu recomendación y lo aplicare,


Actualiza Mariadb, pero no a la 10.2 que usa el motor innoDB, mejor la 10.1 que monta XtraDB.
Hoy me doy a la tarde de respaldar y actualizar.


Mil gracias por tus recomendaciones.
  #6 (permalink)  
Antiguo 20/06/2018, 13:37
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Como configurar Nginx en vps

Muchísimas gracias @lauser

De momento soporta y parece que todo va bien, te agradezco tus recomendaciones.

Etiquetas: vps
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:35.