質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

解決済

2回答

5210閲覧

Nginxのプロキシキャッシュを効かせたところトップページ以外が404notfoundになって困ってます

ootaki55

総合スコア14

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

0クリップ

投稿2015/11/14 18:10

はじめまして

■ 環境
・ubuntu 14.04
・さくらvps
・PHP-fpm
・Nginx
・Mysql
・Wordpress

Nginxのプロキシーキャッシュを設定していたのですが、
一通り設定が終わったところで

トップページ以外
(wordpress.com/archive/n)
(wordpress.com/tag/hoge)
が404になってしまいました。
try filesで解決すると思ったのですが、しませんでした。

参考にしたブログです。
さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず

良かったら力を貸してください。お願いします。

##nginx.conf

lang

1user www-data; 2worker_processes 1; 3 4pid /var/run/nginx.pid; 5 6events { 7 worker_connections 1024; 8} 9 10http { 11 include /etc/nginx/mime.types; 12 default_type application/octet-stream; 13 14 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 15 '$status $body_bytes_sent "$http_referer" ' 16 '"$http_user_agent" "$http_x_forwarded_for"'; 17 18 sendfile on; 19 20 keepalive_timeout 5; 21 22 gzip on; 23 gzip_disable "MSIE [1-6]\."; 24 25 proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=czone:4m max_size=50m inactive=120m; 26 proxy_temp_path /var/tmp/nginx; 27 proxy_cache_key "$scheme://$host$request_uri"; 28 proxy_set_header Host $host; 29 proxy_set_header X-Real-IP $remote_addr; 30 proxy_set_header X-Forwarded-Host $host; 31 proxy_set_header X-Forwarded-Server $host; 32 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 33 34 # Load config files from the /etc/nginx/conf.d directory 35 include /etc/nginx/conf.d/*.conf; 36 include /etc/nginx/sites-enabled/*; 37}

##wordpress.conf

lang

1 upstream backend { 2 ip_hash; 3 server 127.0.0.1:8080; 4 } 5 6 server { 7 listen 80; 8 server_name wordpress.com; 9 10 location /var/www/wordpress.com/wp-admin/ { 11 proxy_pass http://backend; 12 } 13 14 try_files $uri $uri/ /index.php?q=$uri&$args; 15 16 location / { 17 if ($http_user_agent ~* '(DoCoMo|J-PHONE|Vodafone|MOT-|UP\.Browser|DDIPOCKET|ASTEL|PDXGW|Palmscape|Xiino|sharp pda browser|Windows CE|L-mode|WILLCOM|SoftBank|Semulator|Vemulator|J-EMULATOR|emobile|mixi-mobile-converter)') { 18 set $mobile 1; 19 } 20 if ($http_user_agent ~* '(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry)') { 21 set $mobile 2; 22 } 23 if ($http_cookie ~* "comment_author_[^=]*=([^%]+)%7C|wordpress_logged_in_[^=]*=([^%]+)%7C") { 24 set $do_not_cache 1; 25 } 26 proxy_no_cache $do_not_cache; 27 proxy_cache_bypass $do_not_cache; 28 proxy_cache czone; 29 proxy_cache_key "$scheme://$host$request_uri$is_args$args$mobile"; 30 proxy_cache_valid 200 301 302 10m; 31 proxy_cache_valid 404 5m; 32 proxy_cache_use_stale error timeout invalid_header updating 33 http_500 http_502 http_503 http_504; 34 proxy_pass http://backend; 35 proxy_redirect http:/wordpress.com:8080/ /; 36 } 37 38 # location ~ /purge(/.*) { 39 # allow 127.0.0.1; 40 # allow 160.16.94.81; 41 # deny all; 42 # proxy_cache_purge czone "$scheme://$host$1$is_args$args$mobile"; 43 # } 44 } 45 46 server { 47 listen 8080; 48 server_name wordpress.com; 49 50 location / { 51 root /var/www/wordpress.com/; 52 index index.html index.htm index.php; 53 } 54 55 error_page 404 /404.html; 56 location = /404.html { 57 root /usr/share/nginx/html; 58 } 59 60 error_page 500 502 503 504 /50x.html; 61 location = /50x.html { 62 root /usr/share/nginx/html; 63 } 64 65 location ~ \.php$ { 66 root /var/www/wordpress.com/; 67 fastcgi_pass unix:/var/run/php5-fpm.sock; 68 fastcgi_index index.php; 69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 70 include fastcgi_params; 71 } 72 73 location ~ /\.ht { 74 deny all; 75 } 76 }

wordpress.conf の
location ~ .php$ 以降の設定がクサイなと思ってて、
結構調べたのですが、わかりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

たぶん、"/archive/n" を "?p=/archive/n" にリライトする設定が必要なのだと思います。
参考ブログの後半に記載されている、下記設定箇所に該当します。

server {
listen 8080;
server_name example.com;
#
location / {
root /var/www/nginx;
index index.html index.htm index.php;
if (-f $request_filename) {
break;
}
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}
}

投稿2015/11/16 02:39

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ootaki55

2015/11/16 03:10

回答、ありがとうございます。 無事見れました、問題解決です。ありがとうございます。 今まで(プロキシーキャッシュの設定前)はリライトしないでも/archive/は見れてたのに 何故急にリライトが必要なのだ… って問題がきになるので、知らべてみようと思います。 本当にありがとうございました!
guest

0

Wordpress はデフォルトの状態でも .htaccess が存在していると思います。「パーマネントリンク」などで使用されています。
この.htaccessはそもそもが apache の httpd.conf の設定の一部を外部化したものなので、mod_rewite 機能などは apache のものです。NginX は .htaccess を解釈できないため、この .htaccess 相当の機能をNginX 用に書き換える必要があります。

htaccessファイルはnginxのに変換

ツールもあるようですので、コンバートして利用してみてはいかがでしょうか?
コンバートされた rewite に相当する部分を、wordpress.conf に追記してください。

投稿2015/11/14 18:16

編集2015/11/14 18:26
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ootaki55

2015/11/15 07:05

Kosuke_Shibuya 様 回答ありがとうございます。 .htaccess は、存在していませんでした。 考え方としては、 wordpress.com/archive/n にリダイレクトうるように nginxの設定をするということですか?
退会済みユーザー

退会済みユーザー

2015/11/15 07:09

> wordpress.com/archive/n にリダイレクトうるようにnginxの設定をするということですか? そうです。 おそらく、Wordpress の管理画面に「パーマリンクの設定」があると思います。 本来デフォルトでは、name=???&tag=NNNNN のようなパラメータを変更する設定がありますね。これをNginXでリライトできるように設定します。
ootaki55

2015/11/15 07:33

回答ありがとうございます。 http://wordpress.com/?p=n がデフォルトのようなので、 試しに記事IDをnに置き換えてアクセスしてみたところ、 wordpress.com/archive/n にアクセスされたので リダイレクトの動きはできていたようです!
退会済みユーザー

退会済みユーザー

2015/11/15 07:36

ん?問題は解決できたということでよろしいですか?
ootaki55

2015/11/15 07:50

字、足らずでしたすみません。 URLは変わってリダイレクトはできていたのですが、 ページは404のままでした。
退会済みユーザー

退会済みユーザー

2015/11/15 07:53

NginX, php-fpm, phpそれぞれのログをみるなりで、原因を特定することですね。
ootaki55

2015/11/15 08:07

ありがとうございます、 色々調べて原因見つけます。
退会済みユーザー

退会済みユーザー

2015/11/15 08:10

先ほど、.htaccess は見つからなかったということですが、ないはずはないんですよねぇ…どうやって確認しました?
ootaki55

2015/11/15 08:25

/var/www/wordpress.com/ にて、 ls -la したところ.htaccessはありませんでした。
退会済みユーザー

退会済みユーザー

2015/11/15 08:46 編集

http://wpdocs.osdn.jp/Settings_Permalinks_SubPanel パーマリンクは.htaccess機能必須なんですけどね…変ですね。 .htaccess でなくても、virtualhost などで設定はされていると思います。
ootaki55

2015/11/16 03:07

ありがとうございます。 .htaccess、virtualhost についてももっと勉強します。 というか、どうやってサーバー、wordpressが動いてるからもっとしったほうがいいなと感じました。。。 今回は、実際にコードを貼っていただいた TaichiYanagiya 様の回答で解決しましたが 結果、Kosuke_Shibuya 様の最初に仰っていたことと同じ内容のことをしたと思うので まず Kosuke_Shibuya様に回答していただいた時点で 自分がもっと調べられていれば素早く解決にいたったんだなと感じています。 今回は、回答いただきありがとうございました。 もっと勉強します!
退会済みユーザー

退会済みユーザー

2015/11/16 04:52

> どうやってサーバー、wordpressが動いてるからもっとしったほうがいいなと感じました それはそうかもしれないけど、問題解決に必要なのは知識じゃなくて、スキルですから…。 「おかしい」と思った時に、漫然と設定ファイルを眺めても解決しません。まずすべきことは「ログ」を調べることだと思うんですよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問