You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by Marc Aymerich <gl...@gmail.com> on 2014/04/17 23:18:56 UTC

[users@httpd] Re: ProxyPassMatch with Unix sockets

On Wed, Apr 16, 2014 at 11:17 PM, Marc Aymerich <gl...@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/


-- 
Marc

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


Re: [users@httpd] ProxyPassMatch with Unix sockets

Posted by Jim Jagielski <ji...@jaguNET.com>.
Since this is a new feature, we are consistently adding
enhancements and new methods for it... Thx for the
feedback; let me take a look.

On Apr 18, 2014, at 10:12 AM, Marc Aymerich <gl...@gmail.com> wrote:

> On Fri, Apr 18, 2014 at 2:48 AM, Igor Cicimov <ic...@gmail.com> wrote:
>> 
>> On 18/04/2014 10:43 AM, "Igor Cicimov" <ic...@gmail.com> wrote:
>>> 
>>> 
>>> On 18/04/2014 8:25 AM, "Marc Aymerich" <gl...@gmail.com> wrote:
>>>> 
>>>> On Thu, Apr 17, 2014 at 11:18 PM, Marc Aymerich <gl...@gmail.com>
>>>> wrote:
>>>>> On Wed, Apr 16, 2014 at 11:17 PM, Marc Aymerich <gl...@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


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


Re: [users@httpd] Re: ProxyPassMatch with Unix sockets

Posted by Marc Aymerich <gl...@gmail.com>.
On Fri, Apr 18, 2014 at 2:48 AM, Igor Cicimov <ic...@gmail.com> wrote:
>
> On 18/04/2014 10:43 AM, "Igor Cicimov" <ic...@gmail.com> wrote:
>>
>>
>> On 18/04/2014 8:25 AM, "Marc Aymerich" <gl...@gmail.com> wrote:
>> >
>> > On Thu, Apr 17, 2014 at 11:18 PM, Marc Aymerich <gl...@gmail.com>
>> > wrote:
>> > > On Wed, Apr 16, 2014 at 11:17 PM, Marc Aymerich <gl...@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


Re: [users@httpd] Re: ProxyPassMatch with Unix sockets

Posted by Igor Cicimov <ic...@gmail.com>.
On 18/04/2014 10:43 AM, "Igor Cicimov" <ic...@gmail.com> wrote:
>
>
> On 18/04/2014 8:25 AM, "Marc Aymerich" <gl...@gmail.com> wrote:
> >
> > On Thu, Apr 17, 2014 at 11:18 PM, Marc Aymerich <gl...@gmail.com>
wrote:
> > > On Wed, Apr 16, 2014 at 11:17 PM, Marc Aymerich <gl...@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.

> > Any idea on how to have several fgci apps connected by sockets under
> > the same VirtualHost using different paths?
> >
> >
> > >
> > > --
> > > Marc
> >
> >
> >
> > --
> > Marc
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
> > For additional commands, e-mail: users-help@httpd.apache.org
> >

Re: [users@httpd] Re: ProxyPassMatch with Unix sockets

Posted by Igor Cicimov <ic...@gmail.com>.
On 18/04/2014 8:25 AM, "Marc Aymerich" <gl...@gmail.com> wrote:
>
> On Thu, Apr 17, 2014 at 11:18 PM, Marc Aymerich <gl...@gmail.com>
wrote:
> > On Wed, Apr 16, 2014 at 11:17 PM, Marc Aymerich <gl...@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

> Any idea on how to have several fgci apps connected by sockets under
> the same VirtualHost using different paths?
>
>
> >
> > --
> > Marc
>
>
>
> --
> Marc
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
> For additional commands, e-mail: users-help@httpd.apache.org
>

[users@httpd] Re: ProxyPassMatch with Unix sockets

Posted by Marc Aymerich <gl...@gmail.com>.
On Thu, Apr 17, 2014 at 11:18 PM, Marc Aymerich <gl...@gmail.com> wrote:
> On Wed, Apr 16, 2014 at 11:17 PM, Marc Aymerich <gl...@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.

Any idea on how to have several fgci apps connected by sockets under
the same VirtualHost using different paths?


>
> --
> Marc



-- 
Marc

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