11

I recently switched from APACHE to NGINX. However, somewhere along the way NGINX started ignoring my query strings. For example, I use pagination like so:

http://example.com/index.php?page=5

This simply loads example.com as if the query string wasn't there.

Here's the configuration (edited as suggested by Nelson):

/etc/nginx/nginx.conf:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##

    #include /etc/nginx/naxsi_core.rules;

    ##
    # nginx-passenger config
    ##
    # Uncomment it if you installed nginx-passenger
    ##

    #passenger_root /usr;
    #passenger_ruby /usr/bin/ruby;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

/etc/nginx/sites-available/default:

server {
        root    /usr/share/nginx/www/;
        index   index.php;

        # Make site accessible from http://localhost/
        server_name localhost;

        # Pass PHP scripts to PHP-FPM
        location ~ \.php {
                include /etc/nginx/fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;
        }

        client_max_body_size 8M;
}
1
  • 1
    Editing the question such that the part that was the problem (see accepted answer) is not in there anymore? Seriously? Commented Jul 11, 2019 at 13:29

2 Answers 2

49

I was having the same problem. I changed the location section in my nginx virtual host file as below and it works fine for me.

location / {
   # try_files $uri $uri/ /index.php;
   try_files $uri $uri/ /index.php$is_args$args;
}
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for this! I had is_args missing and this fixed my issue where query strings were being ignored.
8

Just use this as Location :

location ~ \.php {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
}

To be more specific your following two lines are removing the query string:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;

8 Comments

Thanks for the help. I updated the file and restarted php5-fpm and nginx but the problem persists...
You may have some rewrite rule in place, post the full file, replacing site names or other personal data.
It seems the culprit is "location ~ \.php?$ {" do use the version I wrote on my answer, which is "location ~ \.php {"
Yes, I tried your version first but it still wasn't working, so I tried adding that back in just for the heck of it. Neither seems to work...not sure what's going on here...
How does setting the SCRIPT_FILENAME fastcgi_param remove the query string? I am seeing similar issues, but require this parameter.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.