Polymer serve refuses external connections - linux

I can connect to my server on port 8081 no problem: if I do nc -l 8081 on my server, and nc my.host.name 8081 on my local machine, I can send and receive everything perfectly. But if I do polymer serve on my server, doing nc my.host.name 8081 on my local exits immediately, while nc localhost 8081 works just fine and I can see my index.html served to me if I fake an HTTP request. nc my.host.name 8081 also fails on the server.
What am I doing wrong? Why is polymer serve only listening to internal requests?

So apparently polymer serve only responds to requests made to localhost by default. Apparently there's a difference between localhost:8081 and the port 8081 that the rest of the world sees.
You can do polymer serve -H [external ip], where you get that external ip from ifconfig where it says inet addr:. Alternatively, I seem to be able to do polymer serve -H `hostname` though I'm not 100% sure that's a general solution.

Related

Rest API w/ JsonServer in Ubuntu - Connection Refused

I was requested to create a Web Server with an API in it to test firewall rule we are planning to implement soon. I am quite new with all this network stuff, so I'm a bit lost on it.
I need to call this API from another machine. The JsonServer is using my port 3000, when I request my API through Postman, using https://localhost:3000/posts, my JSON file is returned normally, however when I change the localhost, to my IP, my connection is being refused. I decided to install a WebServer, to test it and I could access the default Apache page from my others machines. I opened the port 3000 on my server, but I couldn't. The WebServer is working with my IP as well. It seems to be something with my port 3000, and I a not sure about how to fix that.
I executed the command:
sudo lsof -i -P -n | grep 3000
And this was my output
node 29472 user 22u IPv4 254348 0t0 TCP 127.0.0.1:3000 (LISTEN)
Any ideas how can I access my API from another machine?

What does the localhost: 3000 server created by express mean?

What is it that you access when you type in "localhost: 3000" onto your browser? What does that represent?
localhost is a special domain name that always refers to your local computer.
3000 is a tcp port. When you open a url such as:
http://localhost:3000/
Then a connection will get opened to port 3000.
When you specify a url like:
http://localhost/
Then you will open port 80, because the default HTTP port is 80
localhost:3000 is a local development server running on port 3000 of your computer. It is created by the express and can render html pages and route the apis for different requests. With the expressjs framework you can create different routes and associate it with the development or production port. You can also change the port during the development which can be done by changing the value of listening port on your app/index/server .js file.

HTTPS issue when using http-server application in nodejs

Hello I am definitely new to HTTPS so please bear with me. In order to run the nodejs application, http-server, I use this command on my webserver:
http-server -p 80 -S
The -p flag specifies the port and then the -S flag specifies that I will be using the https protocol. I am able to access the website just fine by physically going to the web server's address like:
https://123.456.78.90:80
However when I try to access the site from my domain:
example.com
or even:
https://example.com
I get a connection refused error in the browser. This perplexes me as I have created A records to redirect the domain to the ip address with digital ocean, along with using their nameservers. This whole process works flawlessly when I start up an instance of http-server in normal http mode like this:
http-server -p 80
Any help is MUCH appreciated as I haven't been able to find much on the topic. Thanks internet people.
Try to use a free ports. The port 80 is currently used for http connections.
http-server -p 9090
Wow figured it out. I needed to specify the port 443 when starting the http-server for https to work properly.

Running node app digitalocean and accessing it

Im running my node app with grunt on a DO droplet. I start the server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:3000
But when I navigate to my dropletIP:3000 I cannot see the app, I get:
This site can’t be reached
mydropletIP refused to connect.
Shouldn't my app be available? I don't have nginx or anything installed.
I was having similar problem but the solution was simple. Change from 'localhost' to '0.0.0.0' i.e
.listen(8080, '0.0.0.0');
And then to test your api just enter your static ip of droplet with port that you have entered i.e droplet-ip:8080
Check the particular port is opened or not ,using following command
sudo ufw status
If any Firewall enabled and any port is block means you can see that.
netstat -an | grep "LISTEN " ( List of listening port on server)
I need this info ,then only we can find a problem

Node.js and Apache: connection issues

I have installed Node.js with Socket.io on a CentOS server which is running Apache on port 80.
I created a socket test, which justs listens on port 8080.
If I curl the address localhost:8080 from within the server's shell, I get the Socket.io-welcome message. If I have a line like this:
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
Then the browser cannot find the file.
A "solution" was to proxy requests to /nodejs/ to http://localhost:8080/, but this solution did not work for very long.
Is it possible to run the Node.js server when we have Apache installed? Which settings must be changed in order for us to access the url: http://server.com:8080 ? It seems the Node.js only accepts connections from localhost.
Problem is most probably in your node.js program.
It should listen on 0.0.0.0 and not 127.0.0.1 which is local only.
So where you've got something like:
.listen(8080, '127.0.0.1'); // '127.0.0.1' or 'localhost'
You should change it to:
.listen(8080); // or 0.0.0.0
Apache will only interfere if it also uses port 8080 but you should get an error when starting your node app if this is the case.
Also, if you connect to http://localhost in your browser, it will only work if the server is on the same local machine as the browser. Fine for testing I guess.
You'll have to connect to a domain or ip address if you have a hosted server else no browser will find it.
Update:
Your socket.io code also needs to connect correctly:
var socket = io.connect('http://correct.server.com:8080'); // not localhost
and your browser needs to load the javascript file from the correct place:
<script src="http://correct.server.com/socket.io/socket.io.js"></script> // not localhost
This might help with firewall / load balancer issues:
https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software

Resources