Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| fr:nginx [2021/12/03 18:19] – modification externe 127.0.0.1 | fr:nginx [2025/07/15 05:46] (Version actuelle) – [Sur le backend (Apache)] zatalyz | ||
|---|---|---|---|
| Ligne 61: | Ligne 61: | ||
| └── win-utf</ | └── win-utf</ | ||
| - | Le fichier principal de configuration est '' | + | * Le fichier principal de configuration est '' |
| + | * Tout comme pour [[fr: | ||
| Ligne 92: | Ligne 93: | ||
| sudo service nginx restart | sudo service nginx restart | ||
| + | ==== Rediriger les sous-domaines non existant vers une adresse précise ==== | ||
| + | Créez un fichier de configuration redirigeant tout ce qui ne matche pas : | ||
| + | < | ||
| + | # En cas d' | ||
| + | server { | ||
| + | listen 10.0.0.10: | ||
| + | listen 10.0.0.10: | ||
| + | # Toutes requêtes non définie par ailleurs | ||
| + | server_name _; | ||
| + | include snippets/ | ||
| + | access_log off; | ||
| + | error_log | ||
| + | return 301 https:// | ||
| + | } | ||
| + | </ | ||
| + | Le snippets snakeoil ici est pour le https, c'est un certificat autosigné, c'est mieux que " | ||
| + | |||
| + | ===== SSL Passthrough sur proxy Nginx ===== | ||
| + | |||
| + | Un proxy est un outil qui peut faire beaucoup de choses, ou très peu. Dans notre cas, l' | ||
| + | |||
| + | Il est assez simple de gérer les certificats ssl au niveau du proxy, mais cela a pour conséquence que le trafic entre le proxy et les containers passe "en clair" | ||
| + | |||
| + | <WRAP center round tip 100%> | ||
| + | On ne peux pas avoir à la fois des services sans ssl passthrough et d' | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Ce type de configuration est riche en prise de tête. Ce n'est pas la peine d' | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | Pour notre exemple : | ||
| + | * Le proxy Nginx reçoit tout le trafic (HTTP/ | ||
| + | * Suivant le nom de domaine demandé, il redirige le flux vers les bonnes ip en backend. | ||
| + | * monsite.org a comme IP interne : 192.168.1.207 et autresite.net a 192.168.1.208. Et les deux sont avec Apache, sinon ce n'est pas drôle. | ||
| + | |||
| + | Ici "le proxy" fait référence à la VM qui centralise les flux avant de les redispatcher et "le backend" | ||
| + | |||
| + | |||
| + | ==== Sur le proxy ==== | ||
| + | On modifie ''/ | ||
| + | < | ||
| + | |||
| + | Et on crée deux dossiers dont celui qui est lu : | ||
| + | |||
| + | < | ||
| + | sudo mkdir -p / | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | On suit avec " | ||
| + | </ | ||
| + | |||
| + | Voici à quoi ressemble un fichier de stream : | ||
| + | |||
| + | <code bash / | ||
| + | stream { | ||
| + | map $ssl_preread_server_name $backend { | ||
| + | monsite.org 192.168.1.207: | ||
| + | autresite.net | ||
| + | # Optionnel : où on redirige si le nom de domaine n' | ||
| + | default | ||
| + | } | ||
| + | |||
| + | # HTTPS - SSL Passthrough | ||
| + | server { | ||
| + | listen 192.168.1.100: | ||
| + | # Lit les nom de domaine sans déchiffrer le reste | ||
| + | ssl_preread on; | ||
| + | # Route vers la VM correspondante | ||
| + | proxy_pass $backend; | ||
| + | # Transmet l'IP réelle des visiteuses | ||
| + | proxy_protocol on; | ||
| + | } | ||
| + | }</ | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * Et le reste est commenté ;) | ||
| + | |||
| + | Nous devons aussi déclarer le flux sur le port 80 ; mais là ça ne peut pas être du " | ||
| + | <code bash / | ||
| + | server { | ||
| + | listen 80; | ||
| + | server_name monsite.org; | ||
| + | |||
| + | location / { | ||
| + | proxy_pass http:// | ||
| + | proxy_set_header Host $host; | ||
| + | proxy_set_header X-Real-IP $remote_addr; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | server { | ||
| + | listen 80; | ||
| + | server_name autresite.net.fr; | ||
| + | |||
| + | location / { | ||
| + | proxy_pass http:// | ||
| + | proxy_set_header Host $host; | ||
| + | proxy_set_header X-Real-IP $remote_addr; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | Ici c'est vraiment très basique, mais il serait possible de rediriger dès maintenant vers une connexion sécurisée (443) sauf ce qui est nécessaire à l' | ||
| + | |||
| + | <code bash / | ||
| + | listen 80; | ||
| + | server_name monsite.org; | ||
| + | |||
| + | # Rediriger tout vers HTTPS (sauf / | ||
| + | location / | ||
| + | proxy_pass http:// | ||
| + | proxy_set_header Host $host; | ||
| + | } | ||
| + | |||
| + | location / { | ||
| + | return 301 https:// | ||
| + | } | ||
| + | }</ | ||
| + | |||
| + | Mais je préfère faire simple et gérer les ennuis côté apache, parce que les possibilités de bizarreries restent élevées avec ce genre de configuration. | ||
| + | |||
| + | On valide tout ça : | ||
| + | < | ||
| + | sudo ln -s / | ||
| + | sudo nginx -t | ||
| + | sudo systemctl restart nginx | ||
| + | </ | ||
| + | |||
| + | ==== Sur le backend (Apache) ==== | ||
| + | Je pars du principe que le backend est avec Apache. Ça pourrait aussi être du nginx, mais je vous laisse faire la doc. | ||
| + | |||
| + | On commence par ''/ | ||
| + | <code bash / | ||
| + | # Déclare le proxy afin de recevoir les vraies ip des clients. | ||
| + | # Remplacer l'ip par celle du proxy ! | ||
| + | RemoteIPInternalProxy 192.168.1.206 | ||
| + | RemoteIPTrustedProxy 192.168.1.206 | ||
| + | RemoteIPHeader X-Forwarded-For | ||
| + | </ | ||
| + | |||
| + | Puis | ||
| + | < | ||
| + | sudo a2enmod remoteip ssl | ||
| + | </ | ||
| + | |||
| + | Et on configure ensuite notre site, quasiment comme s'il était sur un dédié : | ||
| + | <code bash / | ||
| + | < | ||
| + | ServerName monsite.org | ||
| + | DocumentRoot / | ||
| + | |||
| + | # Redirection vers 443 sauf pour la demande de certificat | ||
| + | RewriteEngine On | ||
| + | RewriteCond %{REQUEST_URI} !.well-known/ | ||
| + | RewriteRule ^(.*)$ https:// | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | ServerName monsite.org | ||
| + | # Important avec le ssl passthrough !!! | ||
| + | RemoteIPProxyProtocol On | ||
| + | |||
| + | DocumentRoot / | ||
| + | < | ||
| + | Options FollowSymLinks MultiViews | ||
| + | AllowOverride All | ||
| + | Require all granted | ||
| + | </ | ||
| + | |||
| + | SSLEngine On | ||
| + | SSLCertificateFile / | ||
| + | SSLCertificateKeyFile / | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Sur le VirtualHost le point vraiment essentiel est de mettre le paramètre '' | ||
| + | |||
| + | On valide tout ça | ||
| + | |||
| + | < | ||
| + | sudo a2ensite org.monsite | ||
| + | sudo apachectl -t | ||
| + | sudo service apache2 restart | ||
| + | </ | ||
| - | ===== Exemple | + | ===== Exemples |
| - | ==== Notre proxy ===== | + | ==== Proxy sans ssl passthrough |
| Exemple simple: | Exemple simple: | ||
| <code bash> | <code bash> | ||
| Ligne 128: | Ligne 316: | ||
| server { | server { | ||
| listen | listen | ||
| - | server_name " | + | server_name " |
| | | ||
| - | return | + | return |
| } | } | ||
| server { | server { | ||
| listen | listen | ||
| - | server_name " | + | server_name " |
| - | ssl_certificate / | + | ssl_certificate / |
| - | ssl_certificate_key / | + | ssl_certificate_key / |
| location / { | location / { | ||
| Ligne 154: | Ligne 342: | ||
| *[[fr: | *[[fr: | ||
| *[[fr: | *[[fr: | ||
| + | |||
| + | ===== Demander un certificat let' | ||
| + | Voir [[fr: | ||
| + | |||
| + | |||
| ===== Sources et liens ===== | ===== Sources et liens ===== | ||
| * [[https:// | * [[https:// | ||





