web-dev-qa-db-fra.com

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? Je voudrais éviter de dupliquer les règles, car le contenu HTTPS et HTTP de mon site est servi avec la même configuration exacte.

Actuellement, c'est comme ça:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

Puis-je faire quelque chose comme:

server {
  listen 80, 443;
  ...

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

Vous pouvez combiner cela en un seul bloc serveur comme ceci:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

Mode d'emploi officiel

270
Jauder Ho

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

SSL on;

et vous avez juste besoin des éléments suivants pour la version nginx après 0.8.21

listen 443 ssl;

Référence:

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

90
Sean Tan

Je ne connais pas un moyen comme vous le suggérez, mais il y a certainement un moyen facile et maintenable.

Déplacez les paramètres de serveur communs dans un fichier séparé, c'est-à-dire "serverFoo.conf" puis include dans _ server {} blocs comme ceci:

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

En développant les 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;
}
9
Jonathan

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

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;
4
Matt Bostock