Dicen que las crisis crean oportunidades. En el caso de Mínimo creó la oportunidad de dejar Apache para los proyectos y servidores con mas recursos y aprender algo de Nginx. Una joyita que combinada con un droplet barato de Digital Ocean, mantiene (casi siempre) en línea varios proyectos.
Acá el registro de las «nuances» del camino.
Índice
- Actualizar PHP en un servidor Nginx
- Agregar Access-Control-Allow-Origin en Nginx
- Configurar un nuevo dominio seguro en Nginx Con Let’sEncrypt + Cloudflare
- Agregar el dominio a Digital Ocean
- Agregar el dominio a CloudFlare
- Cambiar los registro A o CNAME (base y www) de Cloudflare y apuntarlos a Digital Ocean
- Cambiar los DNS del dominio y apuntarlos a Cloudflare.
- Configurar el servidor Nginx
- Configurar Let’s Encrypt con Nginx
- Configurar el servidor Nginx
- Navegar hacia el directorio /var/www desde donde le diremos a Nginx que tome los archivos de nuestro sitio web
Actualizar PHP en un servidor Nginx
En el proceso de trabajo sobre Hopmasters, una app creada en Flutter con backend en WordPress + Woocommerce fue necesario actualizar la versión insegura de php7.0 hacia la mas razonable php7.4. Actualizar sus archivos de configuración para seguir las recomendaciones de WooCommerce y mantener los servicios en pié sin interrupciones.
Es importante recordar que Nginx utiliza PHP-FPM (FastCGI Process Manager) una implementación alternativa de FastCGI que cuenta con características interesantes para aplicaciones de alto tráfico, que combinada con un servidor de alto rendimiento y bajo consumo de recursos como Nginx nos ha demostrado ser una combinación ideal, de fácil mantenimiento.
Lo primero es crear y actualizar los repositorios en los que vamos a buscar nuestra versión de php7.4
sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update
En algunas configuraciones de sistema es posible que tengamos problemas obteniendo los pares de claves para estos repositorios extras, lo cual lo solucionamos con el siguiente comando que va a obtener las keys necesarias. Para mas información mira este referencia.
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <PUBKEY>
Después de esto nos queda instalar php7.4, en su versión fpm y comprobar que efectivamente se ha instalado correctamente.
sudo apt install php7.4-fpm php-fpm7.4 -v
Instalamos además las extensiones de php mas comunes y necesarias para el proyecto.
sudo apt install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl -y
Cualquier extensión extra que necesitemos la podemos instalar con un comando sencillo.
sudo apt install php7.4-nameofextension
Lo siguiente es abrir el archivo de configuración Nginx para el sitio que queremos actualizar y utilizar el sock correcto para la nueva versión de php recientemente instalada.
Estos archivos de configuración se encuentran en la carpeta sites-available de Nginx. Por ejemplo:
sudo nano /etc/nginx/sites-available/your.conf
Una vez allí debemos localizar la linea que define el sock fastcgi a utilizar y cambiarlo por la nueva versión.
Entonces localizamos:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
Y lo cambiamos por:
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
Testeamos la configuración del servidor:
sudo nginx -t
Y si todo está bien reiniciamos el servicio:
sudo service nginx restart
Finalmente nos queda cambiar la configuración de php. Para esto debemos localizar el archivo de configuración php.ini para FPM. Un error común es modificar el php.ini equivocado, por lo que asegúrate de estar modificando el php.ini que se encuentra en:
sudo nano /etc/php/7.4/fpm/php.ini
Por último reiniciamos php-fpm y voilà! Tenemos nuevo php en nuestro servidro Nginx.
sudo php-fpm7.4 -t sudo service php7.4-fpm restart
Agregar Access-Control-Allow-Origin en Nginx
A veces necesitamos servir cosas «raras» desde un servidor Nginx. ¿Y porqué no? Por ejemplo retocar nuestros response headers, (en el caso de nuestro proyecto Bibliopath) consumir archivos epub3 y opf desde un servidor Nginx.
Para eso necesitamos tener el servidor compilado con el módulo ngx_http_headers_module. Si es así, la configuración es sencilla. Alcanza con editar el archivo de configuración del dominio en cuestión dentro de la carpeta «sites-available» de Nginx (usualmente dentro de /etc) y agregar lo siguiente.
location ~* \.(eot|ttf|woff|woff2)$ { add_header Access-Control-Allow-Origin <origen>; }
Las extensiones de archivos en nuestro caso eran diferentes, en el ejemplo son archivos de fuentes. El <origen> es el dominio desde el cual queremos consumir estos recursos. Cuidado con los wilds (*). El servidor lo va a agradecer, lo dice la experiencia propia.
Configurar un dominio seguro en Nginx Con Let’sEncrypt + Cloudflare
Primero que nada necesitamos crear los archivos del servidor.
mkdir -p /var/www/example.com chown -R www-data:www-data /var/www/example.com cd example.com touch index.html
Edita este archivo index.html e ingresale un código html de prueba cualquiera.
Ahora vamos a crear los server blocks para cada dominio.
touch /etc/nginx/sites-available/example.com server { root /var/www/example.com; index index.html index.htm index. nginx-debian.html; server_name example.com www.example.com; location / { try_files $uri $uri/ =404; } if ($host = 'www.example.com') { return 301 https://example.com$request_uri; } }
Crear los enlaces simbólicos hacia la carpeta sites-enabled de Nginx.
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Verificar que la configuración de Nginx está funcionando correctamente con nginx -t
Reiniciar el servidor y crear los certificados de Let’s Encrypt con certbot.
systemctl restart nginx #reiniciar el servidor # crear certificados certbot --nginx -d example.com -d www.example.com