Apache + Node.js + mod_proxy. How to route one domain to :3000 and another to :80
Solution 1:
Just make two <VirtualHost *:80>
tags
<VirtualHost *:80>
ServerAdmin [email protected]
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 [email protected]
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
Solution 2:
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 [email protected]
<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.