Report this

What is the reason for this report?

Nginx blocking Socket.io

Posted on March 7, 2020

Hello! I used to run my website without Nginx. So, it is just Nodejs who taking care of the socket.io connection and web server task. Then I learn that Nginx would be a better webserver than Nodejs and I can install Certbot to it. I follow these two tutorials: https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04 (to install Nginx) and https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04 (to install Certbot) I got my site up and running. Then I noticed that my socket.io communication is being blocked or I am getting error in the console Failed to load resource: the server responded with a status of 404 (Not Found). I did some research and I found out that I need to complete some steps to get WebSocket to work with Nginx. I tried a few codes I found online but nothing makes sense to me and it still not working.

This what mydomain.com looks like after I install Certbot successfully.

server{
        root /var/www/mydomain.com/html;
        index index.html;

        server_name mydomain.com www.mydomain.com;
        
        location / {
                 try_files $uri $uri/ =404;
        }

   listen [::]:443 ssl ipv6only=on; #managed by Certbot
   listen 443 ssl;
   ssl_certificate ~too lazy to type~
   ssl_certificate_key ~too lazy to type~
   include ~too lazy to type~
   ssl_dhparam ~too lazy to type~

}
server {
  if($host = www.mydomain.com){
      return 301 https://$host$request_uri;
  } #manage by certbot

  if($host = mydomain.com){
      return 301 https://$host$request_uri;
  } #manage by certbot

  listen 80;
  listen [::]:80;
  server_name mydomain.com www.mydomain.com;
  return 404; #manage by Certbot
}

my server.js look like this:


var express = require('express');
var app2 = express();
var server2 = app2.listen(3700);
var socket = require('socket.io');
var io = socket(server2);
io.sockets.on('connection', onNewConnections);

function onNewConnections(socket){

	 socket.on('sendToAll', sendToAllExceptToSender);



	function sendToAllExceptToSender(data){
              socket.broadcast.emit('sendToAllClients',data);

        }
}

I need help with mydomain.com configuration so I can get my socket.io to work. thanks!

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Start building today

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.