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.