Re: httpd 2.2.4 + mod_proxy + tomcat 6.0.9 + ColdFusion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dave Shuck wrote:
I hate to spam up the list with this issue, but I have another question if you would indulge me. To strip this down a bit, let's just forget about the multiple instances and say I have a single instance of Tomcat and have installed ColdFusion as an application within it. So far I have been able to forward .cfm files to ColdFusion via mod_jk and ProxyPass, but neither was in the way that I expected. I haven't been able to successfully process cfm files with the RewriteRule method. Perhaps the problem is in my expectation rather than functionality.

Here is what I would expect to happen. In Tomcat there is a webapp named "ROOT" which is where the ColdFusion web admin tools and such installed. It's physical path is /usr/local/apache-tomcat/webapps/ROOT I can hit that with http://localhost:8080/......

ok...

Then in my httpd-vhosts.conf I have a website that is pathed /usr/local/apache2/htdocs/whateversite. I Ideally I want all my files to exist in the .../htdocs/whateversite directory and when I hit a .cfm file in that directory, I want that file to be processed by the ColdFusion application.

yes...

When I used ProxyPass, any request to 'whateversite' would just forward the request to the 'ROOT' site and expect the requested file to exist in .../webapps/ROOT. Obviously this wasn't the answer.

that's because you told it to...

when the request comes in, you forward the request to tomcat, which looked for it in the default application (ROOT) because you haven't told Tomcat to look anywhere else.

Apache doesn't send the whole file over to Tomcat for processing, it just abdicates responsibility for the requested url and expects Tomcat to know what to do with it, and where to find it.

When I used mod_jk, any non-".cfm" templates would serve properly but when it went to serve the ".cfm" templates it would expect those to exist in that "ROOT" directory rather in the "whateversite" directory just as ProxyPass had. This was closer but still not the answer.

as above you've not configured your Tomcat to know where those files are.

I haven't yet gotten your suggestion working using RewriteRule, but would this work as I was expecting where it would not actually re-route the request to look for the template in another directory, but actually process the requested template through the application?

it doesn't process the file like a filter, a proxy instruction hands off the request for processing by another server, then feeds the results back to the client.

For what it's worth, I added this to the bottom of my httpd.conf file:
ReWriteEngine on
RewriteRule  ^\/(.+)\.cfm(.+)? ajp://localhost:8009/$1.cfm$2 [P,L]
RewriteRule  ^\/(.+)\.cfc(.+)? ajp://localhost:8009/$1.cfc$2 [P,L]

And this does exist in my Tomcat server.xml:
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

When I put request a ColdFusion template it just serves the plain text back from the template sitting in the "whatever" site. I am not seeing any errors, but it just seems to do nothing with that ".cfm" request.

Again, I feel like I am just missing something that is probably painfully obvious to others, but after reading and re-reading through the docs I am just not finding the exact answer I am looking for.

Your Tomcat configuration isn't quite right yet.

You need to specify, either a docbase in the ROOT context with all your cf? files in it, or add another context and direct all requests to that.

ask about configuring Tomcat webapps on the tomcat-user list & I'll look out for you there.

Thanks again for your advice, and if you have any further advice I would greatly appreciate it.

~Dave

On Monday 12 February 2007 04:29:33 Pid wrote:
Dave Shuck wrote:
Pid, I appreciate your response.  I would like to understand this a
little better as it is currently just slightly more clear than voodoo
magic to me. Is the specification of the port what points it to a
specific instance on Tomcat?  If so, I am assuming that I have to create
some type of matching piece on the Tomcat side.  Is this correct?

Thanks again!

On Sunday 11 February 2007 12:18:48 Pid wrote:
ReWriteEngine on

RewriteRule  ^\/(.+)\.cfm(.+)? ajp://localhost:8009/$1.cfm$2 [P,L]
RewriteRule  ^\/(.+)\.cfc(.+)? ajp://localhost:8009/$1.cfc$2 [P,L]
Hi

(Yes, sorry - dashed a quick reply off as I was heading out.)


mod_rewrite lets you send to a configured proxy.

The rule is designed to capture URLs by file type; the bit before .cfm
gets the main bit of the path, the bit afterwards captures query string
and session id data.

ajp:// indicates the protocol (you could also use http:// with the
mod_proxy_http, but ajp is binary and superior in most cases)

(If you have a cluster - more than one tomcat - let me know)

localhost:8009 - server and port follow, which is a configured tomcat
instance, to which you pass the path back references.

[P,L] are the mod_rewrite 'proxy' and 'last' rule instructions,
respectively.

You can find detailed information about mod_rewrite in the Apache docs.
  It is worth trying to get your head around the mod_proxy doc.  The
mod_proxy_ajp documentation is somewhat obscure, as it isn't
particularly clear that you don't need to do anything to configure it.

The main mod_proxy module accepts all the configuration instructions,
the sub modules only provide protocol connectivity.

(ie you need mod_proxy_HTTP to: RRule /path HTTP://server:port/path )


The other way to forward requests is, as you mentioned, ProxyPass.
This is useful if you wish to send most requests to a server, but you
*can* specify which paths not to.

E.g.

ProxyPass /css 		!  # a wayne's world style suffix 'not'
ProxyPass /javascript 	!  # one per path definition

ProxyPass /		ajp://server/port/ option=value option=value



On to Tomcat: only the ajp connector needs to be active; you can disable
the http one if you're not going to use it.  you only need to look at
the ajp connector port number, it should work out of the box.

if you need help with tomcat configuration, join the tomcat-users list
and ask (me?) for help there.


p



---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx
   "   from the digest: users-digest-unsubscribe@xxxxxxxxxxxxxxxx
For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx





---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx
  "   from the digest: users-digest-unsubscribe@xxxxxxxxxxxxxxxx
For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx


[Index of Archives]     [Open SSH Users]     [Linux ACPI]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Squid]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux