Utilisez Serverless App Engine (SAE) pour héberger un service Nginx dans deux scénarios courants : la diffusion d'un site web statique ou l'agissement en tant que proxy inverse qui transfère les requêtes des clients vers une application backend. Ce guide explique comment créer une image Nginx personnalisée, la pousser vers un registre et la déployer sur SAE.
Fonctionnement
Nginx reçoit les requêtes des clients, sert directement les fichiers statiques ou transfère les requêtes vers une application backend selon les modèles d'URI. La réponse est renvoyée au client via Nginx.
Choisir votre scénario
Identifiez le scénario qui s'applique à votre situation avant de commencer, car certaines étapes sont spécifiques à chaque scénario.
| Scénario | Description | Étapes à ignorer |
|---|---|---|
| Site web statique | Diffuser des fichiers HTML, CSS et images depuis le conteneur Nginx | Ignorez les règles de transfert à l'étape 2 ; ignorez la passerelle NAT à l'étape 4 |
| Proxy inverse | Transférer les requêtes des clients vers une application backend selon l'URI | Effectuez toutes les étapes |
Le conteneur Nginx décrit dans ce guide écoute sur le port80. Lorsque vous associez une instance Classic Load Balancer (CLB) à l'étape 4, définissez Container Port sur80.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Docker installé dans votre environnement local ou sur une instance Elastic Compute Service (ECS)
Un dépôt d'images dans Container Registry (ACR) — Enterprise Edition ou Personal Edition
(Uniquement pour le proxy inverse) Une application backend accessible depuis Internet ou depuis votre Virtual Private Cloud (VPC)
Étape 1 : Préparer les ressources du site web statique
Ce guide utilise le fichier exemple suivant : nginx-demo.zip.
L'archive contient :
html/index.html— la page d'index par défauthtml/error.html— la page d'erreur 404 par défautconf/nginx.conf— le fichier de configuration Nginx
En production, remplacez ces fichiers par vos propres ressources statiques et votre configuration.
Étape 2 : Rédiger le fichier de configuration Nginx
L'exemple de fichier conf/nginx.conf couvre deux configurations : l'accès aux ressources statiques et le transfert de requêtes.
Configurer l'accès aux ressources statiques
...
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;
}
}
...
Configurer les règles de transfert (uniquement pour le proxy inverse)
Ignorez cette section si vous créez uniquement un site web statique.
Cet exemple suppose que l'endpoint de l'application backend est 121.40.xx.xx:80. La configuration suivante transfère les requêtes dont les URI correspondent à /api/* vers le backend et réécrit le chemin en /* :
...
# Forward /api/* requests to the backend application.
location /api/ {
proxy_pass http://121.40.xx.xx:80/;
}
...
Si le service Nginx et l'application backend se trouvent dans le même VPC, utilisez l'endpoint privé du backend au lieu d'une adresse IP publique. Dans ce cas, vous n'avez pas besoin d'une passerelle NAT Internet.
Pour connaître toutes les options de configuration, consultez la documentation officielle de Nginx.
Étape 3 : Construire et envoyer l'image
Rédiger 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
Construire l'image
Exécutez la commande suivante dans le répertoire où se trouve le Dockerfile :
docker build . -t my-nginx:1.0
# .: Use the current directory as the build context.
# -t: Set the image name and tag.
Tester l'image localement
# 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/
Envoyer l'image vers ACR
Poussez l'image vers votre dépôt Container Registry (ACR). Pour obtenir des instructions, consultez Envoyer et extraire des images (Enterprise Edition) ou Envoyer et extraire des images (Personal Edition).
Étape 4 : Déployer Nginx et configurer l'accès réseau
Déployez l'application Nginx à partir de l'image que vous avez poussée vers ACR. Consultez Déployer une application à partir d'une image.
(Uniquement pour le proxy inverse avec backend public) Par défaut, les applications dans SAE ne peuvent pas accéder à Internet. Si votre service Nginx transfère des requêtes vers un endpoint public, configurez une passerelle NAT Internet pour le VPC. Consultez Configurer une passerelle NAT Internet pour permettre aux applications SAE d'accéder à Internet.
-
Associez une instance CLB pour exposer le service Nginx via une adresse IP publique. Consultez Associer une instance CLB à une application pour générer un endpoint public ou privé. Définissez Container Port sur
80.Pour permettre aux clients d'accéder au service Nginx via un nom de domaine, configurez la résolution DNS pour l'adresse IP publique.
Ouvrez un navigateur et accédez à l'adresse IP publique pour vérifier le déploiement.
Étape 5 (facultative) : Mettre à jour la configuration Nginx sans reconstruire l'image
Utilisez un élément de configuration (ConfigMap) pour injecter un fichier nginx.conf mis à jour dans le conteneur en cours d'exécution. Cela évite de reconstruire l'image à chaque modification de la configuration.
Un fichier de configuration injecté via un ConfigMap écrase le fichier d'origine présent dans l'image du conteneur.
-
Créez un élément de configuration (ConfigMap) dans le namespace de l'application Nginx. Consultez Créer un élément de configuration (ConfigMap). Définissez Configuration Item Name sur
nginx. Ajoutez une clé nomméenginx.confet définissez sa valeur sur le contenu du fichier de configuration mis à jour.
-
Injectez le fichier de configuration et redéployez l'application. Consultez Injecter des configurations. Pour Configuration Item, sélectionnez le ConfigMap
nginx. Pour Key, sélectionneznginx.conf. Définissez Mount Path sur/etc/nginx/nginx.conf.
-
Une fois l'application redéployée, utilisez WebShell pour vous connecter à une instance d'application et vérifier que le fichier de configuration mis à jour est bien en place.
