NGinX & HTTPS

Tags: #<Tag:0x00007f47f0e6a9d0> #<Tag:0x00007f47f0e6a750>

Bonjour à tous,

Je souhaiterais configurer NGinX pour avoir 2 sites en HTTPS, qui redirigent tout le trafic HTTP vers HTTPS avec un seul nom de domaine. Un petit dessin valant mieux qu’un long discours :

http://blah.com:80 —> https://blah.com:443

et :

http://blah.com:90 —> https://blah.com:453

Je n’arrive pas à mes fins, la redirection depuis le port 90 m’envoie sur le port HTTPS par défaut alors que j’aimerais que le port 90 me renvoie sur le port 453… En revanche la redirection du port 80 vers 443 fonctionne, elle.

Question subsidiaire : puis-je utiliser un seul certificat SSL pour les deux sites, étant donné que je n’ai qu’un seul nom de domaine ?

Avec deux noms de domaine, je sais faire, mais je n’en ai plus qu’un seul sous la main et pas trop envie de passer à la caisse.

Merci pour vos lumières !

Si tu ne nous montres pas ta config il va être dur de t’aider.
Pour ce qui est des certificat c’est tout a fait possible, tu peux aussi avoir 1 certificat pour plusieurs domaines. Pour éviter de payer passe par Let’s Encrypt c’est maintenant reconnu par tout les navigateurs.
Pour les nom de domaines de premier niveau tu peux aller voir «dot.tk» pour t’en faire à la pelle sans débourser 1 €.

Très bien, merci !

Pour ce qui est de Let’s Encrypt, c’est ce que j’utilise. Quant à dot.tk j’irai voir, je ne connaissais pas.

Et voici donc ma conf, qui pour le moment redirige un site du port 80 vers le port 443 et possède un site sur le port 90 sans redirection, étant donné que je n’arrive pas à activer le SSL avec redirection sur ce dernier site, comme je voudrais :


 server {
        listen   90;
        server_name blah.com;

        root /var/www/html;
        index index.html index.htm index.php;
        access_log on;
        error_log /var/www/html/log/http.error;
        client_max_body_size 100M;
        server_tokens off;
        add_header Cache-Control "public";

        location / {
                try_files $uri $uri/ /index.html /index.php;
        }
        location ~ ^/tmp/(.*)$ {
                deny all;
        }

        location ~ ^/log/(.*)$ {
                deny all;
        }

        location ~ ^/backup/(.*)$ {
                deny all;
        }

        location ~ \.sql$ {
                 deny all;
        }

        location ~ \.tar$ {
                 deny all;
        }

        location ~ \.gz$ {
                 deny all;
        }

        location ~ ^/(.*)ini$ {
                deny all;
        }

        location ~ ^/core/config/version$ {
                deny all;
        }

        location ~ ^(.+?\.php)(/.*)?$ {
                if (!-f $document_root$fastcgi_script_name) {
                   return 404;
                }
                try_files $uri =404;
                fastcgi_param SCRIPT_FILENAME $document_root$1;
                fastcgi_param PATH_INFO $2;
                fastcgi_pass 127.0.0.1:9000; #unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 4 256k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_read_timeout 300;
                if ($request_method = 'GET') {
                        add_header 'Access-Control-Allow-Origin' '*';
                        add_header 'Access-Control-Allow-Credentials' 'true';
                        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
                }
        }
}

server {
       listen      80 default;
       server_name blah.com;
       ## redirect http to https ##
       rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
       server_name blah.com;

       root /var/www/blah;
       index index.html;

       ssl_certificate /etc/nginx/blah.cert;
       ssl_certificate_key /etc/nginx/blah.key;

       listen 443 ssl;

       ssl_session_cache shared:SSL:20m;
       ssl_session_timeout 180m;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_prefer_server_ciphers on;
       ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
       ssl_dhparam /etc/nginx/dhparam-blah.pem;

       ssl_stapling on;
       ssl_stapling_verify on;
       ssl_trusted_certificate /etc/nginx/trustchain-blah.cert;
       resolver 8.8.8.8 8.8.4.4;

       add_header Strict-Transport-Security "max-age=31536000 always";
}

