Veja o seguinte:
Estou executando um servidor EC2 com o Ubuntu 14.04 & apache, e eu tenho um aplicativo que usa o plug-in websocket Ratchet para CakePHP. Eu tenho este trabalho bem no localhost e queria testar o aplicativo em um servidor. Quando eu SSH no meu servidor e inicie o script de shell ele corre bem. No entanto, quando eu realmente ir para a página que usa a conexão websocket, na guia de rede no chrome, ele mostra websocket (pendente) e, em seguida, ele falha com o seguinte erro
WebSocket connection to 'ws://my.ip.address:8080/websocket' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
Eu usei telnet my.server.ip.address 80
e conectei com sucesso. Eu também era capaz de se conectar à porta 22, mas promplty começou devido a "incompatibilidade de protocolo". Eu tentei a mesma coisa, mas na porta 8080 e tenho um tempo limite de conexão.
Consegui conectar-me à porta 8080 fazendo ssh no meu servidor e usando telnet 127.0.0.1 8080
. Eu não posso fazer isso de um computador externo, apenas do endereço local de uma conexão SSH. Eu usei sudo tcpdump -i any port 8080
em um terminal separte que eu estava conectado via SSH, e o tráfego da minha conexão telnet mostrou. Portanto, acredito que a porta 8080 esteja aberta e eu possa conectar por dentro, mas, apesar do que o UFW mostra, todo o tráfego externo para a porta 8080 parece estar bloqueado.
Ao desenvolver em localhost, se eu esquecer de ativar o servidor websocket, recebo o mesmo erro de tempo limite de conexão.
Quando uso nmap -p 8080 my.server.ip.address
, mostra o estado como filtrado. Quando faço o mesmo para a porta 80, mostra o estado como aberto.
No meu servidor, iniciei o websocket e, em seguida, no terminal In, usei netstat -ntlp | grep LISTEN
, o que realmente mostra que a porta 8080 está escutando.
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 3532/php
Quando eu paro o websocket e executo o comando netstat novamente, ele desaparece
Na minha máquina local (na qual o websocket funciona), abri outro terminal e usei sudo tcpdump -i any port 8080
para monitorar o tráfego ativo. Eu abri meu navegador e, claro, todo o tráfego através do websocket foi capturado. Eu fiz exatamente a mesma coisa no meu servidor e não havia atividade exibida.
Depois de algumas pesquisas, encontrei alguém na página do Ratchet Plugin github que parecia ter um problema semelhante. O criador do plug-in respondeu Hey, regarding your first comment is that if you pass it through a webserver you have to set it up to proxy the websocket connections to Ratchet.
, mas não tenho certeza do que isso significa. Isso é em referência a uma porta escutando, ou significa outra coisa?
Aqui está meu status UFW
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
2222/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
8080/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
2222/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
8080/tcp (v6) ALLOW Anywhere (v6)
Sua porta não está aberta no seu grupo de segurança do EC2. Verifique seu console ec2 para abrir a porta com o grupo de segurança vinculado ao servidor.
Tags apache-2.2 ubuntu