WebSocket là một giao thức truyền tải hai chiều (full-duplex) cho phép giao tiếp thời gian thực giữa máy khách (client) và máy chủ (server) thông qua kết nối duy trì. Nginx cung cấp một số tùy chọn cấu hình để xử lý các yêu cầu WebSocket và hỗ trợ giao tiếp thời gian thực trong ứng dụng web của bạn. Trong bài viết này, chúng ta sẽ tìm hiểu cách cấu hình Nginx để xử lý các yêu cầu WebSocket.
Để cấu hình Nginx để hỗ trợ WebSocket, bạn cần thực hiện các bước sau:
Cấu hình proxy_pass
Đầu tiên, bạn cần cấu hình proxy_pass
để chuyển tiếp yêu cầu WebSocket từ Nginx đến máy chủ ứng dụng thực tế (ví dụ: Node.js, Python, Ruby, vv.). Dưới đây là một ví dụ về cấu hình proxy_pass
cho WebSocket:
http {
...
server {
...
location /websocket {
proxy_pass http://your_backend_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
}
Trong ví dụ trên:
/websocket
là đường dẫn tới WebSocket endpoint.http://your_backend_server
là URL của máy chủ ứng dụng WebSocket thực tế.proxy_http_version 1.1
khai báo phiên bản HTTP sử dụng là 1.1 để hỗ trợ WebSocket.proxy_set_header Upgrade $http_upgrade
vàproxy_set_header Connection "Upgrade"
đảm bảo rằng Nginx chuyển tiếp yêu cầu WebSocket và thiết lập các header cần thiết.
Cấu hình keepalive
Với WebSocket, kết nối giữa máy khách và máy chủ được duy trì trong một khoảng thời gian dài. Để tối ưu hóa hiệu suất, bạn có thể cấu hình keepalive
để tái sử dụng các kết nối đã thiết lập. Dưới đây là ví dụ cấu hình keepalive
trong Nginx:
http {
...
upstream backend {
server your_backend_server;
}
server {
...
location /websocket {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Keep-Alive timeout=60;
proxy_set_header Proxy-Connection "Keep-Alive";
}
}
}
Trong ví dụ trên, upstream
được sử dụng để định nghĩa máy chủ backend. proxy_set_header Keep-Alive timeout=60
và proxy_set_header Proxy-Connection "Keep-Alive"
được sử dụng để thiết lập các header Keep-Alive trong yêu cầu chuyển tiếp.
Cấu hình SSL (nếu cần)
Nếu bạn sử dụng kết nối an toàn SSL/TLS cho WebSocket, bạn cần cấu hình SSL trong Nginx. Dưới đây là một ví dụ về cấu hình SSL:
http {
...
server {
...
listen 443 ssl;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private_key.key;
location /websocket {
proxy_pass http://your_backend_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
}
Trong ví dụ trên, listen 443 ssl
chỉ định cổng và SSL cho máy chủ. ssl_certificate
và ssl_certificate_key
chỉ định đường dẫn tới chứng chỉ SSL và khóa riêng tư tương ứng.
Sau khi đã cấu hình, bạn có thể khởi động lại Nginx để áp dụng các thay đổi.
Tóm lại, để cấu hình Nginx để xử lý các yêu cầu WebSocket và hỗ trợ giao tiếp thời gian thực, bạn cần cấu hình proxy_pass
để chuyển tiếp yêu cầu WebSocket, cấu hình keepalive
để tái sử dụng kết nối và cấu hình SSL (nếu cần).