Thanks so much Andre for taking the time to help me understand this. It's VERY 
helpful! I've attached the section of httpd.conf below related to virtual 
hosts. I think I'm starting to get the picture now. 

Whatever I input into Adobe's software, I ALWAYS see in the mod_jk.log file the 
hostname: host3.mydomain.com. Based on your description below, Apache webserver 
would select the first virtual host associated with that name. In this case, 
the first VirtualHost section below would not match (since xx.xxx.xxx.196 does 
not match host3.mydomain.com). But I'm guessing the 2nd VirtualHost section 
below DOES match (since I interpret * to match anything). 

However, I was intending the 3rd VirtualHost section below (e.g. <VirtualHost 
xx.xxx.xxx.196:80> to match the hostname used by Adobe (this where I originally 
had the JkMounts located) since it had the alias host3.mydomain.com. But you're 
right, Apache would have assigned it to the other VirtualHost before it even 
reached this point. This should explain why the Global JkMounts worked as they 
did.

One question: where we define NameVirtualHost below, is it better to use *:80 
instead of xx.xxx.xxx.196:80? The server has 2 IP addresses associated with it, 
although I *think* only 1 is used in practice. 

--------snippet from httpd.conf showing virtual-host related items---------
PidFile logs/httpd.pid
LockFile logs/accept.lock
Listen 0.0.0.0:80
User nobody
Group nobody
ExtendedStatus On
ServerAdmin webmas...@webcompany.net
ServerName host3.mydomain.com
LogLevel warn
Timeout 300
ServerSignature On

NameVirtualHost xx.xxx.xxx.196:80
NameVirtualHost *

<VirtualHost xx.xxx.xxx.196:80>
    ServerName host3.mydomain.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin webmas...@webcompany.net
    <IfModule mod_suphp.c>
        suPHP_UserGroup nobody nobody
    </IfModule>
</VirtualHost>

# Default vhost for unbound IPs

<VirtualHost *>
    ServerName host3.mydomain.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin webmas...@webcompany.net
    <IfModule mod_suphp.c>
        suPHP_UserGroup nobody nobody
    </IfModule>
</VirtualHost>

<VirtualHost xx.xxx.xxx.196:80>
    ServerName mydomain.com
    ServerAlias www.mydomain.com host3.mydomain.com
    DocumentRoot /home/gkk/public_html
    ServerAdmin webmas...@webcompany.net
    UseCanonicalName Off
    CustomLog /usr/local/apache/domlogs/mydomain.com combined
    CustomLog /usr/local/apache/domlogs/mydomain-bytes_log "%{%s}t %I .\n%{%s}t 
%O ."
    ## User gkk # Needed for Cpanel::ApacheConf
    <IfModule mod_suphp.c>
        suPHP_UserGroup gkk gkk
    </IfModule>
    <IfModule concurrent_php.c>
        php4_admin_value open_basedir 
"/home/gkk:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/tmp
 
        php5_admin_value open_basedir 
"/home/gkk:/usr/lib/php:/usr/local/lib/php:/tmp"
    </IfModule>
    <IfModule !concurrent_php.c>
        <IfModule mod_php4.c>
            php_admin_value open_basedir 
"/home/gkk:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/
 
mp"
        </IfModule>
        <IfModule mod_php5.c>
            php_admin_value open_basedir 
"/home/gkk:/usr/lib/php:/usr/local/lib/php:/tmp"
        </IfModule>
        <IfModule sapi_apache2.c>
            php_admin_value open_basedir 
"/home/gkk:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/t
mp"
        </IfModule>
    </IfModule>
    <IfModule !mod_disable_suexec.c>
        SuexecUserGroup gkk gkk
    </IfModule>
    ScriptAlias /cgi-bin/ /home/gkk/public_html/cgi-bin/

    Include "/usr/local/apache/conf/userdata/*.conf"  
    Include "/usr/local/apache/conf/userdata/*.owner-root" 
    Include "/usr/local/apache/conf/userdata/std/*.conf" 
    Include "/usr/local/apache/conf/userdata/std/*.owner-root" 
    Include "/usr/local/apache/conf/userdata/std/2/*.conf" 
    Include "/usr/local/apache/conf/userdata/std/2/*.owner-root" 
    Include "/usr/local/apache/conf/userdata/std/2/gkk/*.conf"  
    Include "/usr/local/apache/conf/userdata/std/2/gkk/mydomain.com/*.conf"

</VirtualHost>

<VirtualHost xx.xxx.xxx.196:80>
    ServerName myotherdomain.com
    ServerAlias www.myotherdomain.com
    DocumentRoot /home/gkk2/public_html
    ServerAdmin webmas...@webcompany.net
    UseCanonicalName Off
    CustomLog /usr/local/apache/domlogs/myotherdomain.com combined
    CustomLog /usr/local/apache/domlogs/myotherdomain.com-bytes_log "%{%s}t %I 
.\n%{%s}t %O ."
    ## User gkk2 # Needed for Cpanel::ApacheConf
    <IfModule mod_suphp.c>
        suPHP_UserGroup gkk2 gkk2
    </IfModule>
    <IfModule concurrent_php.c>
        php4_admin_value open_basedir 
"/home/gkk2:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/
tmp"
        php5_admin_value open_basedir 
"/home/gkk2:/usr/lib/php:/usr/local/lib/php:/tmp"
    </IfModule>
    <IfModule !concurrent_php.c>
        <IfModule mod_php4.c>
            php_admin_value open_basedir 
"/home/gkk2:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/ph
p:/tmp"
        </IfModule>
        <IfModule mod_php5.c>
            php_admin_value open_basedir 
"/home/gkk2:/usr/lib/php:/usr/local/lib/php:/tmp"
        </IfModule>
        <IfModule sapi_apache2.c>
            php_admin_value open_basedir 
"/home/gkk2:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/ph
p:/tmp"
        </IfModule>
    </IfModule>
    <IfModule !mod_disable_suexec.c>
        SuexecUserGroup gkk2 gkk2
    </IfModule>
    ScriptAlias /cgi-bin/ /home/gkk2/public_html/cgi-bin/

    Include "/usr/local/apache/conf/userdata/*.conf"  
    Include "/usr/local/apache/conf/userdata/*.owner-root" 
    Include "/usr/local/apache/conf/userdata/std/*.conf" 
    Include "/usr/local/apache/conf/userdata/std/*.owner-root" 
    Include "/usr/local/apache/conf/userdata/std/2/*.conf" 
    Include "/usr/local/apache/conf/userdata/std/2/*.owner-root"

</VirtualHost>

----- Original Message ----- 
From: "André Warnier" <a...@ice-sa.com> 
To: "Tomcat Users List" <users@tomcat.apache.org> 
Sent: Thursday, February 16, 2012 1:08:45 PM 
Subject: Re: mod_jk doesn't map to software-generated web address, but maps to 
this address when I enter it into browser 

Just one more thing, then I'm going to bed.. 

modjkl...@comcast.net wrote: 
> Thanks Andre, 
> 
> I'd still be interested is there's a way to have mod_jk only check for 
> traffic coming into mydomain.com for folder /mywebapp. I think the current 
> solution checks all domains, such as mydomain2.com and mydomain3.com, etc., 
> for a map to mydomain.com/mywebapp. 

That is not really how it works, and it is easier to understand if you get the 
basics right. 

a) a request comes to the server, and it looks like this : 

