Wordpress / wp-admin nginx和apache,尝试下载文件

时间:2014-03-26 16:00:13

标签: php wordpress apache nginx

我们最近设置了一台新服务器。它是一个自定义的php MVC框架,这是位于根目录中的.htaccess:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule \.(ico|css|jpeg|jpg|gif|png|js|pdf)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L]
</IfModule>

根文件夹中有一个名为blog的目录。这是wordpress安装的地方。

我们只是使用apache来处理所有问题,一切正常。但是,我们已经获得了更多的流量,现在正在使用nginx来服务静态内容,而apache服务于其他所有内容

apache config:

<VirtualHost *:8080>
    ServerAdmin example@example.com
    ServerName example.com
    ServerAlias www.example.com example.com
    DocumentRoot /srv/www/example.com/public_html/
    ErrorLog /srv/www/example.com/logs/error.log
    CustomLog /srv/www/example.com/logs/access.log combined

<IfModule mpm_itk_module>
    AssignUserId webadmin www-data example
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    rewritecond %{http_host} ^www.example.com [nc]
    rewriterule ^(.*)$ http://example.com$1 [r=301,nc,qsa]
</IfModule>
</VirtualHost>

nginx config:

server {
    listen 80;
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    listen 80;
    server_name example.com;
    root /srv/www/example.com/public_html;
    index index.php;

    # Add trailing slash to */wp-admin requests.
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    location ~* ^.+\.(?:js|css|jpe?g|htc|xml|otf|ttf|eot|woff|gif|png|svg|ico|pdf|html|htm)$ {
            access_log off;
            expires 30d;
            tcp_nodelay off;
            open_file_cache max=3000 inactive=120s;
            open_file_cache_valid 45s;
            open_file_cache_min_uses 2;
            open_file_cache_errors off;
    }

    location / {
            try_files $uri @proxy;
    }

    location @proxy {
            include /etc/nginx/proxy_params;
            proxy_pass http://127.0.0.1:8080;
    }

    location ~ /\.ht {
            deny all;
    }

}

博客上的所有内容都是正确的。你可以去家庭wordpress页面,博客文章,发表评论等。

然而,唯一不起作用的是wordpress&#39;可湿性粉剂管理员

当我们尝试访问此页面时:example.com/blog/wp-admin

浏览器将源代码下载为wp-login.php

我不确定为什么会这样,我不知所措。我在尝试配置nginx之前曾经简要地看过这个,它与index.php有关吗?

任何人都有任何想法。

博客目录,包含所有标准的wordpress安装,包括wordpress的默认.htaccess

安装了php,就像我说的一切正常,除了wp-admin,它看起来像是wp-login,在这种情况下nginx / apache尝试下载实际文件。

这可能是我正在研究的哑剧问题

2 个答案:

答案 0 :(得分:1)

我认为这可能是你的问题:

location / {
        try_files $uri @proxy;
}

这将首先测试文件$uri是否存在,如果存在,请提供服务。具体做法是:

当您第一次浏览/wp-admin时,WordPress会发现您尚未登录并将您重定向到/wp-login.php。因此$uri/wp-login.php,并且由于该文件确实存在,因此nginx继续进行并提供服务。

我的解决方案是添加这个,但我不确定这是最好的方法:

location ~* \.php$ {
    try_files @ @proxy;
}

这会将对PHP资源的所有请求传递给您的代理。 “@”是必需的,因为try_files至少需要一个文件参数;假设实际上不存在这样的文件。

我已经看到try_files的另一个用途是在野外使用类似的虚拟文件。我认为这可以用rewrite完成,但无法理解它。

答案 1 :(得分:0)

我认为这里可能存在两个问题之一。

问题A: 由于某种原因,您没有安装PHP。修复很简单,只需使用您的特定发行版的任何安装包安装它。

和/或问题B: 您设置的nginx服务器有可能没有为PHP设置正确的MIME类型,因此它只假设它是一个文本文件。我不完全确定,我不是Nginx的主人,但根据我的知识,这是我能想到的。