{"id":772,"date":"2018-06-20T23:43:00","date_gmt":"2018-06-20T22:43:00","guid":{"rendered":"https:\/\/almic.fr\/blog\/?p=772"},"modified":"2026-01-24T13:20:30","modified_gmt":"2026-01-24T12:20:30","slug":"nginx-reverse-proxy","status":"publish","type":"post","link":"https:\/\/almic.fr\/blog\/2018\/06\/20\/nginx-reverse-proxy\/","title":{"rendered":"Utiliser nginx en reverse proxy"},"content":{"rendered":"<p style=\"text-align: justify;\">Ce tutoriel explique comment configurer nginx en tant que reverse proxy pour un autre serveur web (Apache2 par exemple), sur un syst\u00e8me Debian. On veut :<\/p>\n<ul style=\"text-align: justify;\">\n<li> que le serveur existant continue de servir les applications web et les sites d\u00e9j\u00e0 configur\u00e9s ;\n<li> pouvoir faire tourner d\u2019autres serveurs web sur le m\u00eame syst\u00e8me ;\n<li> pouvoir envoyer le trafic de certains sites vers un autre syst\u00e8me.\n<\/ul>\n<p style=\"text-align: justify;\">Ce tutoriel a \u00e9t\u00e9 mis \u00e0 jour le <b>17 janvier 2026<\/b>.<\/p>\n<p><!--more--><\/p>\n<h2>Reconfigurer Apache2<\/h2>\n<p style=\"text-align: justify;\">Avant de pouvoir confier \u00e0 nginx les ports 443 et 80, il faut d\u2019abord d\u00e9placer le serveur web existant vers des ports non standards. Dans la suite de ce tutoriel, on va consid\u00e9rer qu\u2019il s\u2019agit d\u2019Apache2, et qu\u2019on le d\u00e9place sur l\u2019interface locale et les ports 60443 et 60080. Pour sch\u00e9matiser ce qu\u2019on va faire :<\/p>\n<pre>Navigateur \u2192 nginx (domain.tld:443) \u2192 Apache (localhost:60443)<\/pre>\n<p><center><\/p>\n<h4>Lib\u00e9rer les ports 443 et 80<\/h4>\n<p><\/center><\/p>\n<p style=\"text-align: justify;\">\u00c9ditez le fichier <i>\/etc\/apache2\/ports.conf<\/i> :<\/p>\n<pre>\nListen 60080\n\n&lt;IfModule ssl_module&gt;\n    Listen 60443\n&lt;\/IfModule&gt;\n\n&lt;IfModule mod_gnutls.c&gt;\n    Listen 60443\n&lt;\/IfModule&gt;\n<\/pre>\n<p style=\"text-align: justify;\">D\u00e9sormais, le last resort host sera g\u00e9r\u00e9 par nginx. On peut donc d\u00e9sactiver le site <i>000-default.conf<\/i> : si on le modifiait pour y mettre le port 60080, dpkg s\u2019arr\u00eaterait sur ce fichier lors des mises \u00e0 jour du paquet Apache.<\/p>\n<pre># a2dissite 000-default.conf<\/pre>\n<p style=\"text-align: justify;\">\u00c9diter tous les fichiers dans <i>\/etc\/apache2\/sites-enabled\/<\/i>, pour remplacer <i>&lt;VirtualHost *:443&gt;<\/i> par <i>&lt;VirtualHost 127.0.0.1:60443&gt;<\/i>. De la m\u00eame mani\u00e8re, <i>&lt;VirtualHost *:80&gt;<\/i> devient <i>&lt;VirtualHost 127.0.0.1:60080&gt;<\/i>.<\/p>\n<p style=\"text-align: justify;\">On demande \u00e0 Apache de recharger sa configuration :<\/p>\n<pre># systemctl reload apache2.service<\/pre>\n<p><center><\/p>\n<h4>V\u00e9rification<\/h4>\n<p><\/center><\/p>\n<p style=\"text-align: justify;\">On v\u00e9rifie que les ports 443 et 80 sont lib\u00e9r\u00e9s, et qu\u2019Apache \u00e9coute bien sur les ports non standards :<\/p>\n<pre>\n# netstat -nplt                   \nActive Internet connections (only servers)\nProto Recv-Q Send-Q Local Address Foreign Address State  PID\/Program name\ntcp6       0      0 <b>:::60080<\/b>      :::*            LISTEN 53686\/<b>apache2<\/b>\ntcp6       0      0 <b>:::60443<\/b>      :::*            LISTEN 53686\/<b>apache2<\/b>\n<\/pre>\n<h2>nginx<\/h2>\n<p style=\"text-align: justify;\">On installe le paquet :<\/p>\n<pre># apt install nginx<\/pre>\n<p><center><\/p>\n<h4>Pour qu\u2019Apache utilise le bon certificat<\/h4>\n<p><\/center><\/p>\n<p style=\"text-align: justify;\">Par d\u00e9faut, nginx n\u2019envoie pas le SNI (Server Name Indication) lors de la connexion TLS vers Apache. \u00c7a provoque cette erreur :<\/p>\n<pre>\nMisdirected Request\nThe client needs a new connection for this request as the requested host name does not match the Server Name Indication (SNI) in use for this connection.\n<\/pre>\n<p style=\"text-align: justify;\">De plus, quand Apache est derri\u00e8re un reverse proxy, la r\u00e9utilisation des sessions TLS peut poser probl\u00e8me avec son module <i>mod_ssl<\/i>. Donc pour qu\u2019Apache utilise le bon certificat, il faut que nginx lui envoie le SNI, et \u00e0 chaque connexion il faut forcer une \u201cpoign\u00e9e de main\u201d compl\u00e8te (handshake TLS). Cr\u00e9ez le fichier <i>\/etc\/nginx\/conf.d\/tls.conf<\/i> :<\/p>\n<pre>\nproxy_ssl_server_name on;\nproxy_ssl_name $host;\nproxy_ssl_session_reuse off;\n<\/pre>\n<p><center><\/p>\n<h4>Configuration des sites<\/h4>\n<p><\/center><\/p>\n<p style=\"text-align: justify;\">Pour chaque site g\u00e9r\u00e9 par Apache, il faut cr\u00e9er un fichier dans <i>\/etc\/nginx\/sites-available\/<\/i> :<\/p>\n<pre>\nserver {\n    server_name almic.fr;\n    listen 443 ssl;\n    ssl_certificate \/etc\/letsencrypt\/live\/almic.fr\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/almic.fr\/privkey.pem;\n    location \/ {\n        include proxy_params;\n        proxy_pass https:\/\/127.0.0.1:60443;\n    }\n}\n\nserver {\n    server_name almic.fr www.almic.fr;\n    listen 80;\n    return 302 https:\/\/almic.fr\/$request_uri;\n}\nserver {\n    server_name www.almic.fr;\n    listen 443 ssl;\n    ssl_certificate \/etc\/letsencrypt\/live\/www.almic.fr\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/www.almic.fr\/privkey.pem;\n    return 302 https:\/\/almic.fr\/$request_uri;\n}\n<\/pre>\n<p style=\"text-align: justify;\">Comme mentionn\u00e9 plus haut, le last resort host va \u00eatre g\u00e9r\u00e9 par nginx. Ce site par d\u00e9faut est utilis\u00e9 lorsqu\u2019aucun <i>server_name<\/i> ne correspond au domaine demand\u00e9 par le navigateur. Cr\u00e9ez le fichier <i>\/etc\/nginx\/sites-available\/fallback<\/i> :<\/p>\n<pre>\nserver {\n    server_name _;\n    listen 80 default_server;\n    root \/srv\/www\/zd_divers\/403_verboten;\n    index index.html;\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\nserver {\n    server_name _;\n    listen 443 ssl default_server;\n    ssl_certificate \/etc\/ssl\/private\/Self_signed.pem;\n    ssl_certificate_key \/etc\/ssl\/private\/Self_signed.pem;\n    root \/srv\/www\/zd_divers\/403_verboten;\n    index index.html;\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/pre>\n<p style=\"text-align: justify;\">Ensuite on active chaque site pour nginx :<\/p>\n<pre>\n# cd \/etc\/nginx\/sites-enabled\n# ln -s ..\/sites-available\/almic.fr\n(\u2026)\n# ln -s ..\/sites-available\/fallback\n<\/pre>\n<p style=\"text-align: justify;\">Pour finir, on demande \u00e0 nginx de recharger sa configuration :<\/p>\n<pre># systemctl reload nginx.service<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Ce tutoriel explique comment configurer nginx en tant que reverse proxy pour un autre serveur web (Apache2 par exemple), sur un syst\u00e8me Debian. On veut : que le serveur existant continue de servir les applications web et les sites d\u00e9j\u00e0 configur\u00e9s ; pouvoir faire tourner d\u2019autres serveurs web sur le m\u00eame syst\u00e8me ; pouvoir envoyer&hellip; <a class=\"continue\" href=\"https:\/\/almic.fr\/blog\/2018\/06\/20\/nginx-reverse-proxy\/\">Continue Reading Utiliser nginx en reverse proxy<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-772","post","type-post","status-publish","format-standard","hentry","category-hebergement","radius"],"_links":{"self":[{"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/posts\/772","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/comments?post=772"}],"version-history":[{"count":69,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/posts\/772\/revisions"}],"predecessor-version":[{"id":864,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/posts\/772\/revisions\/864"}],"wp:attachment":[{"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/media?parent=772"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/categories?post=772"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/tags?post=772"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}