WordPress Permalink configuration for Nginx

Tags: Nginxpermalinksreverse proxywordpress

Published on: September 27, 2014 by George K.

WordPress Permalink configuration for Nginx


On Nginx WordPress Permalinks we came across an issue where all links in a WP/Osclass site throws 404 error. This is a typical behaviour of WP/Osclass permalinks configuration issue.

The first step is to confirm it is a Nginx WordPress permalinks issue.

The configuration file for Nginx is /etc/nginx/nginx.conf and it specified the log file for Nginx as /var/log/nginx/error.log

The error log contained the following information

 2014/02/03 06:17:04 [error] 18596#0: *1538 "/home/user/public_html/demo/index.php" is not found (2: No such file or directory), client: xx.xx.xx.xx, server:, request: xxxxxx/xxxx/xx " host: "" 

The folder “demo” was missing in the document root.

The .htaccess file had the following entries for WP permalink activation

<IfModule mod_rewrite>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Hower Nginx won’t accept .htaccess file and the permalinks specified in the file will not applied. Hence  custom redirect rules are to be added in the Nginx configuration file.

Let us have detailed look into the configuration file. The Virtual host entry configuration details specified in /etc/nginx/nginx.conf are given below

# Virtual Host Configs
include /etc/nginx/conf.d/*.conf;
include /opt/pifpm/sites-enabled/*.conf;
include /opt/pifpm/sites-proxied/*.conf;

As mentioned in the above entries the active virtual host entries are stored in the location /opt/pifpm/sites-enabled/

root@hostname[/opt/pifpm/sites-enabled]# ls -l
total 40
drwxr-xr-x. 2 root root 4096 Feb 3 06:26 ./
drwxr-xr-x. 17 root root 4096 Jan 15 03:43 ../
-rw-r--r--. 1 root root 2202 Jan 10 17:09
-rw-r--r--. 1 root root 2140 Jan 7 00:12
-rw-r--r--. 1 root root 2458 Jan 10 17:09


The domain in question is, hence the configuration is . Let us have a look into it. The most relevant entries are given below

server {
listen xx.xx.xx.xx:80; ## listen for ipv4;

root /home/user/public_html/demo;
include /opt/pifpm/nginx.include.d/;

access_log /usr/local/apache/domlogs/;

# Server name and its aliases

include /opt/pifpm/nginx.include.d/;

location / {include /opt/pifpm/nginx.include.d/;}


As you can see from the configuration, it contains the IP, DocumentRoot, access_log location ,server name etc.

The permalink redirect rule for Nginx is given below

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

Add this to the location directive include file ie /opt/pifpm/nginx.include.d/

Once this is done, restart Nginx

/etc/init.d/nginx restart

If you receive the following error

# /etc/init.d/nginx restart
nginx: [emerg] "try_files" directive is duplicate in /opt/pifpm/nginx.include.d/
nginx: configuration file /etc/nginx/nginx.conf test failed

It could be an issue with the directive. In such case, you need to  provide complete directive in the include file as given below

location / {try_files $uri $uri/ /index.php?$args;}

Once this is done, restart the  webserver

[~]# /etc/init.d/nginx restart

You can safely ignore the warnings and can proceed with the check. In my case, it worked like a charm

Get 24/7 expert server management

Category : Apache, Howtos, Troubleshooting

George K.

George K.

George started his career in web hosting and Linux technical support in the year 2004 and is with SupportSages since 2009. He has keen interest in server optimizations, custom security solutions, hacked server recovery, cyber forensic and high availability fail over system design and implementation. George loves long drives and is passionate about art and literature.

You may also read:


Add new commentSIGN IN

Let's Connect


Your Cart

Cart is empty.

Send this to a friend