<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.ec-informatique.fr/index.php?action=history&amp;feed=atom&amp;title=Reverse_Proxy_NGINX</id>
	<title>Reverse Proxy NGINX - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ec-informatique.fr/index.php?action=history&amp;feed=atom&amp;title=Reverse_Proxy_NGINX"/>
	<link rel="alternate" type="text/html" href="https://wiki.ec-informatique.fr/index.php?title=Reverse_Proxy_NGINX&amp;action=history"/>
	<updated>2026-06-17T12:54:03Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.ec-informatique.fr/index.php?title=Reverse_Proxy_NGINX&amp;diff=224&amp;oldid=prev</id>
		<title>Eugene le 23 décembre 2025 à 15:44</title>
		<link rel="alternate" type="text/html" href="https://wiki.ec-informatique.fr/index.php?title=Reverse_Proxy_NGINX&amp;diff=224&amp;oldid=prev"/>
		<updated>2025-12-23T15:44:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 23 décembre 2025 à 15:44&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l34&quot;&gt;Ligne 34 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 34 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  proxy_pass http://127.0.0.1:3000;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  proxy_pass http://127.0.0.1:3000;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 3. Modèle NGINX pour un service en subpath ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/ins&gt;== 3. Modèle NGINX pour un service en subpath &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;À copier/coller pour n’importe quel service :&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;À copier/coller pour n’importe quel service :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eugene</name></author>
	</entry>
	<entry>
		<id>https://wiki.ec-informatique.fr/index.php?title=Reverse_Proxy_NGINX&amp;diff=223&amp;oldid=prev</id>
		<title>Eugene le 23 décembre 2025 à 15:39</title>
		<link rel="alternate" type="text/html" href="https://wiki.ec-informatique.fr/index.php?title=Reverse_Proxy_NGINX&amp;diff=223&amp;oldid=prev"/>
		<updated>2025-12-23T15:39:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 23 décembre 2025 à 15:39&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l21&quot;&gt;Ligne 21 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 21 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Exemples : Portainer, HomePharma, phpMyAdmin, Prometheus, Streamlit&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Exemples : Portainer, HomePharma, phpMyAdmin, Prometheus, Streamlit&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;→ Mettre un slash final&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;→ Mettre un slash final&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  nginx:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  nginx:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l28&quot;&gt;Ligne 28 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 29 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Exemples : Grafana (root_url = /grafana), Nextcloud (/nextcloud)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Exemples : Grafana (root_url = /grafana), Nextcloud (/nextcloud)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;→ Pas de slash final&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;→ Pas de slash final&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  nginx:  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  nginx:  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eugene</name></author>
	</entry>
	<entry>
		<id>https://wiki.ec-informatique.fr/index.php?title=Reverse_Proxy_NGINX&amp;diff=222&amp;oldid=prev</id>
		<title>Eugene : Page créée avec « == 🧩 Reverse Proxy NGINX — Services en Subpath (Checklist complète) == === 1. Règles générales (à toujours appliquer) === * Toujours utiliser un bloc de redirection pour forcer le / final :   nginx ^     location = /app {     return 301 /app/;   }  * Toujours utiliser un bloc ^~ /app/ pour éviter les conflits :  nginx:  location ^~ /app/ {  * Toujours décider si le proxy_pass doit avoir un / final : ° Avec / final → remappe /app/... → /... ° San... »</title>
		<link rel="alternate" type="text/html" href="https://wiki.ec-informatique.fr/index.php?title=Reverse_Proxy_NGINX&amp;diff=222&amp;oldid=prev"/>
		<updated>2025-12-23T15:37:05Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « == 🧩 Reverse Proxy NGINX — Services en Subpath (Checklist complète) == === 1. Règles générales (à toujours appliquer) === * Toujours utiliser un bloc de redirection pour forcer le / final :   nginx ^     location = /app {     return 301 /app/;   }  * Toujours utiliser un bloc ^~ /app/ pour éviter les conflits :  nginx:  location ^~ /app/ {  * Toujours décider si le proxy_pass doit avoir un / final : ° Avec / final → remappe /app/... → /... ° San... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 🧩 Reverse Proxy NGINX — Services en Subpath (Checklist complète) ==&lt;br /&gt;
=== 1. Règles générales (à toujours appliquer) ===&lt;br /&gt;
* Toujours utiliser un bloc de redirection pour forcer le / final :&lt;br /&gt;
&lt;br /&gt;
 nginx ^&lt;br /&gt;
 &lt;br /&gt;
  location = /app {&lt;br /&gt;
    return 301 /app/;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* Toujours utiliser un bloc ^~ /app/ pour éviter les conflits :&lt;br /&gt;
 nginx:&lt;br /&gt;
 location ^~ /app/ {&lt;br /&gt;
&lt;br /&gt;
* Toujours décider si le proxy_pass doit avoir un / final :&lt;br /&gt;
° Avec / final → remappe /app/... → /...&lt;br /&gt;
° Sans / final → garde le chemin complet /app/...&lt;br /&gt;
&lt;br /&gt;
=== 2. Règle du slash dans proxy_pass (le piège classique) ===&lt;br /&gt;
=== ✔️ Si le service tourne à la racine (/) ===&lt;br /&gt;
 &lt;br /&gt;
Exemples : Portainer, HomePharma, phpMyAdmin, Prometheus, Streamlit&lt;br /&gt;
→ Mettre un slash final&lt;br /&gt;
 nginx:&lt;br /&gt;
 proxy_pass http://127.0.0.1:5000/;&lt;br /&gt;
&lt;br /&gt;
=== ✔️ Si le service tourne en subpath natif ===&lt;br /&gt;
&lt;br /&gt;
Exemples : Grafana (root_url = /grafana), Nextcloud (/nextcloud)&lt;br /&gt;
→ Pas de slash final&lt;br /&gt;
 nginx: &lt;br /&gt;
 proxy_pass http://127.0.0.1:3000;&lt;br /&gt;
&lt;br /&gt;
== 3. Modèle NGINX pour un service en subpath ==&lt;br /&gt;
&lt;br /&gt;
À copier/coller pour n’importe quel service :&lt;br /&gt;
&lt;br /&gt;
 location = /APP {&lt;br /&gt;
    return 301 /APP/;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 location ^~ /APP/ {&lt;br /&gt;
    proxy_pass http://127.0.0.1:PORT/;&lt;br /&gt;
    proxy_http_version 1.1;&lt;br /&gt;
 &lt;br /&gt;
    proxy_set_header Host $host;&lt;br /&gt;
    proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
    proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
 &lt;br /&gt;
    proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
    proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    proxy_redirect off;&lt;br /&gt;
    proxy_cookie_path / &amp;quot;/APP/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    proxy_read_timeout 900s;&lt;br /&gt;
    proxy_send_timeout 900s;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Remplacer APP et PORT.&lt;br /&gt;
=== 4. Flask derrière NGINX en subpath ===&lt;br /&gt;
&lt;br /&gt;
Flask ne gère pas nativement les subpaths.&lt;br /&gt;
Il faut lui dire explicitement qu’il tourne sous /homepharma.&lt;br /&gt;
Dans app.py, juste après app = Flask(...) :&lt;br /&gt;
 python:&lt;br /&gt;
 app.config[&amp;#039;APPLICATION_ROOT&amp;#039;] = &amp;#039;/homepharma&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== Si l’app utilise des fichiers statiques : ====&lt;br /&gt;
 python:&lt;br /&gt;
 app = Flask(__name__, static_url_path=&amp;#039;/homepharma/static&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
==== Vérification locale : ====&lt;br /&gt;
 bash:&lt;br /&gt;
 curl -I http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
==== Vérification reverse proxy : ====&lt;br /&gt;
 bash:&lt;br /&gt;
 curl -I https://IP/homepharma/ --insecure&lt;br /&gt;
&lt;br /&gt;
=== 5. Service systemd pour une app Python (modèle propre) ===&lt;br /&gt;
 ini:&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Nom de l&amp;#039;application Flask&lt;br /&gt;
 After=network.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 User=eugene&lt;br /&gt;
 WorkingDirectory=/var/www/APP&lt;br /&gt;
 ExecStart=/var/www/APP/venv/bin/python /var/www/APP/app.py&lt;br /&gt;
 Restart=always&lt;br /&gt;
 RestartSec=3&lt;br /&gt;
 Environment=&amp;quot;PATH=/var/www/APP/venv/bin&amp;quot;&lt;br /&gt;
 Environment=&amp;quot;FLASK_ENV=production&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
=== 6. Pièges à éviter absolument ===&lt;br /&gt;
&lt;br /&gt;
*    ❌ Ne jamais laisser traîner des .save, .bak, .old dans sites-enabled&lt;br /&gt;
&lt;br /&gt;
*    ❌ Ne jamais oublier le / final dans proxy_pass pour les apps à la racine&lt;br /&gt;
&lt;br /&gt;
*    ❌ Ne jamais utiliser location /app (match trop large)&lt;br /&gt;
&lt;br /&gt;
*    ❌ Ne jamais oublier la redirection /app → /app/&lt;br /&gt;
&lt;br /&gt;
*    ❌ Ne jamais oublier d’adapter Flask pour les subpaths&lt;/div&gt;</summary>
		<author><name>Eugene</name></author>
	</entry>
</feed>