Jump to content

Nginx SSL reverse proxy multi serveurs


Chrisdu80

Recommended Posts

Bonjour à tous,

 

Je prépare la mise en place d'un serveur linux / nginx pour faire du proxy reverse vers une zone DMZ, le tout en SSL.

Tous mes serveurs sont stockés sur un Hyper-V, j'ai aussi une IP publique, un seul nom de sous-domaine. Concernant le nom de sous-domaine, je n'ai pas le choix, s’est imposé.

Donc pour ma configuration de Nginx je vais utiliser des redirections vers des ports spécifique.

Mon serveur Nginx est une VM derrière un Firewall physique, il n’a donc qu’une carte réseau vue que l’accès externe se fera par le biais d’une authentification dur (OTP) avec VPN. Ce serveur sera accessible depuis un WAN privé.

Le Nginx est le seul serveur qui peux discuter avec la zone DMZ depuis l’extérieur (configuration sur le Firewall)

 

Dans ma zone DMZ (IP non réel) :

  • 192.168.253.2 à serveur Web (opérationnel sous Ubuntu / Apache2)
  • 192.168.253.5 à serveur NextCloud (opérationnel sous Ubuntu / Apache2)
  • 192.168.253.6 à serveur OnlyOffice (opérationnel sous Ubuntu / Apache2)

 

Voici la configuration du fichier Nginx (Nom de domaine et IP non réel) :

"vim /etc/nginx/sites-available/default"

 

Configuration de base + SSL:

  • server {
       listen 80;
       return 301 https://$host$request_uri;
    }

    server {
      listen                443  ssl http2 default_server;
      listen                [::]:443 ssl http2;
      server_tokens         off;
      ssl                   on;

      server_name           sousdomain.domain.com;
      access_log            /var/log/nginx/nginx.certif-ssl.access.log;
      error_log             /var/log/nginx/nginx.certif-ssl.error.log warn;
      root                  /var/www/html;
      index                 index.php index.html index.htm index.nginx-debian.html;

      location              / {
            try_files $uri $uri/ /index.php?q=$uri&$args;
            # On cache les fichiers statiques
                    location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
            # On interdit les dotfiles
                    location ~ /\. { deny all; }
            }

      ## PHP
      location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_read_timeout 60;
            }

      ## SSL
      ssl_certificate           /etc/nginx/ssl/bundle.crt;
      ssl_certificate_key       /etc/nginx/ssl/certif-ssl_mondomain_com.key;
      ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
      ssl_session_cache shared:SSL:50m;
      ssl_session_timeout 1d;
      ssl_session_tickets off;
      ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
      ssl_dhparam /etc/nginx/ssl/dhparam.pem;
      ssl_prefer_server_ciphers on;

      resolver 8.8.8.8 8.8.4.4;
      ssl_stapling on;
      ssl_stapling_verify on;
      ssl_trusted_certificate /etc/nginx/ssl/bundle.crt;

      add_header X-Content-Type-Options nosniff;
      add_header X-XSS-Protection "1; mode=block";
      add_header X-Powered-By "Mon PHP !";

    }

 

La redirection du http vers le https fonctionne parfaitement et le certificat est testé sur www.ssllabs.com est de catégorie A.

 

Maintenant la partie reverse proxy vers les serveurs.

  • server {
       listen 8082;
       server_name sousdomain.domain.com;

            location / {
                    proxy_pass http://192.168.253.2:8082;
                    proxy_redirect off;
                    proxy_set_header        Host            $http_host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header        X-Forwarded-Proto $scheme;
                    proxy_set_header        X-Url-Scheme $scheme;
            }

            location ~*^.+(swf|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
                    proxy_pass http://192.168.253.2:8082;
                    proxy_set_header        Host            $http_host;
            }
    }

 

Sur cette redirection, on utilise l'adresse http://sousdomain.domain.com:8082 pour retourner vers http://192.168.253.2:8082, cela fonctionne j'ai bien ma page de test Apache2 à l'écran.

 

 

  • server {
       listen 8086;
       server_name sousdomain.domain.com;

            location / {
                    rewrite /nextcloud/(.*) /$1 break;
                    proxy_pass https://192.168.253.6;
                    proxy_redirect          http://         https://;
                    proxy_set_header        Host            $http_host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header        X-Forwarded-Proto $scheme;
                    proxy_set_header        X-Url-Scheme    $scheme;
            }

            location ~*^.+(swf|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
                    proxy_pass http://192.168.253.6;
                    proxy_set_header        Host            $host;
            }
    }

Sur cette redirection , on utilise l'adresse https://sousdomain.domain.com:8086 pour retourner vers https://192.168.253.6, ici ca pose un problème.

Quand je vais sur la page https://192.168.253.6 le site fonctionne bien, si je vais sur https://sousdomain.domain.com:8086 j'ai une erreur ERR_TUNNEL_CONNECTION_FAILED

 

Sur mon 3em serveur j'ai une configuration équivalente et j'ai le même souci.

 

Je pense que ma redirection SSL pose problème mais je galère ;).

 

Si quelqu'un peux d'aider je l'en remerci d'avance.

 

 

 

Link to comment
Share on other sites

Hello,

 

Je suppose que tes serveurs réel 192.168.253.5 et 192.168.253.6 sont en HTTPS alors que 192.168.253.2 est en HTTP ?

Ducoup cette ligne la doit être corrigé (en rouge) par l'adresse en HTTPS non ?

 

 

server {
   listen 8086;
   server_name sousdomain.domain.com;

        location / {
                rewrite /nextcloud/(.*) /$1 break;
                proxy_pass https://192.168.253.6;
                proxy_redirect          http://         https://;
                proxy_set_header        Host            $http_host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto $scheme;
                proxy_set_header        X-Url-Scheme    $scheme;
        }

        location ~*^.+(swf|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
                proxy_pass http://192.168.253.6;
                proxy_set_header        Host            $host;
        }
}

 

 

 

Dis nous si c'est mieux avec ça ;)

Link to comment
Share on other sites

×
×
  • Create New...