Configuración del servidor proxy - AWS Elastic Beanstalk

Configuración del servidor proxy

Elastic Beanstalk utiliza nginx o Apache HTTPD como proxy inverso para asignar la aplicación al equilibrador de carga Elastic Load Balancing en el puerto 80. El valor predeterminado es nginx. Elastic Beanstalk proporciona una configuración de proxy predeterminada que puede ampliar o invalidar completamente su propia configuración.

De forma predeterminada, Elastic Beanstalk configura el proxy para reenviar las solicitudes a la aplicación en el puerto 8080. Puede invalidar el puerto predeterminado al establecer la PORTpropiedad del entorno en el puerto en el que la aplicación principal esté a la escucha.

Notas
  • El puerto en que su aplicación está a la escucha no afecta al puerto en el que el servidor nginx está a la escucha para recibir las solicitudes del balanceador de carga.

  • En las versiones de la plataforma Node.js AMI de Amazon Linux (antes de Amazon Linux 2), Elastic Beanstalk configura el proxy para reenviar solicitudes a su aplicación en el puerto 8081. Para obtener instrucciones, consulteConfiguración del proxy en la AMI de Amazon Linux (anterior a Amazon Linux 2) en esta página.

Todas las plataformas de Amazon Linux 2 admiten una función de configuración de proxy uniforme. Para obtener instrucciones sobre cómo configurar el servidor proxy en las nuevas versiones de la plataforma Amazon Corretto que ejecutan Amazon Linux 2, expanda la sección Configuración de proxy inverso deAmpliación de las plataformas Linux de Elastic Beanstalk.

Configuración del proxy en la AMI de Amazon Linux (anterior a Amazon Linux 2)

Si su entorno Elastic Beanstalk Node.js utiliza una versión de la plataforma AMI de Amazon Linux (anterior a Amazon Linux 2), lea la información de esta sección.

La plataforma Node.js utiliza un proxy inverso para transmitir las solicitudes del puerto 80 en la instancia a la aplicación que está a la escucha en el puerto 8081. Elastic Beanstalk proporciona una configuración de proxy predeterminada que puede ampliar o invalidar completamente su propia configuración.

Para ampliar la configuración predeterminada, añada archivos .conf a /etc/nginx/conf.d con un archivo de configuración. Para ver un ejemplo específico, consulte Terminación de HTTPS en instancias EC2 que ejecutan Node.js.

La plataforma Node.js establece la variable de entorno PORT en el puerto al que el servidor proxy pasa el tráfico. Lea esta variable en el código para configurar el puerto de la aplicación.

var port = process.env.PORT || 3000; var server = app.listen(port, function () { console.log('Server running at http://127.0.0.1:' + port + '/'); });

La configuración predeterminada de NGINX reenvía el tráfico a un servidor ascendente que se llama nodejs en 127.0.0.1:8081. Puede eliminar la configuración predeterminada y proporcionar la propia en un archivo de configuración.

ejemplo .ebextensions/proxy.config

El siguiente ejemplo elimina la configuración predeterminada y agrega una configuración personalizada que reenvía el tráfico al puerto 5000, en lugar del puerto 8081.

files: /etc/nginx/conf.d/proxy.conf: mode: "000644" owner: root group: root content: | upstream nodejs { server 127.0.0.1:5000; keepalive 256; } server { listen 8080; if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; access_log /var/log/nginx/access.log main; location / { proxy_pass http://nodejs; proxy_set_header Connection ""; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } gzip on; gzip_comp_level 4; gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; location /static { alias /var/app/current/static; } } /opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh: mode: "000755" owner: root group: root content: | #!/bin/bash -xe rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf service nginx stop service nginx start container_commands: removeconfig: command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"

La configuración de ejemplo (/etc/nginx/conf.d/proxy.conf) utiliza la configuración predeterminada de /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf como punto de partida para incluir el bloque de servidores predeterminado con configuración de compresión y registro y un mapeo de archivos estáticos.

El comando removeconfig elimina la configuración predeterminada del contenedor para asegurarse de que el servidor proxy utiliza la configuración personalizada. Elastic Beanstalk vuelve a crear la configuración predeterminada cuando se implementa cada configuración. Para tener en cuenta esto, en el siguiente ejemplo, se agrega un enlace de implementación posterior a la configuración (/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh). Esto elimina la configuración predeterminada y reinicia el servidor proxy.

nota

La configuración predeterminada podría cambiar en las próximas versiones de la plataforma Node.js. Utilice la última versión de la configuración como punto de partida para las personalizaciones con el fin de garantizar la compatibilidad.

Si anula la configuración predeterminada, debe definir cualquier mapeo de archivos estáticos y compresión GZIP. Esto se debe a que la plataforma no puede aplicar la configuración estándar.