Cách chạy nginx SSL trên cổng không chuẩn


15

Tôi nhận ra điều này trông giống như một bản sao của ít nhất một vài câu hỏi khác, nhưng tôi đã đọc chúng vài lần và vẫn đang làm gì đó sai.

Sau đây là nội dung của tập tin cấu hình nginx myexample.com của tôi nằm ở /etc/nginx/sites-available.

server {

  listen       443 ssl;
  listen       [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
      index index.html index.htm;

}

Nó hoạt động, khi tôi truy cập https://myexample.com , nội dung được phục vụ và kết nối được bảo mật. Vì vậy, cấu hình này có vẻ là tốt.

Bây giờ nếu tôi thay đổi cổng ssl thành 9443 và tải lại cấu hình nginx, cấu hình tải lại không có lỗi, nhưng truy cập https://myexample.com sẽ hiển thị lỗi trong trình duyệt (Trang web này không thể truy cập / myexample.com từ chối kết nối. ERR_CONNECTION_REFUSED)

Tôi đã thử các đề xuất và tài liệu ở đây , ở đâyở đây (trong số những người khác) nhưng tôi luôn gặp lỗi ERR_CONNMENT_REFUSED.

Tôi nên lưu ý rằng tôi có thể sử dụng một cổng không chuẩn và sau đó nhập rõ ràng cổng đó vào URL, ví dụ: https://myexample.com:9443 . Nhưng tôi không muốn làm điều đó. Điều tôi muốn là người dùng có thể nhập myexample.com vào bất kỳ trình duyệt nào và tự động chuyển hướng nginx đến kết nối an toàn.

Một lần nữa, tôi không gặp vấn đề gì khi sử dụng cổng SSL 443 tiêu chuẩn.

Chỉnh sửa: Tôi đang sử dụng nginx / 1.6.2 trên debian / jessie


1
bạn đã đề cập rằng "Tôi nên lưu ý rằng tôi có thể sử dụng một cổng không chuẩn và sau đó nhập rõ ràng cổng đó vào URL, ví dụ: myexample.com:9443 ." Bạn có thể giải thích làm thế nào bạn có thể làm điều này không vì tôi muốn truy cập trang web của tôi bằng cách sử dụng smth như " myexample.com:9443 " với SSL được bao gồm
Ghassan Zein

Câu trả lời:


22

Để hỗ trợ nhập " https://myexample.com " trong trình duyệt của bạn xử lý nó bằng cách nginxnghe cấu hình trên cổng 9443, bạn sẽ cần một nginxcấu hình bổ sung vẫn nghe trên cổng 443, vì đó là cổng IP để mà trình duyệt kết nối .

Như vậy:

server {
  listen 443 ssl;
  listen [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  # Redirect the browser to our port 9443 config
  return 301 $scheme://myexample.com:9443$request_uri;
}

server {
  listen 9443 ssl;
  listen [::]:9443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
  index index.html index.htm;
}

Lưu ý rằng cùng một chứng chỉ / khóa là cần thiết cho cả hai phần, vì chứng chỉ thường được gắn với tên máy chủ DNS, nhưng không nhất thiết phải là cổng.

Hi vọng điêu nay co ich!


Đây là câu trả lời đầy đủ nhất, nhưng điều tôi nghĩ bạn đang nói với tôi là để tự động chuyển hướng đến kết nối an toàn, nginx vẫn phải bị ràng buộc với cổng 443. Đây có phải là trường hợp không? Đó là vấn đề :-( Tôi có một quy trình khác ràng buộc với cổng đó.
GojiraDeMonstah

Nginx là một proxy ngược. Bạn có thể nghe nó trên 443 và chuyển yêu cầu đến ứng dụng thích hợp.
Tim

Tim - bạn đã đúng. Có lẽ tôi đã hỏi một câu hỏi ngớ ngẩn thực sự nhưng tôi đã hy vọng có một cách để "thay đổi" một cách kỳ diệu cổng SSL.
GojiraDeMonstah

@GojiraDeMonstah Nếu bạn không muốn sử dụng cổng 443, bạn đặt số cổng đã chọn vào URL. Đó là tất cả.
Michael Hampton

"Ssl" là khá quan trọng. Tôi đã có default_server trước đây và đã vật lộn với nó khá lâu.
swateek

0

Khi bạn nhập https://example.com , tiêu chuẩn cho lược đồ https: // là kết nối với cổng 443. Trong trường hợp của bạn, bạn đã di chuyển máy chủ của mình để bây giờ nó nghe trên cổng 9443. Bạn bị từ chối kết nối tin nhắn vì điều này - không có gì đang nghe trên cổng 443.

Bạn sẽ cần sắp xếp để có một cái gì đó lắng nghe trên cổng 443 chuyển hướng các kết nối đến cổng 9443 hoặc sử dụng một cổng như một phần của URL.


-1

nếu bạn thay đổi cổng thành một tiêu chuẩn không giống như 9443, bạn cần thêm một chuyển hướng từ 443 đến 9443. Đặt nginx để đảo ngược proxy sang cổng đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.