Are these rules ok?

Igor Sysoev is at rambler-co.ru
Thu Dec 25 10:50:27 MSK 2008


On Thu, Dec 25, 2008 at 08:09:45AM +0800, shri at devlib.org wrote:

> Igor,
> 
> Thank you very much for taking the time to answer. 
> 
> The setup is as follows.
> 
> / <-- Wordpress is installed and shows the main page and content
> /forum/ <-- vBulletin
> /classifieds/ <-- Photopost 
> /scripts/ <-- perl CGI scripts 
> /resources/ <-- files built by the Gossamer Links CGI package
> /resources/Detailed/ <-- More files built by the CGI package
> 
> I am using 0.7.24 which is the latest -devel branch I found in the Freebsd
> ports. 
> 
> Should I try a newer one?

You may use either 0.7.24 (but without handy try_files) or the newest 0.7.30.

You may start from Wordpress configuration, and temporarily passing
other location to old servers. I think you do need to set up PATH_INFO.

    location / {
        try_files      $uri  @wordpress;
    }

    location ~ \.php$ {
        try_files      $uri  @wordpress;

        fastcgi_pass   unix:/var/tmp/lighttpd/fastcgi-php.sock;
        fastcgi_param  SCRIPT_FILENAME  /site/expat/oct08$fastcgi_script_name;
        include        fastcgi_params;
    }

    location @wordpress {
        fastcgi_pass   unix:/var/tmp/lighttpd/fastcgi-php.sock;
        fastcgi_param  SCRIPT_FILENAME  /site/expat/oct08/index.php;
        include        fastcgi_params;
    }

    # passing to all servers

    location ^~ /forum/
        proxy_pass    ...;
    }

    location ^~ /classifieds/
        proxy_pass    ...;
    }

    location ^~ /scripts/
        proxy_pass    ...;
    }

    location ^~ /resources/
        proxy_pass    ...;
    }

Then you may try to setup vBulletin configuration:

    location = /forum/getnew.html {
        rewrite ^/forum/getnew.html$ /forum/search.php?do=getnew last;

        # or you may right now set FastCGI paramters and pass the request
        # to FastCGI, but you should remove QUERY_STRING from fastcgi_params0

        #fastcgi_pass   unix:/var/tmp/lighttpd/fastcgi-php.sock;
        #fastcgi_param  SCRIPT_FILENAME  /site/expat/oct08/forum/search.php;
        #fastcgi_param  QUERY_STRING     do=getnew;
        #include        fastcgi_params0;
    }

    location /forum/ {

        # this is handled above as exact match
        #rewrite ^/forum/getnew.html$ /forum/search.php?do=getnew last;

        rewrite ^/forum/getnew([0-9]+).html$
                 /forum/search.php?do=getnew&f=$1 last;

        rewrite ^/forum/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$
                 /forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;

        rewrite ^/forum/unanswered.html$
                 /forum/search.php?do=process&replyless=1&replylimit=0&dontcache=1 last;
        rewrite ^/forum/unanswered([0-9]+).html$
                 /forum/search.php?do=process&replyless=1&replylimit=0&dontcache=1&forumchoice=$1&childforums=1 last;

        try_files      $uri  @vbulletin;
    }

    location ~ ^/forum/.+\.php$ {
        fastcgi_pass   unix:/var/tmp/lighttpd/fastcgi-php.sock;
        fastcgi_param  SCRIPT_FILENAME  /site/expat/oct08/forum/vbseo.php;
        include        fastcgi_params;
    }

    location @vbulletin {
        fastcgi_pass   unix:/var/tmp/lighttpd/fastcgi-php.sock;
        fastcgi_param  SCRIPT_FILENAME  /site/expat/oct08/forum/vbseo.php;
        include        fastcgi_params;
    }

It's probably time to implement location captures in nginx:

    location ~ /forum/getnew([0-9]+).html {
        fastcgi_pass   unix:/var/tmp/lighttpd/fastcgi-php.sock;
        fastcgi_param  SCRIPT_FILENAME  /site/expat/oct08/forum/search.php;
        fastcgi_param  QUERY_STRING     do=getnew&f=$1;
        include        fastcgi_params0;
    }

I will do this after vacation.

