GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar NGINX en un servidor CentOS 7

Coche NGINX de Walker Cahall

Introducción

Este instructivo lo ayudará a instalar y configurar NGINX para que pueda ejecutar sitios web de alto tráfico mientras mantiene el alto nivel de rendimiento que esperan sus clientes. También instalaremos software adicional para aprovechar al máximo NGINX, por lo que esta guía también incluirá la instalación y configuración de MySQL, PHP-APC y PHP-FPM.

¿Por qué NGINX? Hay un largo debate de ida y vuelta sobre si debe usar Apache o NGINX, y aunque el rendimiento general de las dos plataformas de servidor web es más o menos el mismo, el modelo de procesamiento basado en eventos de NGINX brilla por ser simple, liviano y simplemente mejor en el manejo de grandes cantidades de accesos simultáneos para contenido estático sin sobrecargar el hardware de su servidor.

¿Qué necesitas?

– Necesita un servidor CentOS 7 configurado con una dirección IP estática. Si aún no tiene un servidor, puede visitar nuestra página de alojamiento de VPS y crear un nuevo servidor en menos de 30 segundos.

Preparación del servidor

Para comenzar, inicie sesión en su servidor CentOS a través de SSH. Los servidores de Atlantic.Net Cloud están configurados como instalaciones mínimas para evitar que se instalen paquetes innecesarios y nunca se utilicen. Debido a esto, vamos a comenzar instalando un par de paquetes que no existen de manera predeterminada.

yum install wget
yum install nano

Una vez que haya iniciado sesión, asegúrese de que su servidor esté completamente actualizado.

yum update

Con el servidor actualizado, podemos continuar con el proceso e instalar NGINX. Dado que NGINX no está incluido en los repositorios predeterminados de CentOS, vamos a utilizar el repositorio Extra Packages for Enterprise Linux (EPEL). También vamos a usar paquetes de los repositorios de REMI más adelante en el proceso, así que descarguemos e instalemos eso también.

Puede instalar la última versión de EPEL usando el siguiente comando:

yum install epel-release -y

Antes de continuar, también crearemos un nuevo usuario y grupo que será utilizado por NGINX y PHP-FPM. Si deja a los usuarios y grupos usando la configuración predeterminada, todo debería seguir funcionando para usted, pero para ayudar a proporcionar un poco de seguridad adicional, haremos el cambio.

groupadd www-data
useradd -g www-data www-data

Mientras trabajamos en la preparación del servidor, sigamos adelante y configuremos un nuevo directorio para nuestro servidor web. Normalmente la gente usa /var/www/html para sus sitios, pero siempre me he sentido más cómodo teniendo los archivos del sitio en /home/domainname.tld/html , así que eso es lo que usaremos. Para el tutorial, usaremos example.tld como nuestro dominio:asegúrese de actualizar las entradas en negrita para que coincidan con el dominio que está configurando.

mkdir -p /home/example.tld/html
chown -R www-data:www-data /home/example.tld/
chmod -R 0755 /home/example.tld/html

Ahora que hemos terminado de preparar el servidor, podemos continuar con la instalación de nuestros paquetes de software.

Instalar y configurar MariaDB en CentOS 7

Primero, instale el paquete del servidor MariaDB con el siguiente comando:

yum install mariadb-server -y

Después de instalar MariaDB, inicie el servicio MariaDB y habilítelo para que se inicie al reiniciar el sistema:

systemctl start mariadb
systemctl enable mariadb

A continuación, asegure la instalación de MariaDB con el siguiente comando:

mysql_secure_installation

El proceso de instalación segura de MySQL lo guiará a través de los cambios de seguridad iniciales que deben implementarse para su nueva instancia de MySQL.

Nota:Elija una contraseña segura y limite el acceso de root solo a localhost.

mysql_secure_installation

Edite el /etc/my.cf archivo para que coincida con lo siguiente, limitando el servidor solo para escuchar conexiones locales:

[mysqld]
bind-address = 127.0.0.1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mariadb/mariadb.pid

Vamos a reiniciar todos los servicios al final, así que sigamos adelante.

Instalar y configurar NGINX en CentOS 7

yum install nginx

Una vez instalado, debemos verificar cuántos núcleos lógicos de CPU están disponibles en su servidor. Para hacer esto, ejecute el siguiente comando:

grep -c 'model name' /proc/cpuinfo

Tome nota del resultado ya que esto es lo que verá en la configuración de los procesos de trabajo también. Abra /etc/nginx/nginx.conf y reemplace el contenido actual con lo siguiente:

user    www-data;
worker_processes  2;

pid        /var/run/nginx.pid;

events {
        worker_connections  1024;
}

