Điểm:0

Mã nguồn mở NGINX: đảm bảo giao tiếp được mã hóa giữa bộ cân bằng và các nút

lá cờ tr

Tôi đang thiết lập bộ cân bằng tải phải giao tiếp với các nút khác bằng TLS. Điều này rất quan trọng vì các nút back-end không nằm trong mạng riêng. Cấu hình là cái bên dưới.

Kết quả là Nginx trả về 502 cổng xấuvà Nginx dường như không thể chuyển hướng đến miền của tôi. Hơn nữa, vì tôi đang sử dụng mã nguồn mở phiên bản, tôi không thể sử dụng giải quyết từ khóa bên trong cấu hình ngược dòng. Làm cách nào tôi có thể thay đổi cấu hình này để có dữ liệu mã hóa Nginx giữa example.com -> backendX.example.com?

LƯU Ý: nếu tôi sử dụng IP thay vì URL vào khối ngược dòng thì tính năng cân bằng tải sẽ hoạt động, nhưng tôi không nghĩ nó được mã hóa

LỖI:

*3 Lỗi xác minh chứng chỉ SSL ngược dòng: (2:không thể lấy chứng chỉ của nhà phát hành) trong khi SSL bắt tay ngược dòng, máy khách: 0.0.0.0, máy chủ: lb.example.com

Kết quả của openssl s_client -kết nối backend1.example.com:

Chuỗi chứng chỉ
 0 s:CN = backend1.example.com
   i:C = US, O = Let's Encrypt, CN = R3
 1 s:C = US, O = Let's Encrypt, CN = R3
   i:C = US, O = Nhóm nghiên cứu bảo mật Internet, CN = ISRG Root X1
 2 s:C = US, O = Nhóm nghiên cứu bảo mật Internet, CN = ISRG Root X1
   i:O = Digital Signature Trust Co., CN = DST Root CA X3
ví dụ ngược dòng.com{
   less_conn;
   máy chủ phụ trợ1.example.com;
   máy chủ phụ trợ2.example.com;
}

người phục vụ {

        lắng nghe [::]:443 ssl ipv6only=on;
        nghe 443 ssl;
        server_name lb.example.com;

        địa điểm / {
                proxy_pass https://example.com;

                proxy_ssl_trusted_certificate /etc/letsencrypt/.../chain.pem;
                bật proxy_ssl_session_reuse;
                bật proxy_ssl_verify;
                proxy_ssl_verify_depth 2;
                proxy_set_header Máy chủ lưu trữ $host;
        }
    ssl_certificate /etc/letsencrypt/.../fullchain.pem; # được quản lý bởi Certbot
    ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # được quản lý bởi Certbot
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot

}

