Tôi không biết cách đóng kết nối với mô-đun luồng một cách duyên dáng, vì vậy tôi không chắc liệu đó có phải là giải pháp đúng hay không, nhưng nó đáng để thử (bạn có thể sử dụng bất kỳ cổng miễn phí nào cho máy chủ giả/ngược dòng):
dòng {
bản đồ $ssl_preread_server_name $name {
máy chủ server.domain.com;
www.miền.com www;
giả mặc định;
}
máy chủ ngược dòng {
phụ trợ máy chủ: 443;
}
ngược dòng www {
phụ trợ máy chủ2:443;
}
ngược dòng giả {
phụ trợ 127.0.0.1:4343;
}
người phục vụ {
nghe 443;
proxy_pass $name;
ssl_preread on;
}
người phục vụ {
nghe 4343 ;
trở lại "";
}
}
Cập nhật
Sau khi thử nghiệm giải pháp trên, tôi có thể xác nhận rằng nó khả thi. Tuy nhiên, nó tạo ra một mục nhật ký lỗi như
WSARecv() không thành công (10053: Kết nối được thiết lập đã bị phần mềm trong máy chủ của bạn hủy bỏ) trong khi ủy quyền và đọc từ thượng nguồn, máy khách: 127.0.0.1, máy chủ: 127.0.0.1:443, thượng nguồn: "127.0.0.1:4343" , byte từ/đến máy khách:517/0, byte từ/đến ngược dòng:0/517
Vì vậy, sau một số suy nghĩ, tôi đã thử cái này:
http {
người phục vụ {
nghe 4343 ssl;
ssl_certificate /path/to/selfsigned.crt;
ssl_certificate_key /path/to/selfsigned.key;
trả lại 444;
}
}
dòng {
bản đồ $ssl_preread_server_name $name {
máy chủ server.domain.com;
www.miền.com www;
giả mặc định;
}
máy chủ ngược dòng {
phụ trợ máy chủ: 443;
}
ngược dòng www {
phụ trợ máy chủ2:443;
}
ngược dòng giả {
phụ trợ 127.0.0.1:4343;
}
người phục vụ {
nghe 443;
proxy_pass $name;
ssl_preread on;
}
}
Chứng chỉ và khóa tự ký có thể được tạo bằng lệnh sau:
openssl req -nodes -new -x509 -subj "/CN=localhost" -keyout /path/to/selfsigned.key -out /path/to/selfsigned.crt
Cái này đóng kết nối chính xác.
Hơn nữa, ngay cả điều này đã làm việc:
http {
người phục vụ {
nghe 80 default_server;
trả lại 444;
}
}
dòng {
bản đồ $ssl_preread_server_name $name {
máy chủ server.domain.com;
www.miền.com www;
giả mặc định;
}
máy chủ ngược dòng {
phụ trợ máy chủ: 443;
}
ngược dòng www {
phụ trợ máy chủ2:443;
}
ngược dòng giả {
phụ trợ 127.0.0.1:80;
}
người phục vụ {
nghe 443;
proxy_pass $name;
ssl_preread on;
}
}
Tất nhiên, Xoăn
phàn nàn về nỗ lực bắt tay vì số phiên bản SSL không chính xác và có những mục buồn cười trong nhật ký truy cập như
127.0.0.1 - - [05/Nov/2021:01:04:34 +0200] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03L\xF9[\xB2\x7F \x99\xB1(\xAC\xB4\x91}\xE2N\xC6H\xE3\xB3_\xD1\xEA\xA3C\x1D\xE5\xE5\xB6\x02\xDB\x04h\xB6 *\xCB\x0E\xC0\ xF5\xB7\xAF[y|\x1B\x14_\xC2g\xEA\xA2\x1E\xB4\xC4Bj3t\xE8d\xE72vm\xF2\x1B\x00>\x13\x02\x13\x03\x13\x01\xC0, \xC00\x00\x9F\xCC\xA9\xCC\xA8\xCC\xAA\xC0+\xC0/\x00\x9E\xC0$\xC0(\x00k\xC0#\xC0'\x00g\xC0" 400 163 "- " "-"
nhưng nhật ký lỗi rõ ràng.