Bug 56500 - vhosts priority order with wildcard
Summary: vhosts priority order with wildcard
Status: REOPENED
Alias: None
Product: Apache httpd-2
Classification: Unclassified
Component: Core (show other bugs)
Version: 2.2.22
Hardware: PC Linux
: P2 enhancement (vote)
Target Milestone: ---
Assignee: Apache HTTPD Bugs Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-05-07 23:03 UTC by Ninos
Modified: 2014-05-16 23:12 UTC (History)
1 user (show)



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ninos 2014-05-07 23:03:34 UTC
OS: Debian Wheezy x64
Server version: Apache/2.2.22 (Debian)

Hey there, I wanted to create a server default page and found following error.
At first, I have configuration files like 00_master.conf, domain1.conf.

In the 00_master.conf you can find the defined vhost for the admin panel (I'm using an iscp [i-mscp.net]). Here's an example:

<VirtualHost SERVERIP:80>
    ServerName admin.srv01.example.tld (url to the panel)
    DocumentRoot /var/www/.../panel/
    ...
</VirtualHost>


For the domains I'm using following:

<VirtualHost SERVERIP:80>
    ServerName domain1.tld
    ServerAlias www.domain1.tld
    DocumentRoot /var/www/.../domain1.tld/
    ...
</VirtualHost>


No to my problem. As already mentioned I want to add a server default page. So if someone is visiting an url like "doesnotexists.domain1.tld" or "asd.admin.srv01.example.tld" I want to show a default page with an static html output like "Site not found" or something like that.

For that I added in the 00_master.conf over the first vhost another vhost, which should be used if no ServerName is defined. I tried with a hardcoded ip and it works fine. Here's an example:

<VirtualHost SERVERIP:80>
    DocumentRoot /var/www/.../default
    </Directory>
</VirtualHost>

But if I use an wildcard like *:80 or _default_:80 the vhost will not be used. I think it's because of a wrong priority of the vhosts.

Best regards,
Ninos
Comment 1 Eric Covener 2014-05-15 19:08:35 UTC
This is working as desined -- If there's a wildcard and an exact match IP in the <virtualhost>, the exact match wins and the name-based vhost will be picked from the best IP-based match.
Comment 2 Ninos 2014-05-16 20:04:29 UTC
I think the design is a little bit wrong or wrong implemented. The vhosts with the wildcard should have a higher priority on a not defined vhost. Here're some examples:

EXAMPLE 1
Visit:
Domain: example1.com
IP: IP1

Defined vhost:
Domain: example2.com
IP: IP1

Priority:
Current: IP1:example2.com -> wildcard
Should be: wildcard -> IP1:example2.com


EXAMPLE 2
Visit:
Domain: example1.com
IP: IP1

Defined vhost:
Domain: example2.com
IP: IP2

Priority:
Current: wildcard -> IP2:example2.com
Should be: wildcard -> IP2:example2.com


EXAMPLE 3
Visit:
Domain: example1.com
IP: IP1

Defined vhost:
Domain: *
IP: IP1

Priority:
Current: IP1:* -> wildcard
Should be: IP1:* -> wildcard

What I mean is, if all vhosts have a defined ServerName (expect whildcard), the vhosts shouldn't have a higher priority than the wildcard IF the domain can't be matched with a vhost. If someone want's to match all undefined ip-requests to a vhost, he can also use a wildcard for the ServerName. (Servername *,example1.com, *.example1.com).

This design would be cleaner and more logical.
Comment 3 Eric Covener 2014-05-16 21:43:25 UTC
Not a bug, this is by design. IP/interface based mapping first, name-based mapping second.  

If you just want name-based, you have to limit yourself to all *:port.  Otherwise, ip-based discrimination happens first.
Comment 4 Ninos 2014-05-16 22:34:45 UTC
I understand the current mapping and also know now, that's not a bug. In my second comment I asked for a little modified design, because for me my example seems more logical. :)
Comment 5 Eric Covener 2014-05-16 23:12:51 UTC
(In reply to Ninos from comment #4)
> I understand the current mapping and also know now, that's not a bug.

Reclassifying as an enhancement. I don't think it's well defined here thouh.