Não tenha medo, porque um corajoso grupo de programadores de operações resolveu a situação com uma nova marca nginx_tcp_proxy_module
Escrito em agosto de 2012, por isso, se você é do futuro, deve fazer sua lição de casa.
Pré-requisitos
Supõe que você esteja usando o CentOS:
- Remova a instância atual do NGINX (sugira usar o servidor de desenvolvimento para isso)
- Se possível, salve seus arquivos de configuração antigos do NGINX para poder reutilizá-los (isso inclui seu
init.d/nginx
script)
yum install pcre pcre-devel openssl openssl-devel
e quaisquer outras bibliotecas necessárias para criar o NGINX
- Obtenha o nginx_tcp_proxy_module no GitHub aqui https://github.com/yaoweibin/nginx_tcp_proxy_module e lembre-se da pasta onde você a colocou (verifique se não está compactado)
Crie seu novo NGINX
Novamente, assume o 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
(você pode adicionar mais módulos, se precisar)
make
make install
Opcional:
sudo /sbin/chkconfig nginx on
Configurar o Nginx
Lembre-se de copiar primeiro os arquivos de configuração antigos, se desejar reutilizá-los.
Importante: você precisará criar uma tcp {}
diretiva no nível mais alto da sua conf. Verifique se ele não está dentro da sua http {}
diretiva.
A configuração de exemplo abaixo mostra um servidor websocket upstream único e dois proxies para SSL e Não 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;
}
}