Voilà, merci et déolé pour le formatage de la conf, je n’arrive pas à trouver comment faire sur ce forum ! :frowning:

Bonjour AlienQueen

je me suis permis de retoucher la mise en forme du contenu de ton fichier de configuration en le faisant précéder et suivre par une ligne contenant uniquement une suite de trois backticks ` AltGr+7

Merci, mais je suis sous Mac ! Non, je déconne, merci beaucoup ! Je devrais désormais savoir faire !

Le mien me prenait trop d’argent, et j’arrivais à peine à payer mes bas résille pour pouvoir travailler.

1 J'aime

Et non justement il nous faut la config qui ne fonctionne pas pour te dire ce qu’il ne vas pas

OK, alors voici la conf qui contient les deux sites mais ne marche pas :

 server {
        listen   453 ssl;
        server_name blah.com:453;

        root /var/www/html;
        index index.html index.htm index.php;
        access_log on;
        error_log /var/www/html/log/http.error;
        client_max_body_size 100M;
        server_tokens off;
        add_header Cache-Control "public";

        ssl_session_cache shared:SSL:20m;
       ssl_session_timeout 180m;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_prefer_server_ciphers on;
       ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
       ssl_dhparam /etc/nginx/dhparam-blah.pem;

       ssl_stapling on;
       ssl_stapling_verify on;
       ssl_trusted_certificate /etc/nginx/trustchain-blah.cert;
       resolver 8.8.8.8 8.8.4.4;

       add_header Strict-Transport-Security "max-age=31536000 always";

        location / {
                try_files $uri $uri/ /index.html /index.php;
        }
        location ~ ^/tmp/(.*)$ {
                deny all;
        }

        location ~ ^/log/(.*)$ {
                deny all;
        }

        location ~ ^/backup/(.*)$ {
                deny all;
        }

        location ~ \.sql$ {
                 deny all;
        }

        location ~ \.tar$ {
                 deny all;
        }

        location ~ \.gz$ {
                 deny all;
        }

        location ~ ^/(.*)ini$ {
                deny all;
        }

        location ~ ^/core/config/version$ {
                deny all;
        }

        location ~ ^(.+?\.php)(/.*)?$ {
                if (!-f $document_root$fastcgi_script_name) {
                   return 404;
                }
                try_files $uri =404;
                fastcgi_param SCRIPT_FILENAME $document_root$1;
                fastcgi_param PATH_INFO $2;
                fastcgi_pass 127.0.0.1:9000; #unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 4 256k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_read_timeout 300;
                if ($request_method = 'GET') {
                        add_header 'Access-Control-Allow-Origin' '*';
                        add_header 'Access-Control-Allow-Credentials' 'true';
                        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
                }
        }
}

server {
       listen      90;
       server_name blah.com:453;
       ## redirect http to https ##
       rewrite        ^ https://$server_name:453$request_uri? permanent;
}

server {
       listen      80 default;
       server_name blah.com;
       ## redirect http to https ##
       rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
       server_name blah.com;

       root /var/www/blah;
       index index.html;

       ssl_certificate /etc/nginx/blah.cert;
       ssl_certificate_key /etc/nginx/blah.key;

       listen 443 ssl;

       ssl_session_cache shared:SSL:20m;
       ssl_session_timeout 180m;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_prefer_server_ciphers on;
       ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
       ssl_dhparam /etc/nginx/dhparam-blah.pem;

       ssl_stapling on;
       ssl_stapling_verify on;
       ssl_trusted_certificate /etc/nginx/trustchain-blah.cert;
       resolver 8.8.8.8 8.8.4.4;

       add_header Strict-Transport-Security "max-age=31536000 always";
}

Merci pour vos lumières !

Bon, laissez tomber, j’ai suivi le conseil de Mimoza : je suis allé sur http://www.dot.tk et je me suis créé un nom de domaine gratos. Du coup, plus de problème !

Merci à tous, en particulier à Mimoza (et à Let’s Encrypt et dot.tk ;-)).

1 J'aime

Sur ta config qui ne fonctionne pas il ne faut pas mettre le port dans la ligne «server_name», c’est réservé à la ligne «Listen».

Sinon heureux que dot.tk solutionne ton soucis.