it-swarm-tr.com

HTTP ile aynı yapılandırma ile sunulan nginx HTTPS

Yapılandırma yönergelerini iki nginx arasında paylaşmanın bir yolu var mı server {} blok? Sitemin HTTPS ve HTTP içeriği tamamen aynı yapılandırma ile sunulduğu için kuralları çoğaltmaktan kaçınmak istiyorum.

Şu anda böyle:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

Çizgiler boyunca bir şeyler yapabilir miyim:

server {
  listen 80, 443;
  ...

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

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

270
Jauder Ho

Kabul edilen cevabı açıklığa kavuşturmak için atlamanız gerekir

SSL on;

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

listen 443 ssl;

Referans:

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

90
Sean Tan

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

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

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

Zaten yararlı cevaplara genişleyerek, 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;
}
9
Jonathan

Sadece Igor/Jauder'ın yayınına eklemek için, belirli bir IP'yi dinliyorsanız kullanabilirsiniz:

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