> Thanks once again for replying. Have fun on your vacation!
> 
> Regards,
> Shri
> 
> 
> On Wed, 24 Dec 2008 20:05:48 +0300, Igor Sysoev <is at rambler-co.ru> wrote:
> > On Wed, Dec 24, 2008 at 11:32:46PM +0800, Shri @ GeoExpat.Com wrote:
> > 
> >> I'm trying to setup my first site, which uses wordpress, photopost
> > classifieds, vbulletin and gossamer threads (CGI Perl based) software -
> > along with some fairly simple posts.
> >>
> >> The site is being migrated from apache (frontend) + lightttpd (static)
> > to a nginx + fastcgi. I'm focused on migrating the PHP part first, as we
> > can always proxy the CGI requests to Apache.
> >>
> >> My nginx.conf looks like this (based on various bits and pieces found on
> > google and mailing lists).
> >>
> >> My questions are
> >>
> >> 1) Am I missing something obvious?
> >> 2) Why cant I get the Wordpress 404 to work correctly?
> >> 3) We need to exclude a couple of countries due to various illegal spam
> > issues. Is this http://wiki.codemongers.com/NginxHttpGeoModule the best
> way
> > to do it?
> >>
> >> Thanks in advance from someone who is VERY new to Nginx.
> > 
> > How do you separate wordpress, photopost classifieds, vbulletin, and
> > gossamer
> > on the site ? I see vbulletin's /forums, and some /scripts/
> > and /resources/Detailed/ only.
> > 
> > BTW, note that nginx does not support CGI.
> > 
> > If you use 0.6.34, then it's better to apply patch
> > http://sysoev.ru/nginx/patch.try_files.0.6.34
> > and use new "try_files" directive.
> > In 0.7.30 already has this functionality.
> > 
> > Then you can handle Wordpress using following configuration:
> > 
> >     location / {
> >         try_files      $uri  @wordpress;
> >     }
> > 
> >     location ~ \.php$ {
> >         try_files      $uri  @wordpress;
> > 
> >         fastcgi_param  SCRIPT_FILENAME  /path/to$fastcgi_script_name;
> >         ... other fastcgi_param
> >     }
> > 
> >     location @wordpress {
> >         fastcgi_pass   ...;
> > 
> >         fastcgi_param  SCRIPT_FILENAME  /path/to/index.php;
> >         ... other fastcgi_param
> >     }
> > 
> > This is replacement of these Apache rules:
> > 
> > #RewriteCond %{REQUEST_FILENAME} !-f
> > #RewriteCond %{REQUEST_FILENAME} !-d
> > #RewriteRule . /index.php [L]
> > 
> > 
> >> ---------------------
> >>     server {
> >>
> >>         listen  80;
> >>         server_name domain.com www.domain.com;
> >>
> >>         root /site/domain/dec08;
> >>
> >> #RewriteCond %{REQUEST_FILENAME} !-f
> >> #RewriteCond %{REQUEST_FILENAME} !-d
> >> #RewriteRule . /index.php [L]
> >>
> >>         error_page 404 =404 /index.php;
> >>
> >>         index index.php index.html index.htm;
> >>
> >>         location ~* \.(jpg|jpeg|gif|css|png|js|ico)$ {
> >>                 access_log      off;
> >>                 expires         30d;
> >>                 break;
> >>         }
> >>
> >>         ### Proxy CGI to Apache for now
> >>         location ^~ /scripts/ {
> >>               proxy_pass http://cgiserver;
> >>               proxy_set_header X-Real-IP $remote_addr;
> >>               proxy_set_header Host $host;
> >>               proxy_set_header X-Forwarded-For
> > $proxy_add_x_forwarded_for;
> >>         }
> >>
> >>         location ^~ /resources/Detailed/ {
> >>               proxy_pass http://cgiserver;
> >>               proxy_set_header X-Real-IP $remote_addr;
> >>               proxy_set_header Host $host;
> >>               proxy_set_header X-Forwarded-For
> > $proxy_add_x_forwarded_for;
> >>         }
> >>
> >> #### Deal with VBSEO Rules
> >> #RewriteRule ^((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$
> > vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 [L]
> >> #RewriteCond %{REQUEST_URI} !(admincp/|modcp/|cron)
> >> #RewriteRule ^((archive/)?(.*\.php(/.*)?)?)$ vbseo.php [L,QSA]
> >> #RewriteCond %{REQUEST_FILENAME} !-f
> >> #RewriteCond %{REQUEST_FILENAME} !-d
> >> #RewriteCond %{REQUEST_FILENAME}
> > !^(admincp|modcp|clientscript|cpstyles|images)/
> >> #RewriteRule ^(.+)$ vbseo.php [L,QSA]
> >>
> >>         location /forum/ {
> >>
> >>         rewrite ^/forum/getnew.html$ /forum/search.php?do=getnew last;
> >>         rewrite ^/forum/getnew([0-9]+).html$
> > /forum/search.php?do=getnew&f=$1 last;
> >>         rewrite ^/forum/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$
> > /forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;
> >>         rewrite ^/forum/unanswered.html$
> > /forum/search.php?do=process&replyless=1&replylimit=0&dontcache=1 last;
> >>         rewrite ^/forum/unanswered([0-9]+).html$
> >
> /forum/search.php?do=process&replyless=1&replylimit=0&dontcache=1&forumchoice=$1&childforums=1
> > last;
> >>
> >>         if ($request_filename ~ "\.php$" ) {
> >>                 rewrite ^/forum/(.*)$ /forum/vbseo.php last;
> >>         }
> >>
> >>         if (!-e $request_filename) {
> >>                 rewrite ^/forum/(.*)$ /forum/vbseo.php last;
> >>         }
> >>         }
> >>
> >>         location ~ \.php {
> >>
> >>                 set $script $uri;
> >>                 set $path_info "";
> >>
> >> #need this bit to work for classifieds friendly urls which need
> > path_info to be set
> >>
> >>                 if ($uri ~ "^(.+\.php)(/.+)") {
> >>                         set $script $1;
> >>                         set $path_info $2;
> >>                 }
> >>
> >>             fastcgi_pass   unix:/var/tmp/lighttpd/fastcgi-php.sock;
> >>             fastcgi_index  index.php;
> >>             fastcgi_param  SCRIPT_FILENAME  /site/expat/oct08$script;
> >>             fastcgi_param  PATH_INFO    $path_info;
> >>             include        fastcgi_params;
> >>         }
> >>
> >>         location ~ /\.ht {
> >>             deny  all;
> >>         }
> >>     }
> >>
> >> }
> > 
> > --
> > Igor Sysoev
> > http://sysoev.ru/en/
> 

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





More information about the nginx mailing list