私は一般的に私のサーバーで静的コンテンツを提供するのに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
両方のサーバーが同じポートを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>
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を介したかなりのパーマリンクが正しく機能することをテストしました。
私はあなたの設定をコピーし、私はそれらの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設定の修正に役立つことを願っています、何か問題があるかどうか私に知らせてください。