web-dev-qa-db-ja.com

ApacheにプロキシしているNginxを使うとき、ホームページで404エラー

私は一般的に私のサーバーで静的コンテンツを提供するのに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:Debian 5/Lenny + Apache:2.2.9 + Nginx:0.7.65 + Wordpress:3.1.2

3
avggeek

両方のサーバーが同じポートをlistenしています。 Nginxは80を監視するように設定されていますが、Apacheにはports.confにない限り何も設定されていません。

あなたのNginxの設定で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;に変更

あなたのVhostsに

追加する

NameVirtualHost *:9000
Listen 9000

<VirtualHost>タグの上、またはports.confファイル(Nginxを使用しない他の仮想ホストがある場合は、それを仮想ホストの先頭に追加します。仮想ホストを次のように変更します。

<VirtualHost *9000>

2
Chris_O

1年以上経って私が自分の質問に答えるために戻ってきたことを誇りに思うべきか、または当惑させるべきかどうかはわかりません。それで、ついに私は今日この問題に取り組むためにいくらかの時間を見つけて、この構成をうまく動かすことに成功しました。私のオリジナルの設定にはいくつかの足りない文がありましたが、重大な変更は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-config.phpファイルに1行追加されています( Codex から取得)。

$_SERVER['HTTP_Host'] = $_SERVER['HTTP_X_FORWARDED_Host'];

この設定で、私は.htaccessを介したかなりのパーマリンクが正しく機能することをテストしました。

0
avggeek

私はあなたの設定をコピーし、私はそれらの404を手に入れました。 fastcgiを混同したようで、ApacheはfastcgiとWordPressの場所を混同しているようです。 fastcgiバイナリをWordPressから分離した途端、私はそれを機能させることができました。私の設定では、WordPressは/ var/www/wordpressにインストールされていましたが、これはドキュメントのルートから外れていました。しかし、私は http://domain.com/wordpress/ のように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設定の修正に役立つことを願っています、何か問題があるかどうか私に知らせてください。

0