Search code examples
phpwordpressnginxfastcgisubdirectory

Nginx Wordpress Configuration, PHP file in theme directory is not passed to FastCGI


I am new to NGINX configs so bear with me. Below is my configuration which works fine for the whole site:

server {
listen ...;
server_name  funkyoslo.no;

#charset koi8-r;
#access_log  /var/log/nginx/log/host.access.log  main;

location / {
    root   /usr/share/nginx/funkyoslo.webbr.org/html;
    index  index.php index.html index.htm;
    try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/funkyoslo.webbr.org/html/;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/funkyoslo.webbr.org/html/$fastcgi_script_name;
    include        fastcgi_params;
}
}

However, I am trying to load the file /wp-content/themes/funkyoslo/load-songs.php and it's giving me a 500 internal server error. I've checked the error logs and evidently the file isn't passed to FastCGI at all.

I tried adding the following block to no avail:

location ~ .*/wp-content/themes/funkyoslo/.*\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /usr/share/nginx/funkyoslo.webbr.org/html/wp-content/themes/funkyoslo/$fastcgi_script_name;
    include         fastcgi_params;
}

Any help is greatly appreciated!


Solution

  • Look I don't know what's wrong with your config but try this and hopefully it should work, this is the minimal config.

    Notes:

    • Removed the index to the server block level, check link to know why
    • Removed root to server block level, check link to know why
    • Removed all extra config from the php block level, by trials I realised that I only need those two I've written.
    • Added http:// to fastcgi_pass, I don't know if it's really required but I got used to writting it this way.

    Edit: Ok apparently I don't need the http://, I just checked.

    -

    server {
        listen 80;
        server_name  funkyoslo.no;
        root /usr/share/nginx/funkyoslo.webbr.org/html;
        error_page 500 502 503 504 /50x.html;
        index index.php index.html index.htm;
        location / {
            try_files $uri $uri/ /index.php$request_uri;
        }
        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_pass http://127.0.0.1:9000;
        }
    }