Nginx nodejs problems - node.js

I am trying to use nginx to direct a website hosted on port 8080 to domain exemple1.com and another one on port 8081 that i want to redirect to domain exemple2.com.
On the file /etc/nginx/sites-available/default i puted this code:
location ~/example1/ {
proxy_pass http://example1.com;
}
location ~/example2/ {
proxy_pass http://example2.com;
}
but i couldn make it work . I am running 2 nodejs servers on the ports i talked about (port 8080 and 8081).
What i am doing wrong and how to "fix "
it?

Because the downstream app server running on different ports(listen) than coming in, you need to specify ports in proxy_pass. So I think
listen 8080;
location ~/example1/ {
proxy_pass http://example1.com:8080;
}
location ~/example2/ {
proxy_pass http://example2.com:8081;
}

Related

Can't redirect traffic to localhost with nginx and docker

I'm new to Docker and nginx so this may be a simple question but I've been searching through question/answers for a while and haven't found the correct solution.
I'm trying to run an nginx server through docker to reroute all requests to my.example.com/api/... to localhost:3000/api/...
I have the following Dockerfile:
FROM nginx
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
and the nginx.conf file:
server {
server_name my.example.com;
location / {
proxy_pass http://localhost:3000/;
}
}
When I make the calls to the api on localhost:3000 this works fine but when I try to run against my.example.com I get a network error that the host isn't found. To be clear the domain I want to 'redirect' traffic from to localhost host is a valid server address, but I want to mock the api for it for development.
This isn't working because your nginx proxying request to localhost which is container itself but your app is running on host's port 3000 -- outside of container. check this article
change
proxy_pass http://localhost:3000/;
  to
proxy_pass http://host.docker.internal.
add 127.0.0.1 example.com my.example.com in etc/hosts

Nginx Proxy On Custom Port

I have a node process listening on port 11180, and would like to redirect all request from https:example.com:11179 to it. How can I accomplish this with nginx ?
I cannot use port 443, because it is forwarding to a different process. However I do have a certificate for the domain example.com
I have tried using this configuration
server {
listen 11179 ssl
location / {
proxy_pass http://127.0.0.1:11180
...
}
}
but the site just keeps loading, however the same configuration works if i listen on port 443
server {
listen 443 ssl
location / {
proxy_pass http://127.0.0.1:11180
...
}
}
Thanks a bunch for your help
Turns out it was a firewall problem :P

ExpressJS Server - respond to host header with shared port

Lets say I have corporatewebsite.com listening on port 80. Which is an appache / WordPress site.
I have a node application that I'd like to respond to sub.corporatewebsite.com
The node application is running Express currently. I can get it to listen to a separate port at the moment, but my service won't start if it's pointed to port 80 since it's already in use.
How can I have both apache and node listening to port 80, but having node responding to the subdomain?
You could use a reverse proxy like Nginx to route your subdomains.
Here is an example of nginx configuration, you might probaly have to complete according to your project and server :
server {
listen 80;
server_name corporatewebsite.com;
location / {
[ ... some parameters ... ]
include proxy_params; // Import global configuration for your routes
proxy_pass http://localhost:1234/; // One of your server that listens to 1234
}
}
server {
listen 80;
server_name sub.corporatewebsite.com;
location / {
[ ... some parameters ... ]
include proxy_params;
proxy_pass http://localhost:4567/; // The other server that listens to 4567
}
}
You have to configure, for example, apache2 listening to port 1234 while nodejs is listening to port 4567.
If you do like this, a good practice is to block direct access from the outside to your ports 1234 and 4567 (using iptables for example).
I think this post could be useful to you : Node.js + Nginx - What now?

nginx configuration for mapping two node.js servers to same address on same machine

I am running two instances of node.js servers serving same code on two different port numbers on same machine. For example, one node.js process is running on port 8080 and other on port 1337.
I need to put nginx proxy in front of both these servers and route any request coming to to these servers.
The reason I want to do this is because lets say I have only one server. I need to change the code and restart the server and it takes nearly 1 minute for the server to restart. During this time, any requests coming to the server will return 502 Bad Gateway Error. I want to avoid this situation by running a replica of the same server.
Now I want to setup nginx in such a way that whenever either one of them is down (restarting while doing git pull), requests should be routed to the other one.
How can I accomplish this setting and where should I start reading about this ?
Requirement: suppose you have 2 application both running on different port at same machine.You have purchased only one domain and want to use it for multiple application.suppose below is the requirement.
purchased domain: example.com
app1_name/app1_port: app1/8081
app2_name/app2_port: app2/8082
You have two option here, you can choose any one you like
1st way: http://example.com/app1, http://example.com/app2
2nd way: http://app1.example.com, http://app2.example.com
Below are final configuration for both type
1st type using url resource indicator and multiple location
server{
listen 80;
server_name example.com;
location /app1{
proxy_pass http://localhost:8081;
}
location /app2{
proxy_pass http://localhost:8082;
}
}
2nd type using subdomain and multiple server block
server{
listen 80;
server_name example.com;
}
server{
server_name app1.example.com;
location /{
proxy_pass http://localhost:8081;
}
}
server{
server_name app2.example.com;
location /{
proxy_pass http://localhost:8082;
}
}
Note: Ideally nginx should run on port 80 and should mapped to main domain. So that you dont have to type port in browser as 80 is default port for http request. You might have to add additional configuration parameter, above is just for demo purpose.

Add subdomain for port that listen node.js

Hi guys i have a problem. I work with php and node, php works with nginx listening port 80 and node works with the port 3000. I want add a subdomain that listen port 3000 a like media.mydomain.com but i could not. I tried with my website register domain and nothing happened and then with nginx in virtual host but show in console error because this port it is using.
nginx-php=mydomain.com
node=mydomain.com:3000 (tried add subdomain "media.fotogena.co")
virtual host:
server {
server_name media.mydomain.com;
listen mydomain.com:3000;
#i don't know that do!
}#show error port is being used
and had seen something like upstream but this assign port 80 to port 3000 but don't is the that me need
If i understand what you want to do, you want a subdomain to use instead of the port 3000, for the subdomain to work you need it to listen on port 80, and proxy what ever comes to port 3000.
server {
server_name sub.example.com;
listen 80;
location / {
proxy_pass http://localhost:3000;
}
}

Resources