Utilice Serverless App Engine (SAE) para alojar un servicio Nginx en dos escenarios comunes: servir un sitio web estático o actuar como proxy inverso que reenvía las solicitudes de los clientes a una aplicación backend. Esta guía explica cómo compilar una imagen personalizada de Nginx, enviarla a un registro y desplegarla en SAE.
Funcionamiento
Nginx recibe las solicitudes de los clientes y sirve archivos estáticos directamente o reenvía las solicitudes a una aplicación backend según los patrones de URI. La respuesta regresa al cliente a través de Nginx.
Selección del escenario
Identifique qué escenario aplica a su caso antes de comenzar, ya que algunos pasos son específicos para cada uno.
|
Escenario |
Descripción |
Pasos a omitir |
|
Sitio web estático |
Servir HTML, CSS e imágenes desde el contenedor de Nginx |
Omita las reglas de reenvío en el paso 2; omita la puerta de enlace NAT en el paso 4 |
|
Proxy inverso |
Reenviar solicitudes de clientes a una aplicación backend según la URI |
Complete todos los pasos |
El contenedor de Nginx en esta guía escucha en el puerto80. Cuando vincule una instancia de Classic Load Balancer (CLB) en el paso 4, establezca Container Port en80.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Docker instalado en su entorno local o en una instancia de Elastic Compute Service (ECS)
Un repositorio de imágenes en Container Registry (ACR): Enterprise Edition o Personal Edition
(Solo para proxy inverso) Una aplicación backend accesible desde Internet o desde su Virtual Private Cloud (VPC)
Paso 1: Preparar los recursos del sitio web estático
Esta guía utiliza el siguiente archivo de ejemplo: nginx-demo.zip.
El archivo comprimido contiene:
html/index.html— la página de índice predeterminadahtml/error.html— la página de error 404 predeterminadaconf/nginx.conf— el archivo de configuración de Nginx
En producción, reemplace estos archivos con sus propios recursos estáticos y su configuración.
Paso 2: Escribir el archivo de configuración de Nginx
El archivo de ejemplo conf/nginx.conf abarca dos configuraciones: acceso a recursos estáticos y reenvío de solicitudes.
Configurar el acceso a recursos estáticos
...
server {
listen 80 default_server; # Listen on port 80.
...
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
# Serve index.html for requests to the root path.
location / {
root /usr/share/nginx/html; # Path where static files are stored in the container.
index index.html;
}
# Return error.html for 404 errors.
error_page 404 /error.html;
location = /error.html {
root /usr/share/nginx/html;
}
}
...
Configurar reglas de reenvío (solo proxy inverso)
Omita esta sección si solo va a crear un sitio web estático.
Este ejemplo asume que el endpoint de la aplicación backend es 121.40.xx.xx:80. La siguiente configuración reenvía las solicitudes con URI que coinciden con /api/* al backend y reescribe la ruta a /*:
...
# Forward /api/* requests to the backend application.
location /api/ {
proxy_pass http://121.40.xx.xx:80/;
}
...
Si el servicio Nginx y la aplicación backend se encuentran en la misma VPC, utilice el endpoint privado del backend en lugar de una dirección IP pública. En ese caso, no necesita una puerta de enlace NAT de Internet.
Para consultar todas las opciones de configuración, consulte la documentación oficial de Nginx.
Paso 3: Compilar y enviar la imagen
Escribir un Dockerfile
# Base image
FROM nginx:1.20.2
# Copy the Nginx configuration file into the container.
COPY conf/nginx.conf /etc/nginx/nginx.conf
# Copy static files into the container.
COPY html /usr/share/nginx/html
Compilar la imagen
Ejecute el siguiente comando en el directorio donde se encuentra el Dockerfile:
docker build . -t my-nginx:1.0
# .: Use the current directory as the build context.
# -t: Set the image name and tag.
Probar la imagen localmente
# Start the container.
docker run -d -p 80:80 my-nginx:1.0
# Test static file access.
curl localhost:80/
# Test request forwarding (reverse proxy only).
curl localhost:80/api/
Enviar la imagen a ACR
Envíe la imagen a su repositorio en Container Registry (ACR). Para obtener instrucciones, consulte Push and pull images (Enterprise Edition) o Push and pull images (Personal Edition).
Paso 4: Desplegar Nginx y configurar el acceso de red
Despliegue la aplicación Nginx a partir de la imagen que envió a ACR. Consulte Deploy an application from an image.
(Solo para proxy inverso con backend público) De forma predeterminada, las aplicaciones en SAE no tienen acceso a Internet. Si su servicio Nginx reenvía solicitudes a un endpoint público, configure una puerta de enlace NAT de Internet para la VPC. Consulte Configurar una puerta de enlace NAT de Internet para permitir que las aplicaciones SAE accedan a Internet.
-
Vincule una instancia de CLB para exponer el servicio Nginx en una dirección IP pública. Consulte Attach a CLB instance to an application to generate a public or private endpoint. Establezca Container Port en
80.Para permitir que los clientes accedan al servicio Nginx mediante un nombre de dominio, configure la resolución DNS para la dirección IP pública.
Abra un navegador y vaya a la dirección IP pública para comprobar el despliegue.
Paso 5 (opcional): Actualizar la configuración de Nginx sin recompilar la imagen
Utilice un elemento de configuración (ConfigMap) para inyectar un archivo nginx.conf actualizado en el contenedor en ejecución. Esto evita tener que recompilar la imagen cada vez que modifique la configuración.
Un archivo de configuración inyectado mediante un ConfigMap sobrescribe el archivo original en la imagen del contenedor.
-
Cree un elemento de configuración (ConfigMap) en el namespace de la aplicación Nginx. Consulte Create a configuration item (ConfigMap). Establezca Configuration Item Name en
nginx. Agregue una clave llamadanginx.confy establezca su valor con el contenido del archivo de configuración actualizado.
-
Inyecte el archivo de configuración y vuelva a desplegar la aplicación. Consulte Inject configurations. En Configuration Item, seleccione el ConfigMap
nginx. En Key, seleccionenginx.conf. Establezca Mount Path en/etc/nginx/nginx.conf.
-
Una vez que la aplicación se vuelva a desplegar, utilice WebShell para iniciar sesión en una instancia de la aplicación y compruebe que el archivo de configuración actualizado esté en su lugar.
