8

I installed nginx on Ubuntu Hardy and immediately realized that the PHP scripts were getting empty request arrays, ie whether GET or POST nothing was coming through, even the $_REQUEST array was empty.

When I switch back to Apache it was all fine.

The installation nginx version is 0.6.35-0ubuntu1.1~hardy1 and PHP is PHP Version 5.2.4-2ubuntu5.10.

What could be wrong?

vfclists
  • 1,562
  • 5
  • 20
  • 36

4 Answers4

6

Check if this set in your "location"-section for your fastcgi-module

 fastcgi_param  QUERY_STRING     $query_string;

http://wiki.nginx.org/NginxHttpFcgiModule

funkdoobiest
  • 140
  • 2
  • 7
  • I disable the basic fastcgi_params file from inclusion, because I didn't know how may were needed. Worth learning about though. – vfclists Aug 16 '10 at 20:33
6

It's a feature of the try_files command in nginx that the query_string is not passed automatically to the rewritten file but instead must be passed explicitly. Because of this _$SERVER['QUERY_STRING'] is always empty, and so the the variables $_REQUEST and $_GET are also not set.

From the Nginx documentation:

Unlike with rewrite, $args are not automatically preserved if the fallback is not a named location. If you need args preserved, you must do so explicitly:

try_files $uri $uri/ /index.php?q=$uri&$args;

or with just the arguments

try_files $uri $uri/ /index.php?$args;

If you want to guarantee to get the original arguments then use $query_string which is the same as $args except that $query_string is read-only.

HopelessN00b
  • 53,385
  • 32
  • 133
  • 208
Danack
  • 1,186
  • 1
  • 14
  • 27
0

It can happen if Apache has LimitRequestBody (see core) or SecRequestBodyLimit (see mod_security) set and the request body is larger than said limit.

JellicleCat
  • 284
  • 1
  • 3
  • 15
0

Try to check the variables_order in php config file used by nginx.

lg.
  • 4,579
  • 3
  • 20
  • 20