Chỉnh sửa:
Nếu bạn lo lắng về kết nối giữa proxy ngược của bạn (kết thúc đường hầm SSL) và máy chủ nội dung không được bảo mật, mặc dù điều này hoạt động và an toàn, bạn có thể nên định cấu hình SSL ngược dòng hoặc đường hầm an toàn như SSH hoặc IPSEC giữa máy chủ nội dung và proxy ngược của bạn.
Tôi đã làm cho nó hoạt động:
Cấu trúc tệp:
ngnix/
cấu hình/
nginx.conf
http_server_name.js
docker-compose.yml
nginx.conf
mô-đun load_module/ngx_stream_js_module.so;
sự kiện {}
dòng {
js_import chính từ http_server_name.js;
js_set $preread_server_name main.get_server_name;
bản đồ $preread_server_name $http {
1.example.com server1_backend_http;
2.example.com server2_backend_http;
}
bản đồ $ssl_preread_server_name $https {
1.example.com server1_backend_https;
2.example.com server2_backend_https;
}
ngược dòng server1_backend_http {
máy chủ 192.168.178.8:80;
}
máy chủ ngược dòng1_backend_https {
máy chủ 192.168.178.8:443;
}
ngược dòng server2_backend_http {
máy chủ 192.168.178.7:80;
}
người phục vụ {
nghe 443;
ssl_preread on;
proxy_pass $https;
}
người phục vụ {
nghe 80;
js_preread main.read_server_name;
proxy_pass $http;
}
}
docker-compose.yml
phiên bản: '3'
dịch vụ:
ngnix:
hình ảnh: nginx
container_name: ngnix
khởi động lại: trừ khi dừng
khối lượng:
- ./config/ngnix.conf:/etc/nginx/nginx.conf:ro
- ./config/http_server_name.js:/etc/nginx/http_server_name.js:ro
cổng:
- "192.168.178.4:80:80"
- "192.168.178.4:443:443"
http_server_name.js
var server_name = '-';
/**
* Đọc tên máy chủ từ luồng HTTP.
*
* @param s
* Dòng.
*/
hàm read_server_name(s) {
s.on('tải lên', hàm (dữ liệu, cờ) {
if (data.length || flags.last) {
s.done();
}
// Nếu chúng ta có thể tìm thấy tiêu đề Host.
var n = data.indexOf('\r\nHost: ');
nếu (n != -1) {
// Xác định điểm bắt đầu của giá trị Host header và của header tiếp theo.
var start_host = n + 8;
var next_header = data.indexOf('\r\n', start_host);
// Trích xuất giá trị tiêu đề Host.
server_name = data.substr(start_host, next_header - start_host);
// Xóa cổng nếu được cung cấp.
var port_start = server_name.indexOf(':');
nếu (port_start != -1) {
server_name = server_name.substr(0, port_start);
}
}
});
}
hàm get_server_name(s) {
trả về server_name;
}
xuất mặc định {read_server_name, get_server_name}
Tài liệu:
ngx_http_upstream_module
ngx_http_map_module
ngx_stream_proxy_module
Chỉnh sửa:
Đọc bài đăng trên blog này để biết thêm thông tin