httpd-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marc Aymerich <glicer...@gmail.com>
Subject Re: [users@httpd] Re: ProxyPassMatch with Unix sockets
Date Fri, 18 Apr 2014 14:12:05 GMT
On Fri, Apr 18, 2014 at 2:48 AM, Igor Cicimov <icicimov@gmail.com> wrote:
>
> On 18/04/2014 10:43 AM, "Igor Cicimov" <icicimov@gmail.com> wrote:
>>
>>
>> On 18/04/2014 8:25 AM, "Marc Aymerich" <glicerinu@gmail.com> wrote:
>> >
>> > On Thu, Apr 17, 2014 at 11:18 PM, Marc Aymerich <glicerinu@gmail.com>
>> > wrote:
>> > > On Wed, Apr 16, 2014 at 11:17 PM, Marc Aymerich <glicerinu@gmail.com>
>> > > wrote:
>> > >> Hi,
>> > >> I have a PHP-FPM web application that I want it to be accessed under
>> > >> "/alias/" path. I'm trying to configure ProxyPassMatch with Unix
>> > >> sockets but it doesn't work because it passes "/alias/" to the web
>> > >> app, but this path doesn't exist :(
>> > >>
>> > >> What I have so far is this:
>> > >>
>> > >> ProxyPassMatch ^/alias/(.*\.php(/.*)?)$ \
>> > >> unix:/var/run/user-fpm.sock|fcgi://localhost/home/user/webapps/app1/
>> > >
>> > >
>> > > I think I got something :)
>> > >
>> > > if you guys like to comment on the following solution it would be
>> > > great! (I'm kind of newbie)
>> > >
>> > > # Rewrite the URL before proxying
>> > > RewriteRule ^/alias(.*\.php)$ $1 [L,PT]
>> > >
>> > > ProxyPassMatch ^/?(.*\.php)$
>> > > unix:/var/run/user.sock|fcgi://127.0.0.1/home/user/webapps/app1/
>> > >
>> > > # Create an alias for app1 static content
>> > > Alias /alias /home/user/webapps/app1/
>> >
>> >
>> > Well, actually this doesn't solve my original problem which is having
>> > two different php-fpm apps under the same VirtualHost.
>> >
>> > Based on the previous directives I kind of expected something like the
>> > following to work:
>> >
>> > <LocationMatch ^/app1(.*\.php)$>
>> >     RewriteRule $1 [L,PT]
>> >     ProxyPassMatch
>> > unix:/var/run/user.sock|fcgi://127.0.0.1/home/user/webapps/app1/
>> > </LocationMatch>
>> >
>> > <LocationMatch ^/app2(.*\.php)$>
>> >     RewriteRule $1 [L,PT]
>> >     ProxyPassMatch
>> > unix:/var/run/user.sock|fcgi://127.0.0.1/home/user/webapps/app2/
>> > </LocationMatch>
>> >
>> >
>> > But it doesn't, the RewriteRule seems to be totally ignored inside a
>> > LocationMatch no matter what I put there.
>> >
>> Did you read
>> http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypassmatch
>>
> And
> http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule
> Pay attention to the Context which explains where the directive should be
> used.


Thanks Igor for pointing out these documents.

I've read them carefully this morning and done some more tests, none
of them worked as I wanted to.

I have concluded that it is not possible to have multiple fcgi socket
apps on the same VirtualHost using mod proxy.

At least not by using the functionality available on current stable 2.4.9.

But I'd love someone to prove me wrong :)



Here the summary of the 3 ways I've tried:

1) The first thing is trying to pass the matched part of a URL using
ProxyPassMatch.

But the obvious way of doing this doesn't work:

ProxyPassMatch ^/alias(.*\.php)$
unix:/var/run/user.sock|fcgi://127.0.0.1/home/user/webapps/app1/$1

[Fri Apr 18 13:32:21.367171 2014] [proxy:error] [pid 29185:tid
139735912711936] (111)Connection refused: AH00957: FCGI: attempt to
connect to 127.0.0.1:8000 (*) failed
[Fri Apr 18 13:32:21.367226 2014] [proxy_fcgi:error] [pid 29185:tid
139735912711936] [client 10.0.3.64:35267] AH01079: failed to make
connection to backend: 127.0.0.1

What makes proxy_fcgi break is the ending $1. Without it no error is
reported by Apache.
However the backend server will receive the full path, a GET
/alias/info.php request.


2) Contrary on what is stated on the ProxyPassMatch documentation[1]
it seems that you can NOT use mod rewrite to do more advanced stuff.
At least not in an obvious way, something like this will not work:

RewriteRule ^/alias(.*\.php)$
unix:/var/run/user.sock|fcgi://127.0.0.1/home/user/webapps/app1$1
[P,NE]

because it gets actually rewritten as:

http://domain/unix:/var/run/user.sock|fcgi://127.0.0.1/home/user/webapps/app1/info.php


3) Also you can not use a Location block to limit the effect of a
RewriteRule+ProxyPassMatch, i.e.

<LocationMatch ^/app1(.*\.php)$>
    RewriteRule $1 [L,PT]
    ProxyPassMatch
unix:/var/run/user.sock|fcgi://127.0.0.1/home/user/webapps/app1/
</LocationMatch>

According to the documentation RewriteRules have no effect inside a
Location block, but still is syntactically correct :).



[1] http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypassmatch


-- 
Marc

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Mime
View raw message