Está en la página 1de 7

2.

- Instalacion del servidor web Nginx


2.1- Instalando el servidor web Nginx:

root@cloud-server:~# apt install nginx

Comprobar el servicio:

root@cloud-server:~# systemctl status nginx

Comprobar que está escuchando en el puerto 80:

root@cloud-server:~# netstat -ltunp | grep nginx

En este momento, es posible acceder a la página web por defecto de Nginx poniendo la
dirección Ip del servidor o su nombre de dominio en caso de que se pueda resolver con
un servidor DNS o a través de un fichero hosts.

2.2- Configuración de Nginx

Los archivos de configuración de Nginx se encuyentran en /etc/nginx.


El archivo de configuración principal es etc/nginx/nginx.conf y contiene configuraciones
contenidas en otros archivos, como/ etc/nginx/conf.d y directorios como /etc/nginx/sites-
enabled.

2.2.1-Sitio web por defecto

Nginx Tiene activado un servidor virtual por defecto que es el que responde cuando no
hay un servidor virtual específico configurado para ese dominio, su fichero de
configuración esta en /etc/nginx/sites-available/default;

root@cloud-server:~# cat /etc/nginx/sites-available/default

# Default server configuration


#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server


#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/run/php/php7.3-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}

# deny access to .htaccess files, if Apache's document root


# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

# Virtual Host configuration for example.com


#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}

2.2.2- Servidores virtuales en Nginx

Para crear un servidor virtual en Nginx hay que crear su archivo de configuración
en /etc/nginx/sites-available para despues activarlo. Nginx no tiene en cuenta las
configuraciones de los sitios del directorio sites-available, para que se añada la
configuracion de un sitio creado en sites-available al archivo de configuración principal
hay que crear un enlace simbolico que apunte ese fichero de configuración
desde /etc/nginx/sites-enabled, de esa forma quedará activado o lo que es lo mismo,
Nginx añadirá su configuración al archivo de configuración principal
en /etc/nginx/nginx.conf.
El sitio web por defecto de Nginx es un servidor virtual con su archivo de configuracion
en /etc/nginx/sites-available/default y su enlace en /etc/nginx/sites-enabled/default

2.2.2.1- Crear un servidor virtual

Servidor virtual starenterprise.es: Creo el archivo de configuración


/etc/nginx/sitesavailable/starenterprise.es.conf:

server {
listen 80;
listen [::]:80;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/starenterprise;

# Add index.php to the list if you are using PHP


index index.html index.htm index.php index.nginx-debian.html;

server_name www.starenterprise.es;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server


#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/run/php/php7.3-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}

# deny access to .htaccess files, if Apache's document root


# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
access_log /var/log/nginx/starenterprise.es-access.log;
error_log /var/log/nginx/starenterprise.es-error.log;
}
2.2.2.2- Configuración del servidor virtual:

La configuración del servidor virtual se compone de una serie de directivas dentro de un


bloque server:

- listen: indica los puertos de escucha tanto para IPv5 como para IPv6
- server-name: especifica el nombre de dominio al que se asocia el servidor virtual
- root: indica el directorio que contendrá los archivos que forman el sitio web; archivos
html, imágenes,etc.
- index: aquí se enumeran los archivos que se buscarán en primer lugar dentro del
directorio, es decir, los archivos índice.
- location: En este bloque se indican una serie de configuraciones concretas de esta ruta o
directorio del sitio web. La directiva try_files indica que el recurso solicitado (URL) ha de
resolverse como un archivo, en caso contrario como un directorio y como ultima opción
error 404.

2.2.2.3- Archivos del sitio web

Los archivos web del servidor por defecto se alojan en /var/www/html, para el sitio
starenterprise.es vamos a crear el directorio /var/www/starenterprise y crearemos el
archivo index.html que aparecerá como página de inicio del sitio.

root@cloud-server:~# mkdir /var/www/starenterprise

root@cloud-server:~# nano /var/www/starenterprise/index.html

<html>
<head>
<title>
Sitio de Starenterprise
</title>
</head>
<body>
<h1>Bienvenidos a la web de Starenterprise</h1>
</body>
</html>

2.2.2.4- Activación del servidor virtual

Para activar el servidor virtual hay que crear el enlace simbólico en /etc/sites-
enebled/starenterprise.es.conf que apunte a
/etc/nginx/sites-available/starenterprise.es.conf

root@cloud-server:~# ln -s /etc/nginx/sites-available/starenterprise.es.conf
/etc/nginx/sites-enabled/

En este punto, si accedemos al sitio mediante el nombre de dominio


www.starenterprise.es accederemos a la página creada para este sitio virtual en lugar de
la página del sitio por defecto de Nginx.

