How to solve the problem of "405 not allowed"?

Nick Pearson nick.pearson at
Fri Jan 29 22:30:16 MSK 2010

I know 'if' is evil, and in general shouldn't be used inside a
location block, but I needed this ability as well and have been using
the following without any trouble for a couple years.

upstream app_servers {
  server  localhost:3000;

server {

  # set proxy settings here (not allowed in 'if')
  proxy_set_header  X-Real-IP  $remote_addr;

  location / {
    if ($request_method = POST) {
      proxy_pass  http://app_servers;
    try_files  $uri  @app;

  location @app {
    proxy_pass  http://app_servers;


If anyone has any better ideas, I'd love to hear them.  So far, I
haven't been able to find any without having to patch the source.

While we're on the topic, I know there's been talk of allowing POST
requests to static files, but I don't remember a clear behavior being
defined.  When added to nginx, will this simply serve the static file
as though a GET request was made?  Ideally, one would be able to
specify that POST requests should always be proxied to an upstream
(which is what my config above does).

Maybe something like this in the config:

  # handle just like a GET request
  allow_static_post  on;

  # proxy to upstream
  allow_static_post  proxy_pass  http://app_servers;

I don't use FCGI or PHP, so I'm not sure how the config would look for
those, but you get the idea.


On Fri, Jan 29, 2010 at 10:41 AM, kleinchris <nginx-forum at> wrote:
> Can't edit my post...
> Here is a debug log, when i do it like this:
> error_page 405 =200 @405;
>        location = @405 {
>                root /var/www/vhosts/soulreafer;
>        }
> nginx version: 0.8.32
> Posted at Nginx Forum:,2414,47301#msg-47301
> _______________________________________________
> nginx mailing list
> nginx at

More information about the nginx mailing list