pengembangan-web-mp-pd.com

nginx HTTPS melayani dengan konfigurasi yang sama seperti HTTP

Apakah ada cara untuk membagikan arahan konfigurasi di dua nginx server {} blok? Saya ingin menghindari duplikasi aturan, karena konten HTTPS dan HTTP situs saya disajikan dengan konfigurasi yang sama persis.

Saat ini, seperti ini:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

Dapatkah saya melakukan sesuatu di sepanjang baris:

server {
  listen 80, 443;
  ...

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

Anda dapat menggabungkan ini menjadi satu blok server seperti:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

Cara Resmi

270
Jauder Ho

Untuk mengklarifikasi jawaban yang diterima, Anda perlu menghilangkan

SSL on;

dan Anda hanya perlu yang berikut ini untuk versi nginx setelah 0.8.21

listen 443 ssl;

Referensi:

Nginx Documents - Mengkonfigurasi server HTTP/HTTPS tunggal

90
Sean Tan

Saya tidak tahu cara seperti yang Anda sarankan, tetapi tentu saja ada cara yang mudah dan dapat dipertahankan.

Pindahkan pengaturan server umum ke dalam file terpisah, mis. "ServerFoo.conf" dan kemudian include itu dalam file yang terpisah server {} blok seperti itu:

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

Memperluas jawaban yang sudah membantu, berikut adalah contoh yang lebih lengkap:

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

Hanya untuk menambah posting Igor/Jauder, jika Anda mendengarkan IP tertentu Anda dapat menggunakan:

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