We'll create fresh WordPress site with nginx Compatibility installed. You have 20 minutes to test the plugin after that site we'll be deleted.
The plugin solves two problems:
wp_redirect
. Thus, all 301 redrects become 302 redirectswp_redirect
when it detectsmod_rewrite
is not loaded (which is the case for nginx asmod_rewrite
is loaded and it is OK to use pretty permalinks.The plugin does not require any configuration. It just does its work.
You won’t notice it — install and forget.
WARNING: nginx must be configured properly to support permalinks.
nginx 0.7.32 and higher:
server {
server_name mysite.com;
root /path/to/blog;
index index.php;
error_page 404 = @wordpress;
log_not_found off;
location ^~ /files/ {
rewrite /files/(.+) /wp-includes/ms-files.php?file=$1 last;
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_NAME /index.php;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_index index.php;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ^~ /blogs.dir/ {
internal;
root /path/to/blog/wp-content;
}
}
Older versions:
server {
server_name mysite.com;
root /path/to/blog;
index index.php;
log_not_found off;
error_page 404 = @wordpress;
location ^~ /files/ {
rewrite /files/(.+) /wp-includes/ms-files.php?file=$1 last;
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_NAME /index.php;
}
location ~ \.php$ {
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php break;
break;
}
fastcgi_index index.php;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ^~ /blogs.dir/ {
internal;
root /path/to/blog/wp-content;
}
}
Of course, do not forget to replace ...
in fastcgi_pass
with the address/socket
php-cgi is listening on and replace /path/to/blog with the actual path.
Also please note that the path in SCRIPT_NAME
should be relative to the DOCUMENT_ROOT
(root
directive).
Thus, if your WordPress blog resides in http://example.com/blog/
, root
is set to /path.to/example.com
,
SCRIPT_NAME in location @wordpress
will be /blog/index.php
.
Multi-Site Configuration: the above configs work perfectly with WordPress MultiSite. To make downloads faster, consider adding this line to wp-config.php
:
define('WPMU_ACCEL_REDIRECT', true);
Need help with configuring nginx? Contact me: vkolesnikov at odesk dot com, I will try to help you.