GET /mywebapp HTTP/1.1 
Host: host1.mydomain.com 
(plus any number of additional lines) 

b) the server looks for the "Host:" line, and picks up the hostname of the 
"virtual 
server" that this request is addressed to. 
If it does not find such a Host: line, then this hostname is "empty" (or 
undefined) 

c) Now the server compares this hostname, one by one with each of the 
<VirtualHost> 
sections' "ServerName" and "ServerAlias" directives. 
If it finds an exact match, then it "selects" this <VirtualHost> to handle that 
request. 
If it does not find a match, then it selects the first defined <VirtualHost> 
section to 
handle that request (that is a convention in Apache, that the first 
<VirtualHost> defined, 
from top to bottom of the httpd.conf, is the "default host"; in Tomcat, it is 
different). 

d) Now the server switches its own configuration, to the one defined by the 
selected 
<VirtualHost> section. That is, the server "takes the personality" of that 
selected 
VirtualHost. 
(So in the case at hand, the Apache server now only "knows" the JkMount's 
applicable to 
this VirtualHost, and "forgets" all the others). 

e) Next, Apache passes the request URL to mod_jk, and asks mod_jk it it wants 
to process 
this request. mod_jk looks into its URL-mapping table (the one for this 
VirtualHost) and 
decides if it wants to process this request or not. 
If yes, it tells Apache "yes, I want to process this request later", and Apache 
writes 
that down. 
If not, mod_jk tells Apache "no, I don't want this one". Then Apache will ask 
another 
module if it wants to process that request. 

f) Apache does a number of other things to that request, and then passes it to 
the module 
that has indicated (see (e)) that it wanted to process this request. 
If that was mod_jk, then mod_jk gets the request, passes it to Tomcat, receives 
Tomcat's 
response, and returns this response to Apache. 

g) Apache returns the response to the client, logs the request into the logs, 
cleans up etc.. 

h) Apache is ready to receive and process another request. 

So, it is not mod_jk at all who decides if he processes requests for host1 or 
host2 etc.. 
That decision is taken by Apache, before it even passes the request URL to 
mod_jk. 
When mod_jk receives the request URL (if it receives it), the VirtualHost has 
already been 
chosen, and mod_jk uses the URL-mapping table /of that VirtualHost/ to decide 
if it wants 
to pass this request to Tomcat or not. 

Does that make it clearer why it is very important that the Adobe client 
specifies the 
correct Host: in his requests ? 

That is also why in the JkMount directives, there is never a hostname 
specified, only URLs. 

Is it clearer that way ? 


--------------------------------------------------------------------- 
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org 
For additional commands, e-mail: users-h...@tomcat.apache.org 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to