You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by Vincenzo D'Amore <v....@gmail.com> on 2013/05/21 10:17:00 UTC

[users@httpd] Check if external url exists with standard Apache directives

Hi all,

I'm moving a big directory of images from an HTTP server to another and I
cannot change any configuration. I would like my users don't even suppose
there is a moving in progress. So I thought to add a new Apache httpd
server 2.2 configured as reverse proxy in front of both of those servers.

Let me say, we can call those servers 'origin' and 'destination'.

Apache when a resource does not exists in the destination should try to get
it in the origin server.
I suppose to do this check, I mean if the resource exist or not in
'destination' server, using mod_rewrite, I mean RewriteCond -U option.

Actually my tentative has failed, it seems impossible check the existence
of external resource using only standard apache 2.2 directives.
This is my tentative:

    RewriteCond %{IS_SUBREQ}    true
    RewriteCond %{REQUEST_FILENAME} ^/destination
    RewriteRule .       http://destination-server%{REQUEST_FILENAME} [P,L]

    # Check "destination" requests
    RewriteCond %{IS_SUBREQ}    false
    RewriteCond "/destination%{REQUEST_FILENAME}" -U
    RewriteRule . http://destination-server%{REQUEST_FILENAME} [P,L]

    RewriteCond %{IS_SUBREQ}    false
    RewriteRule .            http://origin-server%{REQUEST_URI}      [P,L]


Is there any way to do this using mod_rewrite or some standard Apache httpd
module?

Ciao,
Vincenzo

Re: [users@httpd] Check if external url exists with standard Apache directives

Posted by Vincenzo D'Amore <v....@gmail.com>.
Hi Yehuda,

Thanks for your answer and... yep, I can't change the 'destination' server.
Nevertheless this is an interesting answer, because it is first one near
the solution I was looking for.

Anyway, may be there is a problem with the order of execution.
I mean, as far as I read, this solution is based on an apache "load
balancer" feature and I'm not sure we can define the order wherewith origin
and destination servers will be used.
I must execute the first request on 'destination' server and, only if the
resource is not found, I could try with 'origin'.

Just for sake of curiosity I'll try to implement it in my test env.

Thanks again for your answer,
Vincenzo



2013/5/21 Yehuda Katz <ye...@ymkatz.net>

> Your question looks similar to this StackOverflow question:
> http://serverfault.com/questions/83099/apache2-mod-proxy-w-multiple-reverse-proxies
>
> I am guessing from your question that you can't even change that much on
> the 'destination' server.
> I have also looked for a way to do this and come up empty.
>
> - Y
>
>
> On Tue, May 21, 2013 at 4:17 AM, Vincenzo D'Amore <v....@gmail.com>wrote:
>
>> Hi all,
>>
>> I'm moving a big directory of images from an HTTP server to another and I
>> cannot change any configuration. I would like my users don't even
>> suppose there is a moving in progress. So I thought to add a new Apache
>> httpd server 2.2 configured as reverse proxy in front of both of those
>> servers.
>>
>> Let me say, we can call those servers 'origin' and 'destination'.
>>
>> Apache when a resource does not exists in the destination should try to
>> get it in the origin server.
>> I suppose to do this check, I mean if the resource exist or not in
>> 'destination' server, using mod_rewrite, I mean RewriteCond -U option.
>>
>> Actually my tentative has failed, it seems impossible check the existence
>> of external resource using only standard apache 2.2 directives.
>> This is my tentative:
>>
>>     RewriteCond %{IS_SUBREQ}    true
>>     RewriteCond %{REQUEST_FILENAME} ^/destination
>>     RewriteRule .       http://destination-server%{REQUEST_FILENAME}
>> [P,L]
>>
>>     # Check "destination" requests
>>     RewriteCond %{IS_SUBREQ}    false
>>     RewriteCond "/destination%{REQUEST_FILENAME}" -U
>>     RewriteRule . http://destination-server%{REQUEST_FILENAME} [P,L]
>>
>>     RewriteCond %{IS_SUBREQ}    false
>>     RewriteRule .            http://origin-server%{REQUEST_URI}
>>  [P,L]
>>
>>
>> Is there any way to do this using mod_rewrite or some standard Apache
>> httpd module?
>>
>> Ciao,
>> Vincenzo
>>
>>
>>
>


-- 
Vincenzo D'Amore
email: v.damore@gmail.com
skype: free.dev
mobile: +39 349 8513251

Re: [users@httpd] Check if external url exists with standard Apache directives

Posted by Yehuda Katz <ye...@ymkatz.net>.
Your question looks similar to this StackOverflow question:
http://serverfault.com/questions/83099/apache2-mod-proxy-w-multiple-reverse-proxies

I am guessing from your question that you can't even change that much on
the 'destination' server.
I have also looked for a way to do this and come up empty.

- Y


On Tue, May 21, 2013 at 4:17 AM, Vincenzo D'Amore <v....@gmail.com>wrote:

> Hi all,
>
> I'm moving a big directory of images from an HTTP server to another and I
> cannot change any configuration. I would like my users don't even suppose
> there is a moving in progress. So I thought to add a new Apache httpd
> server 2.2 configured as reverse proxy in front of both of those servers.
>
> Let me say, we can call those servers 'origin' and 'destination'.
>
> Apache when a resource does not exists in the destination should try to
> get it in the origin server.
> I suppose to do this check, I mean if the resource exist or not in
> 'destination' server, using mod_rewrite, I mean RewriteCond -U option.
>
> Actually my tentative has failed, it seems impossible check the existence
> of external resource using only standard apache 2.2 directives.
> This is my tentative:
>
>     RewriteCond %{IS_SUBREQ}    true
>     RewriteCond %{REQUEST_FILENAME} ^/destination
>     RewriteRule .       http://destination-server%{REQUEST_FILENAME} [P,L]
>
>     # Check "destination" requests
>     RewriteCond %{IS_SUBREQ}    false
>     RewriteCond "/destination%{REQUEST_FILENAME}" -U
>     RewriteRule . http://destination-server%{REQUEST_FILENAME} [P,L]
>
>     RewriteCond %{IS_SUBREQ}    false
>     RewriteRule .            http://origin-server%{REQUEST_URI}      [P,L]
>
>
> Is there any way to do this using mod_rewrite or some standard Apache
> httpd module?
>
> Ciao,
> Vincenzo
>
>
>