No tengas miedo, porque un valiente grupo de programadores de operaciones ha resuelto la situación con un nuevo nginx_tcp_proxy_module.
Escrito en agosto de 2012, así que si eres del futuro deberías hacer tu tarea.
Prerrequisitos
Asume que está usando CentOS:
- Elimine la instancia actual de NGINX (sugiera usar un servidor de desarrollo para esto)
- Si es posible, guarde sus viejos archivos de configuración de NGINX para poder reutilizarlos (eso incluye su
init.d/nginx
script)
yum install pcre pcre-devel openssl openssl-devel
y cualquier otra biblioteca necesaria para construir NGINX
- Obtenga el nginx_tcp_proxy_module de GitHub aquí https://github.com/yaoweibin/nginx_tcp_proxy_module y recuerde la carpeta donde lo colocó (asegúrese de que no esté comprimido)
Construye tu nuevo NGINX
De nuevo, asume 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
(puede agregar más módulos si los necesita)
make
make install
Opcional:
sudo /sbin/chkconfig nginx on
Configurar Nginx
Recuerde copiar primero sus archivos de configuración anteriores si desea reutilizarlos.
Importante: necesitará crear una tcp {}
directiva al más alto nivel en su conf. Asegúrese de que no esté dentro de su http {}
directiva.
La siguiente configuración de ejemplo muestra un único servidor websocket ascendente y dos servidores proxy para SSL y no 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;
}
}