Unusual requirement using perl?

Igor Sysoev is at rambler-co.ru
Tue Oct 30 20:07:26 MSK 2007


On Wed, Oct 31, 2007 at 01:04:52AM +1030, Kingsley Foreman wrote:

> I have an unusual requirement for a poject im working on.
> 
> What I need to do is somehow make it so that an ip address is able to hit a 
> folder but anyone not on that address will get a 404 or 403 message.
> 
> Im not much of a perl programmer however what i need it to do is this
> _______________________________________________________________________________________
> $ip = $r->remote_addr ;
> $request = "/htdocs/111222333444-123456789/blah/";  # this would be the 
> $r->uri i think
> $ip =~ s/\.//g;
> 
> $request =~ /\/htdocs\/([0-9]+)-([0-9]+)\/blah\//; # matches the 
> 111222333444 and 123456789 in the request
> if ($ip == $1){
>        print "allow"; # allow it to open the file/folder
> } else {
>        print "404"; # send a 404 or 403 message to the client
> }
> _______________________________________________________________________________________
> I hope this example sort of shows what I need to happen, however I have no 
> idea how to use the perl-embed module to make it work.

The usual way is veriable handler:

http {
      perl_set   $forbidden   forbidden::handler;

      server {
          location / {
              if ($forbidden) {
                  return 403;
              }

              root ...
              ...
          } 

forbidden.pm:

package forbidden;
use nginx;
sub handler {
    my $ip = r->remote_addr;
    my $uri = r->uri;
    ...
    if ($ip == $1) {
        return "1";
    }
    return "";
}


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list