I switched from Apache to Nginx web server. How do I configure permalinks under WordPress blog? How can I configure Nginx for WordPress permalinks using virtual hosting?

A permalink is nothing but the web address used to link to your blog content. The URL to each blog post or cms post should be permanent and never change. Hence the name permalink. WordPress has the ability capacity to create a custom URL structure for your blog posts and archives. There are three basic types of WordPress permalinks:

In the Settings > Permalinks panel, you can choose one of the more common permalink structures as follows:

Edit your nginx.conf file using a text editor such as nano command or vim command, run:

$ sudo vi /etc/nginx/conf/cyberciti.biz.conf

Edit/add/append the following location block within the server block:

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

If your WordPress blog is in /faq/ sub-directory, try :

##
## note path to /faq/index.php 
##
location /faq/ {
        try_files $uri $uri/ /faq/index.php?$args; 
}

Save and close the file. Restart/reload your nginx server, run:

$ sudo systemctl reload nginx

or

$ sudo /usr/sbin/nginx -s reload

Here is my sample config file:

# Upstream to abstract backend connection(s) for PHP.
upstream php {
  server unix:/run/php/php7.0-fpm.sock;
}
server {
    server_name www.cyberciti.biz;
    root        /var/www/html;
 
    location /faq/ {
         try_files $uri $uri/ /faq/index.php?$args;
    }
 
    #Add trailing slash to */wp-admin requests.
    rewrite /faq/wp-admin$ $scheme://$host$uri/ permanent;
 
    # Directives to send expires headers and turn off 404 error logging.
    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
       access_log off; log_not_found off; expires max;
    }
 
# Pass all .php files onto a php-fpm/php-fcgi server.
    index index.php;
    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
                return 404;
    }
# This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default)
    include /etc/nginx/fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass php;
 }
}
文章来自cyberciti.biz
作者: Vivek Gite