I'm trying to set up two subdomains, for a
and b
in domain.com
. I use two .conf files, which look pretty much the same with according changes to ServerName and ProxyPass:
<VirtualHost *:80>
ServerName a.domain.com #This was added as a try for a fix.
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/a
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
ProxyPass / https://a.domain.com:8444/
ProxyPassReverse / https://a.domain.com:8444/
ProxyPass /a/ https://a.domain.com:8444/
ProxyPassReverse /a/ https://a.domain.com:8444/
ProxyPass /b/ https://b.domain.com:8445/
ProxyPassReverse /b/ https://b.domain.com:8445/
</VirtualHost>
This is being done my test environment, replicating something similar to what is currently in production. In /etc/hosts, I added a.domain.com
and b.domain.com
to 127.0.0.1. The DNS in production has records for what a.domain.com
and b.domain.com
are, which is the same IP (I also did this in the machine from which I'm testing this).
Also note that I'm not serving any content from their root directories. I added that trying to fix the issue stated in the title. There is a simple html in both directories though.
What is the actual problem?
Simply, when trying a.domain.com
, the result is the webapp from localhost:8444
, as expected. When trying b.domain.com
, the result is also localhost:8444
, instead of localhost:8445
. Both a.conf
and b.conf
are enabled, and if I disable a.conf
, then I'm correclty getting localhost:8445
. If I also try like a.domain.com/b
, the redirect resolves back to a.domain.com
.
I've read several questions and tutorials, and most of them either have something working as in my configuration or add NameVirtualHost, which I understand is not needed for my version of Apache. I also added a ServerName in port 80 as I thought that perhaps the request for b
was being matched by a.conf
as they are the same IP, but that didn't worked either.
What am I missing here? Is it something with mod_proxy I seem to be ignoring? If possible, I'd like to keep one file per webapp. Thanks!
This is on Ubuntu 18.04.2, Apache 2.4 (mod_proxy and mod_ssl), Tomcat 9. Any other info you'd like, I'll try my best to deliver.
UPDATE
Tried with this configuration too. Same undesired result.
<VirtualHost *:80>
ServerAlias a.domain.com
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
Redirect /b https://b.domain.com
<Location />
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
<Location /a>
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
</VirtualHost>
UPDATE
Ok, I just found something very annoying. If I enter with my browser to either a.domain.com
or b.domain.com
, they both resolve to a.domain.com
. That is the problem I described originally. BUT if try https://a.domain.com
or https://b.domain.com
, both resolve to the right server: a
to 8444
and b
to 8445
.
As this is very frustrating, I'll take a brake and analize this in a while.
UPDATE
After a long brake, I tried some other random tweaks just to see what happened and yet again nothing worked as expected, except when using HTTPS. I installed Postman to see what was being send in the request and found out that in Postman, both HTTP and HTTPS use the Host correctly. Even better/worse: The actual response shows the different welcome pages for a.domain.com
and b.domain.com
, meaning that my configurations are working properly, when I use Postman.
I think all this ordeal might just be a cache problem, but my testing browser of choice (Firefox dev ed) is set to not cache stuff. I will check the responses with curl and with my other browsers.