WebSockets Over SSL with Nginx handshake error

Viewed 1301

I am using websockets backend(Java)-frontend(javaScript) communication with nginx.
I've configured nginx as described here:https://www.nginx.com/resources/admin-guide/reverse-proxy/
SSL certificates are provided by my client(Company that ordered application). The problem occures when I try to establish connection using domain_name. Using (in javaScript):
var client = new WebSocket(wss://domain_name.com/websocket/ws)
produces:

WebSocket {
    readyState:0
    url:"wss://domain_name.com/websocket/ws"
} 

and 'failed: WebSocket opening handshake timed out'.
when i use
new WebSocket(wss://172.21.1.2/websocket/ws) (where 172.21.1.2 is server's IP address in company's network) everything works perfectly (connection is established). Result:

WebSocket {
    readyState:1
    url:"wss://172.21.1.2/websocket/ws"
}

nginx.config is described below:

http{
    #...

    upstream backend {
        server 127.0.0.1:8887;
    }
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }

    # https
    server {

        listen 443 ssl;
        server_name 127.0.0.1 domain_name.com;

        ssl_certificate      path/to/cert/cert.crt;
        ssl_certificate_key  path/to/cert/cert.key;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        client_max_body_size 100M;

        location / {
            proxy_pass http://127.0.0.1:8080/;
        }

        location /websocket/ws {
            error_log D:/app/nginx-1.8.1/logs/websocket_log.log debug;
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_read_timeout 86400;
        }
    }
}


Nginx log file content:

request (using wss://domain_name.com/websocket/ws):

[debug] 32780#36892: *131 http proxy header:
"GET /websocket/ws HTTP/1.1
Host: 172.21.1.2
X-Real-IP: 172.21.2.253
X-Forwarded-Host: 172.21.1.2
X-Forwarded-Server: 172.21.1.2
X-Forwarded-For: 194.230.80.170, 172.21.2.253
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Origin: https://domain_name.com
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=1A26AABA6BD5B499CF50F818841EBB7E
Sec-WebSocket-Key: E/OPZtu/Vff2sCn3nrK0ng==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
X-Forwarded-Proto: https

request (using wss://172.21.1.2/websocket/ws)

[debug] 32780#36892: *878 http proxy header:
"GET /websocket/ws HTTP/1.1
Host: 172.21.1.2
X-Real-IP: 172.22.1.18
X-Forwarded-Host: 172.21.1.2
X-Forwarded-Server: 172.21.1.2
X-Forwarded-For: 172.22.1.18
Upgrade: websocket
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Origin: https://172.21.1.2
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=D35C49CE43FA631B0C462CAC3BAD9765
Sec-WebSocket-Key: fhCnuX3ajakgOIb3gsg0Iw==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits


Nginx version: 1.8.1
Did anyone run into this issue? What am i doing wrong? Any ideas?
I am truly stuck here.
Thanks in advance.

0 Answers
Related