Soru HTTP ile aynı yapılandırma ile hizmet veren nginx HTTPS


İki nginx genelinde yapılandırma direktiflerini paylaşmanın bir yolu var mı server {} blok mu? Sitemin HTTPS ve HTTP içeriğinin tam olarak aynı yapılandırma ile sunulması nedeniyle kuralları çoğaltmaktan kaçınmak istiyorum.

Şu andaki gibi:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

Çizgiler boyunca bir şey yapabilir miyim?

server {
  listen 80, 443;
  ...

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

174
2018-05-21 16:18


Menşei




Cevaplar:


Bunu aşağıdaki gibi bir sunucu bloğunda birleştirebilirsiniz:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

Resmi Nasıl Yapılır


238
2018-05-21 18:54



Ah, nginx'in 80 numaralı bağlantı noktasından yüklendiyse SSL yönergelerini göz ardı edecek kadar akıllı olduğu konusunda hiçbir fikrim yoktu. Awesome! - ceejayoz
nginx her türlü WIN'dir. - Jauder Ho
ve bir sunucuda birden fazla siteniz varsa, "varsayılan" ın zorunlu olmadığını belirtmeye değer. - luchaninov
Çok zarif, acıtıyor ... - Alix Axel
Burada çalışmıyor ... "Düz HTTP isteği HTTPS bağlantı noktasına gönderildi" - gcstr


Kabul edilen cevabı netleştirmek için ihmal etmeniz gerekir.

SSL on;

ve 0.8.21'den sonra nginx sürümü için aşağıdakilere ihtiyacınız var

listen 443 ssl;

Referans:

Nginx Docs - Tek bir HTTP / HTTPS sunucusunu yapılandırma


81
2018-06-13 06:19



Teşekkür ederim! Http’da neden hiçbir şey işe yaramadığını anlayamadım. SSL'yi kaldırma; çalıştı. - Chris Cummings


Önerdiğin gibi bir yol bilmiyorum, ama kesinlikle kolay ve sürdürülebilir bir yol var.

Ortak sunucu ayarlarını ayrı bir dosyaya, yani "serverFoo.conf" dosyasına taşıyın ve ardından include ayrı ayrı server {} blokları şöyle:

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

26
2018-05-21 18:38



+1 = benim için çalışıyor. (Diğer yöntemle çalışmaya başlayamadı.) - lackey
Ayrıca, diğer bir örnek ise, yük dengeleyici olarak davranıyorsa 'proxy_pass' değerini içermez. - Mike Purcell
Bu seçenek eğer server_name her port için farklıdır - iDev247
Ssl kullanmayın, kullan listen 443 ssl; şimdi bir tane. - danger89
Bu son nginx 1.10.1 ile çalışan tek çözüm gibi görünüyor. Bir sebepten dolayı iki listen satırlar doğru şekilde yorumlanmaz, ancak bunları ayrı ayrı taşımak server{} onu düzeltir. - Artur Bodera


Zaten yararlı cevapları genişletmek, 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;
}

7
2018-05-10 17:48



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


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

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

4
2018-02-25 13:11