Apache + Node.js + mod_proxy. How to route one domain to :3000 and another to :80
Just make two <VirtualHost *:80>
tags
<VirtualHost *:80> ServerAdmin info@node-example.com ServerName www.node-example.com ProxyRequests off <Proxy *> Order deny,allow Allow from all </Proxy> <Location /> ProxyPass http://localhost:3000/ ProxyPassReverse http://localhost:3000/ </Location></VirtualHost><VirtualHost *:80> ServerAdmin info@node-example.com ServerName node-example.com ProxyRequests off <Proxy *> Order deny,allow Allow from all </Proxy> <Location /> ProxyPass http://localhost:80/ ProxyPassReverse http://localhost:80/ </Location></VirtualHost>
It should work that way ;)
Or if your localhost:80
app isn't node you can remove <Proxy *>
& <Location />
tags for that target and replace it with DocumentRoot /var/www/node-example.com
- your static path to index.html
I suggest you create two different virtual host conf files for two domains. This will enable you to configure them independently besides moving them to different servers when the scaling is different.
For apache2 with default installation location,
create a file in /etc/apache2/sites-available/www.example1.com.conf
<VirtualHost *:80> ServerName www.example1.com ServerAdmin webmaster@example1.com <Directory /home/example1/api/admin/docs> Options -Indexes +FollowSymLinks AllowOverride All Require all granted DirectoryIndex index.html </Directory> <Directory /home/example1/api/mobile/docs> Options -Indexes +FollowSymLinks AllowOverride All Require all granted DirectoryIndex index.html </Directory> ProxyRequests Off ProxyPreserveHost On ProxyPass /api/ "http://localhost:30007/" ProxyPassReverse / "http://localhost:30007/" ErrorLog ${APACHE_LOG_DIR}/example1/example1.log CustomLog ${APACHE_LOG_DIR}/example1/example1.log combined</VirtualHost>
Create another file www.example2.com.conf
in sites-available
and copy the above configuration replacing example1 with example2.
For subdomains, replace www
in filename and inside configuration with your subdomain, eg: api
.
Once you have the conf files created, you have to enable them with command
a2ensite www.example1.com.conf
and then reload apache2 with command
sudo systemctl reload apache2
Make sure you have the directories example1
and example2
created in APACHE_LOG_DIR created before you reload the apache.
Thats it. configure your domain's A record with server IP address in your domain registrar or CDN, whatever you are using and you should be good to go.