404在使用到APACHE的Nginx代理时主页上出现错误

时间:2011-05-22 作者:avggeek

我通常使用Nginx在服务器上提供静态内容,Apache使用PHP-FPM处理PHP内容。然而,我无法显示Wordpress的博客主页,我已经尝试了在web上找到的所有配置示例,但运气不好。

这是我的Nginx配置:

server {

        listen   XXX.XXX.XXX.XXX:80;
        server_name wptest.mydomain.com;

    access_log  /var/log/nginx/testblog_access.log combined;
    error_log /var/log/nginx/testblog-error.log;

    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location / {
                    proxy_pass http://127.0.0.1:80;
    }

    location = /50x.html {
            root   /var/www/nginx-default;
    }

    # No access to .htaccess files.
    location ~ /\\.ht {
            deny  all;
    }

}
我的Apache配置如下:

<VirtualHost 127.0.0.1>
    ServerName wptest.mydomain.com
    ServerAdmin [email protected]
    LogLevel warn
    ErrorLog /var/log/apache2/testblog-error.log
    CustomLog /var/log/apache2/testblog-access.log combined

    Options +FollowSymLinks +ExecCGI -Indexes -MultiViews
    AddHandler php-fastcgi .php
    Action php-fastcgi /wordpress
    Alias /wordpress /var/www/wordpress
    FastCgiExternalServer /var/www/wordpress -host 127.0.0.1:9000
    RewriteEngine on

    DocumentRoot /var/www/wordpress
    DirectoryIndex index.php

                    <Directory />
                            DirectoryIndex index.php
                            AllowOverride All
                            Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
                    </Directory>

                    <Directory /var/www/wordpress>
                            AllowOverride All
                            Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
                    </Directory>
</VirtualHost>
我无法查看“http://wptest.mydomain.com/“或”http://wptest.mydomain.com/wp-admin“但是”http://wptest.mydomain.com/wp-login.php“行得通。我做错了什么?

版本信息:+OS:Debian5/Lenny+Apache:2.2.9+Nginx:0.7.65+Wordpress:3.1.2

3 个回复
SO网友:Chris_O

两台服务器正在侦听同一端口。您将Nginx设置为侦听80,除非它位于您的端口中,否则不会为Apache设置任何内容。形态。

您的代理也将在Nginx conf中传递到Apache端口80。

在Nginx conf更改中

proxy_pass http://127.0.0.1:80;

proxy_pass http://127.0.0.1:9000;

改变listen XXX.XXX.XXX.XXX:80;listen 80;

在你的虚拟主机中

添加

NameVirtualHost *:9000
Listen 9000
高于<VirtualHost> 标记或在端口中。conf文件(如果您有其他不使用Nginx的vhost,请将其添加到vhost的顶部。将虚拟主机更改为如下所示:

<VirtualHost *9000>

SO网友:Hameedullah Khan

我复制了你的配置,得到了404。似乎您混淆了fastcgi,Apache不知道在哪里可以找到fastcgi和WordPress。当我将fastcgi二进制文件从WordPress中分离出来后,我就能够让它工作了。在我的设置中,WordPress安装在/var/www/WordPress中,它不在文档根目录下,我的文档根目录不在/var目录下。但我可以通过以下方式访问WordPresshttp://domain.com/wordpress/ 因为以下别名。

Alias /wordpress /var/www/wordpress
然后我在/var/www中的WordPress之外创建了一个fastcgi目录

mkdir /var/www/fastcgi
然后,我将php5 cgi二进制文件链接到此目录:

ln -s /usr/bin/php5-cgi /var/www/fastcgi/
我分离了php5 cgi,因为我不喜欢在可通过web服务器访问的目录下有一个二进制文件的想法。

然后,我按照以下方式配置Apache:

Alias /wordpress /var/www/wordpress
Alias /fastcgi   /var/www/fastcgi

FastCgiExternalServer /var/www/fastcgi -host 127.0.0.1:9000
<Directory /var/www/wordpress>
    AllowOverride All
    AddHandler php-fastcgi .php
    Action php-fastcgi /fastcgi/php5-cgi
    AddType application/x-httpd-php .php
    DirectoryIndex index.php

   Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
</Directory>

<Location /fastcgi>
    SetHandler fcgid-script
    Options +ExecCGI
</Location>
它开始工作了。希望这将帮助您修复Apache配置,如果有任何问题,请告诉我。

SO网友:avggeek

一年多后,我回来回答我自己的问题,我不知道我应该感到骄傲还是尴尬。因此,我今天终于找到了一些时间来解决这个问题,并设法使这个配置正常工作。原来在我的原始配置中缺少了一些语句,但关键的更改是在wp config中。php。要将所有内容整合在一起,请从我的nginx配置开始(它几乎完全从nginx wiki中删除):

server {

        listen   XXX.XXX.XXX.XXX:80;
        server_name wptest.mydomain.com;
        error_log /var/log/nginx/wp-error.log;

        ## 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;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        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;
        }

        location ~ \\.php$ {
                proxy_set_header X-Real-IP  $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://127.0.0.1:80;
        }

        location ~* \\.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }

}
接下来,我的Apache配置:

<VirtualHost 127.0.0.1>
        server_name wptest.mydomain.com
        ServerAdmin [email protected]
        LogLevel warn
        ErrorLog /var/log/apache2/wp-error.log
        CustomLog /var/log/apache2/wp-access.log combined

        AddType application/x-httpd-fastphp .php
        AddHandler php-fastcgi .php
        Action php-fastcgi /fastcgi
        Alias /fastcgi /var/www/wordpress
        FastCgiExternalServer /var/www/wordpress -host 127.0.0.1:9000

                        DocumentRoot /var/www/wordpress

                        #Site Directives
                        RewriteEngine on
                        Options +FollowSymLinks +ExecCGI -Indexes -MultiViews

                        <Directory />
                          AllowOverride None
                        </Directory>

                        <Directory /var/www/wordpress/>
                                AllowOverride Limit FileInfo AuthConfig
                                order allow,deny
                                allow from all
                        </Directory>

</VirtualHost>
最后,wp配置中的一个额外行。php文件,使其能够正常工作(摘自Codex)

$_SERVER[\'HTTP_HOST\'] = $_SERVER[\'HTTP_X_FORWARDED_HOST\'];
通过这种配置,我已经测试了相当长的permalinks via。htaccess工作正常。

结束

相关推荐

如果你使用Nginx,你会面临什么问题

WordPress非常占用内存,我一直在考虑使用nginx而不是apache。在这样做之前,一个主要的考虑因素是是否有任何插件会停止工作。我已经测试了一些,它们似乎有效,但我需要找出是否有任何可能损坏的。