Apache 2.4.6 Virtual Host ServerAlias directive not matching alias in all cases

apache-2.4virtualhost

Apache 2.4.6 is hosting four domains using name based Virtual Hosts. Calls to port 80 for http are redirected to port 443. Each virtual server has two ServerAlias args for the directive to redirect calls to http://domain-example.com/ or http://www.domain-example.com/ to https://domain-example.com/.

The problem is that the call to http://example2.com/ gets redirected by the default Virtual Host (first in order) https://example1.com/. Even further head scratching is that http://example2.com/somepath properly redirects to https://example2.com/somepath.

Summary of calls & results:

    http://example1.com/    ==> https://example1.com/
    http://www.example1.com/    ==> https://example1.com/
    https://example1.com/   ==> https://example1.com/
    https://www.example1.com/   ==> https://example1.com/

    http://example2.com/    ==> https://example1.com/ (<== THIS ONE!)
    http://www.example2.com/    ==> https://example2.com/
    https://example2.com/   ==> https://example2.com/
    https://www.example2.com/   ==> https://example2.com/

    http://example3.us/ ==> https://example3.us/
    http://www.example3.us/ ==> https://example3.us/
    https://example3.us/    ==> https://example3.us/
    https://www.example3.us/    ==> https://example3.us/

    http://example4.com/    ==> https://example4.com/
    http://www.example4.com/    ==> https://example4.com/
    https://example4.com/   ==> https://example4.com/
    https://www.example4.com/   ==> https://example4.com/

    http://example2.com/    ==> https://example1.com/
    http://example2.com/somepath    ==> https://example2.com/somepath

virtualhost.conf (firewalled ports replaced by [value])

SSLStrictSNIVHostCheck off

<VirtualHost *:80>
  ServerName www.example1.com
  ServerAlias example1.com *.example1.com
  Redirect permanent / https://example1.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName www.example1.com
  ServerAlias example1.com *.example1.com
  ProxyRequests off
  ProxyPreserveHost on
  CustomLog "/path/to/logs/example1ssl.log" "%h %l %u %t \"%r\" %>s %b"
  ErrorLog "/path/to/logs/example1ssl_error.log"
  SSLEngine on
  SSLProxyEngine on
  SSLCertificateFile /path/to/certs/example1.com.crt
  SSLCertificateKeyFile /path/to/private/example1.key
  SSLCertificateChainFile /path/to/certs/ca-bundle-example1.crt
  ProxyPass / http://example1.com:[internal port 1]/
  ProxyPassReverse / http://example1.com:[internal port 1]/
</VirtualHost>

<VirtualHost *:80>
  ServerName www.example2.com
  ServerAlias example2.com *.example2.com
  Redirect permanent / https://example2.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName www.example2.com
  ServerAlias example2.com *.example2.com
  SSLEngine on
  SSLProxyEngine on
  CustomLog "/path/to/logs/example2_ssl.log" "%h %l %u %t \"%r\" %>s %b"
  ErrorLog "/path/to/logs/example2_ssl_error.log"
  SSLCertificateFile /path/to/certs/web-01.example2.com.crt
  SSLCertificateKeyFile /path/to/private/example2.com.key
  SSLCertificateChainFile /path/to/certs/example2.com.crt
  ProxyPreserveHost On
  ProxyRequests off
  ProxyPass / http://example2.com:[internal port 3]/
  ProxyPassReverse / http://example2.com:[internal port 3]/
</VirtualHost>

<VirtualHost *:80>
  ServerName www.example3.us
  ServerAlias example3.us *.example3.us
  Redirect permanent / https://example3.us/
</VirtualHost>

<VirtualHost *:443>
  ServerName www.example3.us
  ServerAlias example3.us *.example3.us
  ProxyRequests off
  ProxyPreserveHost on
  CustomLog "/path/to/logs/example3ssl.log" "%h %l %u %t \"%r\" %>s %b"
  ErrorLog "/path/to/logs/example3ssl_error.log"
  SSLEngine on
  SSLProxyEngine on
  SSLCertificateFile /path/to/certs/example3.us.crt
  SSLCertificateKeyFile /path/to/private/example3.key
  SSLCertificateChainFile /path/to/certs/auth_bundle-example3.crt
  ProxyPass / http://example3.us:[internal port 2]/
  ProxyPassReverse / http://example3.us:[internal port 2]/
</VirtualHost>



<VirtualHost *:80>
  ServerName www.example4.com
  ServerAlias example4.com *.example4.com
  Redirect permanent / https://example4.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName www.example4.com
  ServerAlias example4.com *.example4.com
  ProxyRequests off
  ProxyPreserveHost on
  CustomLog "/path/to/logs/example4ssl.log" "%h %l %u %t \"%r\" %>s %b"
  ErrorLog "/path/to/logs/example4ssl_error.log"
  SSLEngine on

      SSLProxyEngine on
      SSLCertificateFile /path/to/certs/example4.com.crt
      SSLCertificateKeyFile /path/to/private/example4.key
      SSLCertificateChainFile /path/to/certs/ca-bundle-example4.crt
      ProxyPass / http://example4.com:[internal port 4]/
      ProxyPassReverse / http://example4.com:[internal port 4]/
    </VirtualHost>

From apachectl -S

VirtualHost configuration:

    *:80                   is a NameVirtualHost
             default server www.example1.com (/etc/httpd/conf.d/virtualhosts.conf:12)
             port 80 namevhost www.example1.com (/etc/httpd/conf.d/virtualhosts.conf:12)
                     alias example1.com
                     wild alias *.example1.com
             port 80 namevhost www.example2.com (/etc/httpd/conf.d/virtualhosts.conf:36)
                     alias example2.com
                     wild alias *.example2.com
             port 80 namevhost www.example3.us (/etc/httpd/conf.d/virtualhosts.conf:84)
                     alias example3.us
                     wild alias *.example3.us
             port 80 namevhost www.example4.com (/etc/httpd/conf.d/virtualhosts.conf:108)
                     alias example4.com
                     wild alias *.example4.com
    *:443                  is a NameVirtualHost
             default server www.example1.com (/etc/httpd/conf.d/virtualhosts.conf:19)
             port 443 namevhost www.example1.com (/etc/httpd/conf.d/virtualhosts.conf:19)
                     alias example1.com
                     wild alias *.example1.com
             port 443 namevhost www.example2.com (/etc/httpd/conf.d/virtualhosts.conf:43)
                     alias example2.com
                     wild alias *.example2.com
             port 443 namevhost www.example3.us (/etc/httpd/conf.d/virtualhosts.conf:90)
                     alias example3.us
                     wild alias *.example3.us
             port 443 namevhost www.example4.com (/etc/httpd/conf.d/virtualhosts.conf:114)
                     alias example4.com
                     wild alias *.example4.com

Thoughts?

Thank you

Best Answer

This appears to be a local (not server related) Chrome browser dns cache issue. All calls result in the expected url using Safari and Firefox. Only using Chrome does the above described issue occur. I will update further if I find the cause.

Related Topic