Comprobamos que la configuración de Nginx esté correcta y la recargamos:

root@cloud-server:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@cloud-server:~# systemctl reload nginx.service

2.2.2.5- Configurar el servidor virtual con HTTPS mediante certificados SSL

Crearemos los certificados autofirmados necesarios para el cifrado asimétrico mediante


OpenSSL. Primero crearemos una clave privada y en base a esa clave crearemos la clave
pública (certificado) mediante el estándar x509, de esta forma el certificado dependerá de
la clave privada para cualquier servicio que requiera una conexión ssl.

Instalación de openssl:

root@cloud-server:~# apt install openssl

Creamos una clave privada

root@cloud-server:~# openssl genrsa -out server.key 4096

Generar CSR (Certificate Singning Request): Normalmente este archivo csr es lo que se
manda a la autoridad certificadora que emite el certificado y lo firma digitalmente para
asegurar su autenticidad. En este caso el certificado lo generaré yo y será un certificado
autofirmado

root@cloud-server:~# openssl req -new -key server.key -out server.csr

- req –new: se indica para crear el csr


- key server.key: indica el fichero de clave privada que se incluye en la solicitud
- out server.csr: indica el archivo de salida que será el crs generado a partir de la clave
y los datos que se nos soliciten como el nombre del dominio, email, pais, organización,etc.

root@cloud-server:~# openssl req -new -key server.key -out server.csr


You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Madrid
Locality Name (eg, city) []:Madrid
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Starenterprise
Organizational Unit Name (eg, section) []:TI
Common Name (e.g. server FQDN or YOUR name) []:starenterprise.es
Email Address []:info@starenterprise.es

Please enter the following 'extra' attributes


to be sent with your certificate request
A challenge password []:
An optional company name []:

2.2.2.5.1- Generar el certificado

Para generar el certificado se usarán la clave privada y el archivo csr creados


anteriormente.

root@cloud-server:~# openssl x509 -req -days 365 -in server.csr -signkey


server.key -out server.crt
Signature ok
subject=C = ES, ST = Madrid, L = Madrid, O = Starenterprise, OU = TI, CN =
starenterprise.es, emailAddress = info@starenterprise.es
Getting Private key
root@cloud-server:~# ls
server.crt server.csr server.key

Tras ubicar el certificado en /etc/ssl/certs/starenterprise.es/cloud-server.crt y la


clave privada en /etc/ssl/private/starenterprise.es/cloud-server.key, lo siguiente es
configurar el archivo de configuracion del servidor virtual.

root@cloud-server:~# mkdir /etc/ssl/certs/starenterprise.es


root@cloud-server:~# cp server.crt /etc/ssl/certs/starenterprise.es/cloud-
server.crt

root@cloud-server:~# mkdir /etc/ssl/private/starenterprise.es


root@cloud-server:~# cp server.key /etc/ssl/private/starenterprise.es/cloud-
server.key

2.2.2.5.2- Configurar el certificado en Nginx

Para configurar el certificado en nuestro servidor virtual, hay que añadir las lineas de
configuracion correspondientes a SSL en el archivo de configuración del sitio
/etc/nginx/sites-available/starenterprise.es.conf.

listen 443 ssl;


listen [::]:443 ssl;
...
#include snippets/snakeoil.conf;
ssl_certificate /etc/ssl/certs/starenterprise.es/cloud-server.crt;
ssl_certificate_key /etc/ssl/private/starenterprise.es/cloud-server.key;
...

Comprobamos que todo esté correcto y recargamos la configuración de Nginx:

root@cloud-server:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@cloud-server:~# systemctl reload nginx.service
root@cloud-server:~# systemctl status nginx

2.2.3- Instalar PHP en Nginx

Nginx no dispone de un módulo que le permita disponer de procesamiento nativo para


PHP, en su lugar debemos instalar php-fpm (FastCGI Process Manager) e indicar a Nginx
que le transmita las sulicitudes que reciba de PHP para que lo procese en el archivo de
configuración del sitio.

root@cloud-server:~# apt install php-fpm


root@cloud-server:~# vi /etc/nginx/sites-available/starenterprise.es.conf

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
Este bloque de ubicación dirige la peticiones php al archivo php7.3-fpm.sock,
que es el socket asociado a php-fpm.

Tras guardar los cambios hay que comprobar que no haya errores de sintaxis y
recarcar la configuración de Nginx:

root@cloud-server:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@cloud-server:~# systemctl reload nginx

Comprobar el funcionamiento de php:

Creamos el archivo info.php en /var/www/starenterprise/info.php

<?php
phpinfo();
?>

También podría gustarte