3

Is it possible in the nginx.conf file to limit incoming POST requests to just a few pages?

Say I only want to allow post requests on signup.php and login.php but not on all other possible pages.

Reason why I ask is that my server often gets flooded with POST requests on random pages, which causes unnecessary load.

I tried blocking it in PHP, but in this case nginx still has to process and accept the full POST data. This i'm trying to prevent.

1 Answer 1

4

You'll need to create multiple locations to handle the different situations:

# including your fastcgi params at a higher level
# allows them to be inherited in both locations
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;

# regex locations are matched in order, so this will handle
# /anything/signup.php and /anything/login.php
# If you want to just have /signup.php and /login.php,
# add ^ before the / or you could split this into two more:
# location = /signup.php abd location = /login.php
location ~ /(signup|login)\.php$ {
  fastcgi_pass php;
}

# this will handle the rest of the php requests
location ~ \.php$ {
  # Only allow GET and HEAD requests for all other php scripts
  limit_except GET HEAD {
     allow 1.1.1.1/32; #trusted ip
     deny all;
  }
  fastcgi_pass php;
}
1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .