nginx HTTPS, HTTP ile aynı yapılandırma ile çalışıyor


195

İki nginx server {}bloğunda yapılandırma direktiflerini paylaşmanın bir yolu var mı ? Sitemin HTTPS ve HTTP içeriği aynı yapılandırma ile sunulduğundan, kuralları kopyalamaktan kaçınmak istiyorum.

Şu anda, bu gibi:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

Satırları boyunca bir şey yapabilir miyim:

server {
  listen 80, 443;
  ...

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

Yanıtlar:


262

Bunu, böyle bir sunucu bloğunda birleştirebilirsiniz:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

Resmi Nasıl Yapılır


6
Ah, nginx'in 80 numaralı port üzerinden yüklenirse SSL direktiflerini görmezden gelebilecek kadar akıllı olduğunu bilmiyordum.
ceejayoz

72
nginx her türlü WIN'dir.
Jauder Ho

5
ve bir sunucuda birkaç siteniz varsa, "varsayılan" ın zorunlu olmadığını belirtmekte fayda var
luchaninov

4
Çok zarif, acıtıyor ...
Alix Axel

3
burada çalışmıyor ... "
Basit


27

Önerdiğin gibi bir yol bilmiyorum, ama kesinlikle kolay ve bakımı kolay bir yol var.

Yaygın sunucu ayarlarını ayrı bir dosyaya, yani "serverFoo.conf" 'a ve ardından aşağıdaki gibi includeayrı server {}bloklara taşıyın :

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

2
+1 = benim için çalışıyor. (Başka bir yöntemle çalışması

Ayrıca, diğer örnek bir yük dengeleyici olarak görev yapıyorsa 'proxy_pass' ifadesini hesaba katmaz.
Mike Purcell

Bu seçenek, eğer server_nameher bir bağlantı
noktanız

5
Ssl kullanmayın, bundan sonra kullanın listen 443 ssl;.
tehlike89

Bu son nginx 1.10.1 ile çalışan tek çözüm gibi görünüyor. Bazı nedenlerden dolayı iki listensatır doğru yorumlanmıyor, ayırmak için hareket server{}ettiriliyor.
Artur Bodera,

9

Zaten faydalı cevapları genişleterek, işte size daha eksiksiz bir örnek:

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;
}

2
Bunun çok eski bir cevap olduğunu biliyorum, ancak çok eksiksiz olduğu için, onu kullanabilecek başkalarına, SSLv3 protokolünü POODLE güvenlik açığına karşı savunmasız olarak devre dışı bırakmanız gerektiğini belirtmek istedim: disablessl3.com Bunun yerine kullanım: ssl_protocols TLSv1 TLSv1 .1 TLSv1.2;
user147787

4

Sadece Igor / Jauder'in gönderisine eklemek için, belirli bir IP dinliyorsanız, şunları kullanabilirsiniz:

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.