234 votes

nginx HTTPS servant avec la même configuration que HTTP

Existe-t-il un moyen de partager des directives de configuration entre deux nginx ? server {} blocs ? J'aimerais éviter de dupliquer les règles, car le contenu HTTPS et HTTP de mon site est servi avec exactement la même configuration.

Actuellement, c'est comme ça :

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

Je peux faire quelque chose du genre :

server {
  listen 80, 443;
  ...

  if(port == 443) {
    ssl on; #etc
  }
}

325voto

Matt Blaine Points 2270

Vous pouvez combiner tout cela en un seul bloc serveur comme suit :

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

Mode d'emploi officiel

95voto

Sean Tan Points 1021

Pour clarifier la réponse acceptée, vous devez omettre

SSL on;

et vous avez juste besoin de ce qui suit pour les versions de nginx postérieures à 0.8.21

listen 443 ssl;

Référence :

Nginx Docs - Configuration d'un serveur HTTP/HTTPS unique

32voto

whoisjake Points 556

Je ne connais pas de méthode comme celle que vous suggérez, mais il y a certainement une méthode facile et facile à maintenir.

Déplacez les paramètres communs du serveur dans un fichier séparé, par exemple "serverFoo.conf" et ensuite include il est séparé server {} blocs comme ça :

server {
    listen 80;
    include serverFoo.conf;
}
server {
    listen 443 ssl;
    include serverFoo.conf;
}

12voto

Wilduck Points 5116

En complément des réponses déjà utiles, voici un exemple plus complet :

server {

    # Listen on port 80 and 443
    # on both IPv4 and IPv6
    listen 80;
    listen [::]:80 ipv6only=on;
    listen 443 ssl;
    listen [::]:443 ipv6only=on ssl;

    # Set website folder
    root /path/to/your/website;

    # Enable SSL
    ssl_certificate your-cert.pem;
    ssl_certificate_key your-cert.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;
}

6voto

Matt Bostock Points 51

Juste pour ajouter au message d'Igor/Jauder, si vous écoutez une IP spécifique, vous pouvez utiliser :

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X