{"id":455,"date":"2016-03-09T16:08:04","date_gmt":"2016-03-09T15:08:04","guid":{"rendered":"http:\/\/www.jjtronics.com\/wordpress\/?p=455"},"modified":"2016-11-09T14:51:08","modified_gmt":"2016-11-09T13:51:08","slug":"raspberry-pi-raspbian-et-reverse-proxy-nginx","status":"publish","type":"post","link":"https:\/\/www.jjtronics.com\/wordpress\/2016\/03\/09\/raspberry-pi-raspbian-et-reverse-proxy-nginx\/","title":{"rendered":"Raspberry PI &#8211; Raspbian et reverse proxy Nginx"},"content":{"rendered":"<p>Bonjour,<\/p>\n<p>Si comme moi, vous commencez \u00e0 avoir pas mal de services dispatch\u00e9 sur quelques serveurs et que vous en avez marre de router des ports vers ces diff\u00e9rents services, voici la solution : le reverse proxy.<\/p>\n<p>Je vais donc vous pr\u00e9senter comment installer et configurer Nginx en tant que reverse proxy.<\/p>\n<p>Ce tuto est orient\u00e9 Raspberry et Raspbian mais il fonctionnera \u00e9galement pour toutes les distributions \u00e0 base de Debian (Ubuntu et consorts). Pour les autres distributions, vous n&rsquo;aurez pas de mal \u00e0 trouver comment installer Nginx (Par ex yum install nginx pour tous les syst\u00e8me \u00e0 base de RedHat\/CentOs &#8230;)<\/p>\n<p>Sans compter de l&rsquo;avantage ind\u00e9niable de ne plus router pleins de ports \u00ab\u00a0non standard\u00a0\u00bb pour acc\u00e9der \u00e0 tous vos services, vous augmenterez la s\u00e9curit\u00e9 :<\/p>\n<p>-Non seulement vos diff\u00e9rents services ne seront plus en frontaux sur le web<\/p>\n<p>-Mais en plus si l&rsquo;un de vos services ne supporte pas le SSL, votre reverse proxy lui supporte tr\u00e8s bien le SSL et peut meme rediriger\u00a0automatiquement toutes les requ\u00eates http en https.<\/p>\n<p>Le tunnel ssl ne sera pas du client vers le service mais du client vers le reverse proxy, la connexion entre le reverse proxy et le service qui ne g\u00e8re pas le ssl sera en http.<\/p>\n<p>Nous avons donc deux types de liaisons :<\/p>\n<pre class=\"lang:default decode:true\">|client|&lt;==HTTPS==&gt;|REVERSE_PROXY|&lt;==HTTPS==&gt;|serveur|<\/pre>\n<pre class=\"lang:default decode:true\">|client|&lt;==HTTPS==&gt;|REVERSE_PROXY|&lt;==HTTP==&gt;|serveur|<\/pre>\n<p>Voici un sh\u00e9mas repr\u00e9sentant un client voulant acc\u00e9der au service01http.<\/p>\n<p>Il ouvre donc son navigateur et tape : http:\/\/service01http.mondomaine.com<\/p>\n<p>Mais une redirection s&rsquo;effectue par le reverse proxy et dans son navigateur apparait l&rsquo;adresse : https:\/\/service01http.mondomaine.com<\/p>\n<p><a href=\"https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"461\" data-permalink=\"https:\/\/www.jjtronics.com\/wordpress\/2016\/03\/09\/raspberry-pi-raspbian-et-reverse-proxy-nginx\/shemas-reverse-proxy-nginx-jjtronics\/\" data-orig-file=\"https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics.jpg\" data-orig-size=\"1055,595\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Shemas Reverse Proxy NGINX\" data-image-description=\"&lt;p&gt;Shemas Reverse Proxy NGINX&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Shemas Reverse Proxy NGINX&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics-1024x578.jpg\" class=\"wp-image-461 \" src=\"https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics-300x169.jpg\" alt=\"Shemas Reverse Proxy NGINX\" width=\"506\" height=\"285\" srcset=\"https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics-300x169.jpg 300w, https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics-768x433.jpg 768w, https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics-1024x578.jpg 1024w, https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics.jpg 1055w\" sizes=\"auto, (max-width: 506px) 100vw, 506px\" \/><\/a><\/p>\n<p>Passons maintenant au vif du sujet.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Installation de Nginx :<\/strong><\/p>\n<p>Ouvrez<\/p>\n<pre class=\"lang:default decode:true\">apt-get install nginx<\/pre>\n<p>G\u00e9n\u00e9ration d&rsquo;un certificat SSL autosign\u00e9 (ceci va permettre de ne pas avoir de connexion en clair,cela \u00e9vite de pouvoir r\u00e9cup\u00e9rer les identifiants\/password en clair sur votre r\u00e9seau) :<\/p>\n<pre class=\"lang:default decode:true\">sudo openssl genrsa -out \/etc\/nginx\/nginx.key 2048\r\nsudo openssl req -new -key nginx.key -out \/etc\/nginx\/nginx.csr\r\nsudo openssl x509 -req -days 3650 -in \/etc\/nginx\/nginx.csr -signkey \/etc\/nginx\/nginx.key -out \/etc\/nginx\/nginx.crt<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Les h\u00f4tes virtuels :<\/strong><\/p>\n<p>Imaginons que nous avons 4 services web sur 3 serveurs :<\/p>\n<pre class=\"lang:default decode:true \">-Serveur_01 : Service_01_HTTP\r\n\r\n-Serveur_02 : Service_02_HTTPS\r\n\r\n-Serveur_03 : Service_03_HTTP + Service_04_HTTPS<\/pre>\n<p>Nous allons donc cr\u00e9er 4 entr\u00e9es DNS sur notre nom de domaine :<\/p>\n<pre class=\"lang:default decode:true\">service01http.mondomaine.com\r\n\r\nservice02https.mondomaine.com\r\n\r\nservice03http.mondomaine.com\r\n\r\nservice04https.mondomaine.com<\/pre>\n<p>Imaginons maintenant que pour le service02https nous voulons y acc\u00e9der par deux adresses diff\u00e9rentes :<\/p>\n<pre class=\"lang:default decode:true\">service02https.mondomaine.com\r\nservice02httpsbis.mondomaine.com\r\n<\/pre>\n<p>Le but est donc d&rsquo;acc\u00e9der \u00e0 ces 4 services en HTTPS (peu importe que le service supporte ou non le SSL)<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Configuration des hosts :<\/strong><\/p>\n<p>Nous allons donc commencer par configurer Nginx :<\/p>\n<pre class=\"lang:default decode:true\">sudo nano \/etc\/nginx\/sites-available\/reverse<\/pre>\n<p>Collez ensuite ceci :<\/p>\n<pre class=\"lang:default decode:true\"># Certificats SSL\r\nssl_certificate \/etc\/nginx\/nginx.crt;\r\nssl_certificate_key \/etc\/nginx\/nginx.key;\r\n\r\nserver {\r\n        # Redirection des requetes en HTTP vers HTTPS\r\n        # Port en entree\r\n        listen 80;\r\n        # Redirection vers\r\n        return 301 https:\/\/$host$request_uri;\r\n}\r\n\r\nserver {\r\n        # service01http\r\n        listen 443;\r\n        # J'active SSL\r\n        ssl on;\r\n\r\n        server_name service01http.mondomaine.com; # entree DNS\r\n        location \/ { # pour le dossier racine (\/), on active le mode proxy vers l'adresse sp\u00e9cifi\u00e9e, sur le port sp\u00e9cifi\u00e9\r\n                proxy_pass http:\/\/192.168.1.2:80\/;\r\n        }\r\n}\r\n\r\nserver {\r\n        # service02https et service02httpsbis\r\n        listen 443;\r\n        ssl on;\r\n\r\n        # On peut sp\u00e9cifier 2 noms de domaine diff\u00e9rents qui auront le m\u00eame comportement\r\n        server_name service02https.mondomaine.com;\r\n        server_name service02httpsbis.mondomaine.com;\r\n        location \/ {\r\n                proxy_pass https:\/\/192.168.1.3:443\/;\r\n        }\r\n}\r\n\r\nserver {\r\n        # service03http\r\n        listen 443;\r\n        # J'active SSL\r\n        ssl on;\r\n\r\n        server_name service03http.mondomaine.com; # entree DNS\r\n        location \/ { # pour le dossier racine (\/), on active le mode proxy vers l'adresse sp\u00e9cifi\u00e9e, sur le port sp\u00e9cifi\u00e9\r\n                proxy_pass http:\/\/192.168.1.4:80\/;\r\n        }\r\n}\r\n\r\nserver {\r\n        # service04https\r\n        listen 443;\r\n        # J'active SSL\r\n        ssl on;\r\n\r\n        server_name service04https.mondomaine.com; # entree DNS\r\n        location \/ { # pour le dossier racine (\/), on active le mode proxy vers l'adresse sp\u00e9cifi\u00e9e, sur le port sp\u00e9cifi\u00e9\r\n                proxy_pass https:\/\/192.168.1.4:443\/;\r\n        }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>Maintenant un petit restart et votre reverse proxy est maintenant en ligne !<\/p>\n<pre class=\"lang:default decode:true \">sudo \/etc\/init.d\/nginx restart<\/pre>\n<p>&nbsp;<\/p>\n<p>Petit ajout, si Nginx n&rsquo;arrive pas a red\u00e9marrer, c&rsquo;est peut \u00eatre \u00e0 cause de la longueur de votre entr\u00e9e DNS\u00a0(server_name)<\/p>\n<p>Pour y rem\u00e9dier faites :<\/p>\n<pre class=\"lang:default decode:true \">sudo nano \/etc\/nginx\/nginx.conf<\/pre>\n<p>Puis cherchez la ligne :<\/p>\n<pre class=\"lang:default decode:true \">         #server_names_hash_bucket_size 64;<\/pre>\n<p>D\u00e9commentez l\u00e0 en enlevant le # :<\/p>\n<pre class=\"lang:default decode:true \">         server_names_hash_bucket_size 64;<\/pre>\n<p>Et vous pouvez maintenant red\u00e9marrer\u00a0Nginx :<\/p>\n<pre class=\"lang:default decode:true \">sudo \/etc\/init.d\/nginx restart<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Si vous avez des soucis ou des questions, n&rsquo;h\u00e9sitez pas les commentaires sont fait pour \u00e7a :)<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bonjour, Si comme moi, vous commencez \u00e0 avoir pas mal de services dispatch\u00e9 sur quelques serveurs et que vous en [&#038;hellip<\/p>\n","protected":false},"author":1,"featured_media":461,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[2,27,44,43,122,108,123],"tags":[88,100,110,85,111],"class_list":["post-455","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-projets","category-raspberry-projets","category-raspberry-arduino","category-raspbian","category-reseau","category-reverse-proxy","tag-mac","tag-o","tag-os","tag-raspberry-2","tag-x"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.jjtronics.com\/wordpress\/wp-content\/uploads\/2016\/03\/Shemas-Reverse-Proxy-NGINX-jjtronics.jpg","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6YUVZ-7l","jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/posts\/455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/comments?post=455"}],"version-history":[{"count":13,"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/posts\/455\/revisions"}],"predecessor-version":[{"id":458,"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/posts\/455\/revisions\/458"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/media\/461"}],"wp:attachment":[{"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/media?parent=455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/categories?post=455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jjtronics.com\/wordpress\/wp-json\/wp\/v2\/tags?post=455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}