http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 64;

        error_log  /var/log/nginx/error_log;

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

        sendfile        on;

        keepalive_timeout  30;
        server_tokens off;

        gzip on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";
        gzip_http_version 1.1;
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;

        # enabled sites
        include /etc/nginx/conf.d/*.conf;
}

A continuación, debemos configurar nuestro archivo de configuración de dominio. Esto se hace creando un nuevo archivo llamado /etc/nginx/conf.d/example.conf . Nuevamente, asegúrese de actualizar las entradas en negrita para que coincidan con el dominio que está agregando.

server {
        listen  80;

        server_name     example.tld;

        client_max_body_size 5m;
        client_body_timeout 60;

        access_log /var/log/nginx/example.tld_access;
        error_log  /var/log/nginx/example.tld_error error;

        root /home/example.tld/html/;
        index  index.html index.php;

        ### SEO sitemaps ###
        rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
        rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;

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

        ### security ###
        error_page 403 =404;
        location ~ /\. { access_log off; log_not_found off; deny all; }
        location ~ ~$ { access_log off; log_not_found off; deny all; }
        location ~* wp-admin/includes { deny all; }
        location ~* wp-includes/theme-compat/ { deny all; }
        location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; }
        location /wp-content/ { internal; }
        location /wp-includes/ { internal; }
        location ~* wp-config.php { deny all; }

        ### disable logging ###
        location = /robots.txt { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }

        ### caches ###
        location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; }
        location ~* \.(woff|svg)$ { access_log off; log_not_found off; expires 30d; }

        ### php block ###
        location ~ \.php?$ {
                try_files $uri =404;
                include fastcgi_params;
                fastcgi_pass unix:/var/run/php-www.socket;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_hide_header X-Powered-By;
        }
}

Debido a que cambiamos el usuario con el que se ejecuta NGINX, debemos cambiar los permisos de propiedad para los archivos temporales de NGINX.

chown -R www-data:www-data /var/lib/nginx/
chmod 700 /var/lib/nginx/

Nuevamente, vamos a reiniciar todos los servicios al final. Continuando, en lugar de instalar una versión completa de PHP en el servidor, vamos a PHP-FPM, una implementación alternativa de PHP FastCGI.

Instalar y configurar PHP-FPM en CentOS 7

Nota:Después de la instalación, debemos actualizar la configuración "cgi.fix_pathinfo" para desactivar una posible vulnerabilidad que podría permitir que un tercero ejecute su propio código PHP en su nuevo servidor.

Primero, instala el repositorio de Remi con el siguiente comando:

yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Luego, instale PHP-FPM con otras extensiones requeridas usando el siguiente comando:

yum --enablerepo=remi-php74 install php-fpm php-mysql
nano /etc/php.ini

Cambiar

;cgi.fix_pathinfo=1

a

cgi.fix_pathinfo=0

Abra /etc/php-fpm.d/www.conf y cambie la configuración a lo siguiente:

[www]
listen = /var/run/php-www.socket

user = www-data
group = www-data

listen.owner = www-data
listen.group = www-data
listen.mode = 0660
listen = /var/run/php-www.socket
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/blogcms_log
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 400
listen.backlog = -1
pm.status_path = /status

request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited

catch_workers_output = yes

php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_admin_value[error_log] = /var/log/php-fpm/www-error_log
php_admin_flag[log_errors] = on

Guarde sus cambios.

Instalar y configurar PHP-APC en CentOS 7

La pieza final del rompecabezas será instalar un acelerador de PHP para mejorar aún más los tiempos de carga de archivos estáticos.

yum --enablerepo=remi-php74 install php-pecl-apc

Una vez que se haya completado la instalación, abra /etc/php.d/50-apc.ini y reemplace el contenido con lo siguiente:

extension = apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128M
apc.num_files_hint=1024
apc.user_entries_hint=4096
apc.ttl=7200
apc.use_request_time=1
apc.user_ttl=7200
apc.gc_ttl=3600
apc.cache_by_default=1
apc.filters
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.file_update_protection=2
apc.enable_cli=0
apc.max_file_size=1M
apc.stat=1
apc.stat_ctime=0
apc.canonicalize=0
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.include_once_override=0
apc.lazy_classes=0
apc.lazy_functions=0
apc.coredump_unmap=0
apc.file_md5=0
apc.preload_path

Toques finales

Ahora que todo está hecho, podemos verificar nuestra configuración de NGINX ejecutando:

nginx -t

Si la configuración regresa con "nginx:el archivo de configuración /etc/nginx/nginx.conf test es exitoso", podemos iniciar (o reiniciar) todos los servicios y asegurarnos de que todos los servicios estén configurados para iniciarse al iniciar el sistema.

systemctl start mariadb ; systemctl enable mariadb
systemctl start nginx ; systemctl enable mariadb
systemctl start php-fpm ; systemctl enable php-fpm

Como paso final, vamos a verificar que la configuración funcione creando una página de prueba de info.php y moviendo una copia del index.html predeterminado al directorio de inicio de nuestro sitio. Como antes, asegúrese de actualizar las entradas en negrita con el dominio que está configurando.

cp -R /usr/share/nginx/html/* /home/example.tld/html/
nano /home/example.tld/html/info.php
<?php

// Show all information, defaults to INFO_ALL
phpinfo();

?>

Probando todo

Visitando http://example.tld debería mostrar el archivo index.html predeterminado. Visitando http://example.tld /info.php debería mostrar información sobre PHP.

¡Con eso, ahora tiene un servidor que ejecuta todos los componentes necesarios para ejecutar su sitio web!

Vuelva a consultar aquí para obtener más actualizaciones y considerar un servidor privado virtual líder en el mercado de Atlantic.Net.


Linux
  1. Cómo instalar y configurar Nginx en CentOS 8

  2. Configurar el servidor MariaDB en CentOS

  3. CentOS/RHEL:Cómo configurar un servidor DHCP

  4. CentOS / RHEL 5:Cómo instalar y configurar el servidor vsftpd

  5. Centos 7:configurar el servidor DNS

Cómo instalar y configurar Subversion (SVN) en CentOS 7

Cómo instalar y configurar Sandstorm Server en CentOS 8

Cómo instalar y configurar Privoxy Server en CentOS 8

¿Cómo instalar Nginx en CentOS 7?

Cómo configurar el servidor VNC en CentOS/RHEL 6

Centos 7:configurar el servidor NTP