Skip to content

Instantly share code, notes, and snippets.

@brunopk
Created August 20, 2020 20:05
Show Gist options
  • Save brunopk/e579fb53d56af4c39a0f7dec42040857 to your computer and use it in GitHub Desktop.
Save brunopk/e579fb53d56af4c39a0f7dec42040857 to your computer and use it in GitHub Desktop.
Deploy Angular on nginx with HTTPS

Deploy Angular on nginx with HTTPS

Introducción

El despliegue de la aplicación web está pensado para realizarse con nginx, el cual se encargará de servir todo el contenido estático publicando solamente el archivo index.html. Como dice en la página oficial (ver referencias), la configuración se hace editando el archivo nginx.conf el cual puede estar alojado en alguna de las siguientes rutas:

  • /usr/local/nginx/conf,
  • /etc/nginx
  • /usr/local/etc/nginx

Configuración de nginx

Configuración de ejemplo:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       caj.conf;
    include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    #set client body size to 2M #
	client_max_body_size 2M;
}

La línea include caj.conf permite dividir la configuración en varios archivos, en este caso en el archivo caj.conf (por defecto la ruta para los archivos de configuración es la misma donde se encuentra el archivo principal nginx.conf). Siguiendo con el ejemplo, el archivo caj.conf contiene lo siguiente:

server {
    listen 443 ssl http2;
    server_name _;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
    ssl_certificate     asd.crt;
    ssl_certificate_key  asd.pem;
    ssl_session_cache   shared:SSL:1m;
    root html/caj-frontend;

    # Habilitar HSTS	
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    #location / {
	#allow 10.64.35.0/24;
	#deny all;
    #}

    location / {
        sendfile        on;
        tcp_nopush      on;
        sendfile_max_chunk 2m;
        try_files $uri $uri/ /index.html?$query_string;
    }
}
  • Todas las líneas deben ser finalizadas con el carácter ";".
  • Todas las líneas que comiencen con el carácter "#" serán ignoradas (líneas comentadas).
  • **Reiniciar el servidor luego de editar (y salvar) alguno de los archivos de configuración.
  • listen 443 ssl http2;: define el puerto y por defecto para permitir conecciones HTTPS, se utiliza el 443.
  • server_name _;: define el nombre de dominio (hostname) donde quedará accesible la aplicación en internet.
  • ssl_certificate asd.crt;: define la clave pública para HTTPS.
  • ssl_certificate_key asd.pem;: define la clave privada para HTTPS.
  • root html/caj-frontend;: define donde se encuentra el contenido estático a publicar, por defecto es en el directorio html/ dentro del directorio de instalación de nginx.

Solicitar los archivos asd.crt y asd.pem los cuales fueron obtenidos del archivo asd.p12 utilizado para aplicar HTTPS al backend. Estas claves son certificados autofirmados que se pueden obtener por línea de comandos utilizando aplicaciones Java, no olvidar remplazarlos por claves certificadas por alguna autoridad certificadora.

Para más información se recomienda ir a las referencias "Beginner's Guide" y "Full Example Configuration" citadas al final de este documento.

Comandos para manejo de nginx

El manejo de nginx se hace con el comando nginx -s.

Por ejemplo, para reiniciar el servidor :

nginx -s reload

Referencias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment