使用nginx&php-fpm时,主页加载,但所有固定链接都是404

时间:2014-10-19 作者:avggeek

我一直在尝试解决我的nginx配置的一个奇怪问题,它似乎在应用Debian backports升级后不久就停止了工作。

我博客的登录页(http://blog.balaji-dutt.name/) 工作正常,但单击任何其他permalink(Example 1, Example 2) 引发nginx 404错误。

这是我的配置,现在基本上是the Codex:

server {
    listen 80;
    server_name blog.balaji-dutt.name;
    error_log /var/log/nginx/blog-error.log;
    access_log /var/log/nginx/blog-access.log combined;

    ## Your only path reference.
    root /var/www/wordpress;
    ## This should be in your http block and if it is, it\'s not needed here.
    index index.php;

    #Gzip
    include /etc/nginx/sites-available/gzip.conf;

    location / {
            # This is cool because no php is touched for static content. 
            # include the "?$args" part so non-default permalinks doesn\'t break when using query string
            try_files $uri $uri/ /index.php?$args;
    }

    # deny access to .htaccess files, if Apache\'s document root
    # concurs with nginx\'s one
    #
    location ~ /\\.ht {
            deny  all;
            access_log off;
    }

    location ~ \\.php$ {
            try_files $uri =404;

            fastcgi_split_path_info ^(.+\\.php)(/.+)$;
            include fastcgi_params;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #fastcgi_intercept_errors on;
            fastcgi_pass   127.0.0.1:9010;
    }
}

这是我在尝试访问永久链接时在nginx错误日志中看到的(http://blog.balaji-dutt.name/about/):

2014/10/19 03:35:09 [error] 21698#0: *76739 "/var/www/wordpress/about/index.php" is not found (2: No such file or directory), client: 174.36.241.151, server: blog.balaji-dutt.name, request: "GET /about/ HTTP/1.1", host: "blog.balaji-dutt.name", referrer: "http://blog.balaji-dutt.name/"
nginx似乎没有读取的location指令。php文件,但我一直无法理解为什么会出现这种情况。欢迎任何建议或帮助!

更新1-2014年10月20日nginx根目录列表:

    # ls -la /var/www/wordpress
total 256
drwxr-xr-x  5 blog   www-data  4096 Sep 28 03:09 .
drwxr-xr-x  8 www-data www-data  4096 Jan 15  2014 ..
-rw-r--r--  1 blog   www-data   418 Sep 25  2013 index.php
-rw-r--r--  1 blog   www-data 19930 May 16 22:23 license.txt
-rw-r--r--  1 blog   www-data  1764 Oct  5 01:17 nginx.conf
-rw-r--r--  1 blog   www-data  7192 Sep 28 03:09 readme.html
-rw-r--r--  1 blog   www-data 55174 Mar 27  2014 sitemap.backup.xml
-rw-r--r--  1 blog   www-data  7125 Mar 27  2014 sitemap.backup.xml.gz
-rw-r--r--  1 blog   www-data  4951 Sep 28 03:09 wp-activate.php
drwxr-xr-x  9 blog   www-data  4096 Dec 12  2013 wp-admin
-rw-r--r--  1 blog   www-data   271 Jan  8  2012 wp-blog-header.php
-rw-r--r--  1 blog   www-data  4946 Sep 28 03:09 wp-comments-post.php
-rw-r--r--  1 blog   www-data  2746 Sep 28 03:09 wp-config-sample.php
-rw-r--r--  1 blog   www-data   237 Dec 22  2013 wp-config.php
drwxr-x---  9 blog   www-data  4096 Sep 28 03:09 wp-content
-rw-r--r--  1 blog   www-data  2956 Sep 28 03:09 wp-cron.php
drwxr-xr-x 12 blog   www-data  4096 Sep 28 03:09 wp-includes
-rw-r--r--  1 blog   www-data  2380 Oct 24  2013 wp-links-opml.php
-rw-r--r--  1 blog   www-data  2714 Sep 28 03:09 wp-load.php
-rw-r--r--  1 blog   www-data 33043 Sep 28 03:09 wp-login.php
-rw-r--r--  1 blog   www-data  8252 Sep 28 03:09 wp-mail.php
-rw-r--r--  1 blog   www-data 11115 Sep 28 03:09 wp-settings.php
-rw-r--r--  1 blog   www-data 26256 Sep 28 03:09 wp-signup.php
-rw-r--r--  1 blog   www-data  4026 Oct 24  2013 wp-trackback.php
-rw-r--r--  1 blog   www-data  3032 May 16 22:23 xmlrpc.php
当我尝试访问URL时(http://blog.balaji-dutt.name/2013/481-nginx-apache-w3-total-cache-a-bad-combination/), 以下是nginx错误日志中显示的内容

*14 "/var/www/wordpress/2013/481-nginx-apache-w3-total-cache-a-bad-combination/index.php" is not found (2: No such file or directory), client: 174.36.241.151, server: blog.balaji-dutt.name, request: "GET /2013/481-nginx-apache-w3-total-cache-a-bad-combination/ HTTP/1.1", host: "blog.balaji-dutt.name", referrer: "http://blog.balaji-dutt.name/"
错误日志中的路径很混乱,因为后面的部分/var/www/wordpress/ 实际上是permalink,我不知道为什么会添加到请求中。

更新2-2014年10月25日[已解决]

结果表明,W3 Total Cache为磁盘增强型缓存创建的nginx配置文件将中断永久链接,但由于该文件在nginx reload上是只读的,因此在重新加载/重新启动nginx之前,该站点将一直工作。详细答案和发布的工作配置this answer.

1 个回复
最合适的回答,由SO网友:avggeek 整理而成

事实证明,如果启用了磁盘增强模式,则W3 Total Cache插入的nginx配置将中断永久链接,但只有在W3 Total Cache注入磁盘增强模式的配置后重新启动nginx时,才会中断永久链接。

基于birgire\'s 根据我的建议,我关闭了所有插件并检查了网站,网站开始正常工作。然后,我打开了W3 Total Cache和惊喜!该网站继续正常运行。它继续正常工作,直到我重新启动了nginx,此时nginx。W3 Total缓存创建的conf文件已加载,站点已中断。导致此行为的原因如下:

if ($w3tc_rewrite = 1) {
rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_rewrite$w3tc_ext" last;
}
重新启动nginx时,将加载上述行,并将所有URL重定向到中的缓存HTML文件wp-content/cache/page_enhanced. 但在重新启动时,HTML文件被清除,因此链接变为404。我提出的解决方案是首先更改W3 Total Cache通常写入的nginx配置文件的权限,以便它不会被覆盖。然后我更改了上述配置:

location / {
    rewrite ^(.*\\/)?w3tc_rewrite_test/?$ $1?w3tc_rewrite_test=1 last;
    if ($w3tc_rewrite = 1) {
        rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_rewrite$w3tc_ext" last;
    }
    try_files $uri $uri/ /index.php?$args;
} 
配置做了几件事-原始重写行被包装在一个位置块中,这样即使HTML文件没有定位,它也会返回到一个常规索引。php呈现模型。此外w3tc_rewrite_test 该行用于消除仪表板中的错误。我在一个单独的文件中这样做是为了集中我的W3 TC配置,所以有两个location \\ 我的网站的指令。

为了获得额外的积分,W3 Total config的minify模块的nginx配置也被破坏了。这是一个工作配置:

#Test Rewrites
    location ~ ^/wp-content/cache/minify/[^/]+/(w3tc.*)$ {
                   try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?w3tc_rewrite_test=$1;
           }
#End Test Rewrites
# BEGIN W3TC Minify core
    set $w3tc_enc "";
    location ~ ^/wp-content/cache/minify/(.+/[X]+\\.css)$ {
                try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?test_file=$1;
    }
    location ~ ^/wp-content/cache/minify/(.+\\.(css|js))$ {
                try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1;
    }

# END W3TC Minify core
由于许多Wordpress/W3 Total Cache信息依赖于版本,下面是上述配置的版本信息:W3 Total Cache v0。9.4/Wordpress 4.0/nginx 1.6.2-2 ~ bpo70+1


1https://rtcamp.com/wordpress-nginx/tutorials/single-site/w3-total-cache/

结束

相关推荐

Let me choose permalinks

我需要选择一个叫做“mysite”的永久链接。com/1418”,但wordpress不断在永久链接中添加“-2”。通常这意味着我已经有了一个名为“相同”的页面,它位于垃圾箱或其他地方。但这里的情况似乎并非如此。我尝试在设置中重置永久链接,这也没有帮助。我如何使用数字作为页面名称permalink,而不用wordpress在permalink中添加“-2”。