sending POSTs to backend

Maxim Dounin mdounin at mdounin.ru
Wed Sep 18 14:22:21 UTC 2013


Hello!

On Wed, Sep 18, 2013 at 06:17:05AM -0400, michelem wrote:

> Hello folks,
> 
> I use nginx in front of a django/fastcgi application, and we serve a subset
> of the URLs of this webapp statically.
> 
> I use try_files to determine what's served statically and what goes to the
> backend.
> 
> Some of these URLs, however, contain forms and are at the same time source
> and targets for them. The former can be served statically, while the latter
> should hit the backend.
> 
> A simple "if ($request_method) { directive; }" would work, but I find no
> effective "directive" to send the request to the backend.
> 
> Our basic setup looks like this:
> 
> server {
>     root /site/static_files/;
>     try_files $uri $uri/ $uri/index.html @appsrv;
> 
>     if ($request_method = POST) {
>         # solution 1: try_files /var/emtpy/.foobar @appsrv

This isn't going to work. 

>         # solution 2: fastcgi_pass 1.2.3.4:1234;

This should work as long as you'll move the check into some 
location.  It also might result in various problems in case of 
more ifs added, see http://wiki.nginx.org/IfIsEvil.

Adding a "location /" is a good idea anyway.

>         # all of the above fail: directive not allowed here
>         # solution 3: return 321; (+ define error_page 321 in server {})
>         # I can't get the above handle correctly good and bad responses from
> the appsrv

You mean - other error_pages doesn't work for you then?  Try 
recursive_error_pages, see here:

http://nginx.org/r/recursive_error_pages

>     }
> 
>     location @appsrv {
>         include /usr/local/etc/nginx/fastcgi_params_django;
>         fastcgi_pass 1.2.3.4:1234;
>     }
> }
> 
> any suggestion to divert POST requests to the given named location?

See above.  I would recommend "return + error_page" variant.

-- 
Maxim Dounin
http://nginx.org/en/donation.html



More information about the nginx mailing list