it-swarm-vi.tech

nginx HTTPS phục vụ với cùng cấu hình với HTTP

Có cách nào để chia sẻ chỉ thị cấu hình trên hai nginx server {} khối? Tôi muốn tránh trùng lặp các quy tắc, vì nội dung HTTPS và HTTP của trang web của tôi được cung cấp với cùng một cấu hình.

Hiện tại, nó như thế này:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

Tôi có thể làm gì đó dọc theo dòng:

server {
  listen 80, 443;
  ...

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

Bạn có thể kết hợp điều này thành một khối máy chủ như vậy:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

Cách làm chính thức

270
Jauder Ho

Để làm rõ câu trả lời được chấp nhận, bạn cần bỏ qua

SSL on;

và bạn chỉ cần những điều sau đây cho phiên bản nginx sau 0.8.21

listen 443 ssl;

Tài liệu tham khảo:

Tài liệu Nginx - Định cấu hình máy chủ HTTP/HTTPS

90
Sean Tan

Tôi không biết một cách như bạn đề xuất, nhưng chắc chắn là một cách dễ dàng và có thể duy trì.

Di chuyển các cài đặt máy chủ phổ biến vào một tệp riêng biệt, tức là "serverFoo.conf" và sau đó include nó trong riêng biệt server {} khối như vậy:

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

Mở rộng các câu trả lời đã hữu ích, đây là một ví dụ đầy đủ hơn:

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

Chỉ cần thêm vào bài đăng của Igor/Jauder, nếu bạn đang nghe một IP cụ thể, bạn có thể sử dụng:

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