#### NGINX -T
dữ liệu www của người dùng;
worker_processes tự động;
pid /run/nginx.pid;
bao gồm /etc/nginx/modules-enabled/*.conf;

sự kiện {
    công_nhân kết_nối 768 ;
    # đa_chấp vào ;
}

http {

    ##
    # Cài đặt cơ bản
    ##

    gửi tệp trên;
    bật tcp_nopus;
    bật tcp_nodelay;
    keepalive_timeout 65;
    loại_hash_max_size 2048;
    # server_token tắt;

    # server_name_hash_bucket_size 64;
    # máy chủ_tên_trong_chuyển hướng tắt;
    trình phân giải 8.8.8.8 8.8.4.4 hợp lệ=30 giây;
    bao gồm /etc/nginx/mime.types;
    ứng dụng default_type/octet-stream;

    ##
    # Cài đặt SSL
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Bỏ SSLv3, tham khảo: POODLE
    bật ssl_prefer_server_ciphers;

    ##
    # Cài đặt ghi nhật ký
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Cài đặt Gzip
    ##

    bật gzip;

    # gzip_vary bật;
    # gzip_proxied bất kỳ;
    # gzip_comp_cấp 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # văn bản gzip_types/văn bản thuần túy/ứng dụng css/ứng dụng json/văn bản javascript/ứng dụng xml/ứng dụng xml/xml+văn bản rss/javascript;

    ##
    # Cấu hình máy chủ ảo
    ##

    bao gồm /etc/nginx/conf.d/*.conf;
    bao gồm /etc/nginx/sites-enabled/*;
}

ví dụ ngược dòng.com{
   less_conn;
   máy chủ phụ trợ1.example.com;
   máy chủ phụ trợ2.example.com;
}

người phục vụ {

        lắng nghe [::]:443 ssl ipv6only=on;
        nghe 443 ssl;
        server_name lb.example.com;

        địa điểm / {
                proxy_pass https://example.com;

                proxy_ssl_trusted_certificate /etc/letsencrypt/.../chain.pem;
                bật proxy_ssl_session_reuse;
                bật proxy_ssl_verify;
                proxy_ssl_verify_depth 2;
                proxy_set_header Máy chủ lưu trữ $host;
        }
    ssl_certificate /etc/letsencrypt/.../fullchain.pem; # được quản lý bởi Certbot
    ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # được quản lý bởi Certbot
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot

}

người phục vụ {
    nếu ($host = lb.example.com) {
        trả lại 301 https://$host$request_uri;
    } # được quản lý bởi Certbot


    nghe 80 default_server;
    lắng nghe [::]:80 default_server;

    server_name lb.example.com;
    trả lại 404; # được quản lý bởi Certbot


}

# tệp cấu hình /etc/letsencrypt/options-ssl-nginx.conf:
# Tệp này chứa các tham số bảo mật quan trọng. Nếu bạn sửa đổi tập tin này
# theo cách thủ công, Certbot sẽ không thể tự động cung cấp bảo mật trong tương lai
# cập nhật. Thay vào đó, Certbot sẽ in và ghi lại thông báo lỗi với đường dẫn đến
# tệp cập nhật mà bạn sẽ cần tham khảo khi cập nhật thủ công
# tập tin này.

ssl_session_cache được chia sẻ:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
tắt ssl_session_tickets;

ssl_protocols TLSv1.2 TLSv1.3;
tắt ssl_prefer_server_ciphers;

ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";

nginx -t nginx: cú pháp file cấu hình /etc/nginx/nginx.conf là ok nginx: file cấu hình /etc/nginx/nginx.conf kiểm tra thành công

djdomi avatar
lá cờ za
tại sao bạn sử dụng https và một cổng cho các phần ngược dòng? một cổng chỉ cần thiết trong trường hợp bạn không sử dụng cổng tiêu chuẩn nào
AndreaCostanzo1 avatar
lá cờ tr
@djdomi Tôi cũng đã thử mà không chỉ định cổng. Đó là một thử nghiệm tôi đã thực hiện để đảm bảo rằng đó không phải là vấn đề
djdomi avatar
lá cờ za
cả hai phụ trợ có thể được giải quyết?
AndreaCostanzo1 avatar
lá cờ tr
@djdomi Có, cả hai đều có thể truy cập được bằng trình duyệt bình thường bằng url của chúng
AndreaCostanzo1 avatar
lá cờ tr
@djdomi Tôi đã sửa ví dụ. Dù sao, tên miền được sử dụng bởi DNS của tôi và tên miền được sử dụng bởi các nút khác đều khác nhau
djdomi avatar
lá cờ za
vui lòng chia sẻ đầu ra của nginx -t và sau đó là nginx -T của từng máy chủ khác vì IMHO phần chứng chỉ ssl có vẻ lạ [hãy xem ví dụ ở đây](https://www.digitalocean.com/community/tutorials/how-to- thiết lập-nginx-cân bằng tải-với-ssl-chấm dứt)
AndreaCostanzo1 avatar
lá cờ tr
@djdomi Đã thêm bên dưới. Các nút phụ trợ khác là các máy chủ có sẵn trên apache mà chúng tôi đã sử dụng trong nhiều thời gian. Tôi chỉ cố gắng sử dụng nginx làm bộ cân bằng tải để đặt nó ở giữa. Nếu tôi xóa URL và sử dụng IP ở thượng nguồn thì mọi thứ đều hoạt động tốt, nhưng vấn đề khi sử dụng IP là tôi không biết liệu giao tiếp có được mã hóa hay không
Michael Hampton avatar
lá cờ cz
Bạn cần phải chỉ định `trình giải quyết` nhưng tôi không thấy ở đâu cả. Theo [docs](https://nginx.org/r/resolver), những thứ này phải nằm trong các khối `http`, `server` hoặc `location`.
AndreaCostanzo1 avatar
lá cờ tr
Có (trong cài đặt http của tôi)! Nhưng nó vẫn không hoạt động
Michael Hampton avatar
lá cờ cz
OK, tôi thấy nó bây giờ. Tôi đã tìm các mục error_log của bạn nhưng tôi không thể tìm thấy chúng trong bài đăng của bạn. Vui lòng thử thực hiện một yêu cầu khác và sau đó đăng các mục error_log mới.
AndreaCostanzo1 avatar
lá cờ tr
@MichaelHampton đã phát hiện ra sự cố nhưng không biết cách giải quyết: trong quá trình bắt tay SSL, tôi không gửi chứng chỉ đáng tin cậy của CA. Làm thế nào tôi có thể sửa chữa nó? LỖI: *3 lỗi xác minh chứng chỉ SSL ngược dòng: (2:không thể lấy chứng chỉ nhà phát hành) trong khi SSL bắt tay ngược dòng, máy khách: 0.0.0.0, máy chủ: lb.example.com,
AndreaCostanzo1 avatar
lá cờ tr
@MichaelHampton Tôi đã thay đổi chứng chỉ CA đáng tin cậy bằng /etc/ssl/certs/ca-certificates.crt; và bây giờ lỗi là *1 chứng chỉ SSL ngược dòng không khớp với "tên ngược dòng" trong khi bắt tay SSL với ngược dòng

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.