Đừng sợ, bởi vì một nhóm lập trình viên Ops dũng cảm đã giải quyết tình huống bằng một thương hiệu mới nginx_tcp_proxy_module
Được viết vào tháng 8 năm 2012, vì vậy nếu bạn đến từ tương lai, bạn nên làm bài tập về nhà.
Điều kiện tiên quyết
Giả sử bạn đang sử dụng CentOS:
- Xóa phiên bản NGINX hiện tại (đề xuất sử dụng máy chủ dev cho việc này)
- Nếu có thể, hãy lưu các tệp cấu hình NGINX cũ của bạn để bạn có thể sử dụng lại chúng (bao gồm
init.d/nginx
tập lệnh của bạn )
yum install pcre pcre-devel openssl openssl-devel
và bất kỳ libs cần thiết nào khác để xây dựng NGINX
- Nhận nginx_tcp_proxy_module từ GitHub tại đây https://github.com/yaoweibin/nginx_tcp_proxy_module và nhớ thư mục nơi bạn đặt nó (đảm bảo rằng nó không bị nén)
Xây dựng NGINX mới của bạn
Một lần nữa, giả sử CentOS:
cd /usr/local/
wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'
tar -xzvf nginx-1.2.1.tar.gz
cd nginx-1.2.1/
patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
./configure --add-module=/path/to/nginx_tcp_proxy_module --with-http_ssl_module
(bạn có thể thêm nhiều mô-đun nếu bạn cần chúng)
make
make install
Không bắt buộc:
sudo /sbin/chkconfig nginx on
Thiết lập Nginx
Hãy nhớ sao chép các tập tin cấu hình cũ trước nếu bạn muốn sử dụng lại chúng.
Quan trọng: bạn sẽ cần tạo một lệnh tcp {}
ở mức cao nhất trong conf của bạn. Hãy chắc chắn rằng nó không nằm trong http {}
chỉ thị của bạn .
Cấu hình ví dụ dưới đây cho thấy một máy chủ websocket ngược dòng duy nhất và hai proxy cho cả SSL và Non-SSL.
tcp {
upstream websockets {
## webbit websocket server in background
server 127.0.0.1:5501;
## server 127.0.0.1:5502; ## add another server if you like!
check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
server_name _;
listen 7070;
timeout 43200000;
websocket_connect_timeout 43200000;
proxy_connect_timeout 43200000;
so_keepalive on;
tcp_nodelay on;
websocket_pass websockets;
websocket_buffer 1k;
}
server {
server_name _;
listen 7080;
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.key;
timeout 43200000;
websocket_connect_timeout 43200000;
proxy_connect_timeout 43200000;
so_keepalive on;
tcp_nodelay on;
websocket_pass websockets;
websocket_buffer 1k;
}
}