Using nginx
server on a single domain with multiple IP addresses ~ reverse-proxy mode
Is it possible to use one instance of nginx
, to serve as a reverse proxy of multiple application servers running on dedicated different IP addresses, under the same domain umbrella?
This article is about pointing in direction on how to achieve that.
Spoiler: It is possible to run
nginx
server both as a reverse proxy and load balancer.
In this article we will talk about:
- Configure
nginx
as anodejs
reverse-proxy server - Proxy multiple IP addresses under the same banner: load balancer
Even though this blog post was designed to offer complementary materials to those who bought my Testing
nodejs
Applications book, the content can help any software developer to tuneup working environment. You use this link to buy the book.
Installation
The magic happens at the upstream nodeapps
section. This configuration plays the gateway role and makes public a server that was otherwise private.
upstream webupstreams{
# Directs to the process with least number of connections.
least_conn;
server 127.0.0.1:8080 max_fails=0 fail_timeout=10s;
server localhost:8080 max_fails=0 fail_timeout=10s;
server 127.0.0.1:2368 max_fails=0 fail_timeout=10s;
server localhost:2368 max_fails=0 fail_timeout=10s;
keepalive 512;
keepalive 512;
}
server {
listen 80;
server_name app.website.tld;
client_max_body_size 16M;
keepalive_timeout 10;
# Make site accessible from http://localhost/
root /var/www/[app-name]/app;
location / {
proxy_pass http://webupstreams;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name blog.website.tld;
access_log /var/log/blog.website.tld/logs.log;
root /var/www/[cms-root-folder|ghost|etc.]
location / {
proxy_pass http://webupstreams;
#proxy_http_version 1.1;
#proxy_pass http://127.0.0.1:2368;
#proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
Example: Typical nginx
configuration at /etc/nginx/sites-available/app-name
This article is an excerpt from “How to configure
nginx
as anodejs
application proxy server” article.
Conclusion
In this article, we revisited how to proxy multiple servers via one nginx
instance, or nginx
load-balancer for short. There are additional complimentary materials in the “Testing nodejs
applications” book.
References
- Testing
nodejs
Applications book - HTTP Load Balancing ~ docs.nginx.com
- How to configure load balancing using
nginx
nginx
single domain on multiple ip addresses ~ StackOverflow Question