こんにちは。
Nginxの設定についてお聞きしたいです。
###前提・実現したいこと
現在PHPフレームワーク( Codeigniter )を用いてウェブアプリケーションの開発を行っております。
そのなかでWebサーバーのドキュメントルートにない画像ファイルを取得して、ユーザーにアクセス権があるかどうかを確認した上でPHPでReadfile関数を用いてブラウザに出力するという処理を実装しました。
このとき、CodeIgniterのルーティング機能を用いて、たとえばurl.com/viewimage/abcdef.jpgというURLでアクセスされた時にはViewimage関数(自作)の第一引数としてabcdef.jpgを渡してPHP側でファイルを探すという方法を取っています。
開発環境のApache2.4 + PHP-FPM(7.0)を使用したサーバーでは、.htaccessに
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico) RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>
と記述して、一部のファイルを除くすべてのリクエストをindex.phpに投げるように設定しており、この環境では何の問題もなく動作しています。
###発生している問題・エラーメッセージ
本番環境のNginxサーバーにアップロードし動作テストを行ったところ、画像表示部分以外はすべて問題なく動作するのですが、当該部分のリクエストを行った時、
404 Not Found nginx
というNginxの404ページが表示されてしまいます。
下記の通り、実際に存在しないファイルへのリクエストはすべてindex.phpに投げるように設定しているつもりなのですが...
###Nginxのconfファイル
conf
1server { 2 listen 80 default_server; 3 listen [::]:80 default_server; 4 5 root /var/www/public; 6 index index.html index.htm index.php; 7 8 location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ { 9 log_not_found off; 10 } 11 12 server_name abcdef.com; 13 14 # Security 15 add_header X-Frame-Options SAMEORIGIN; 16 add_header X-Content-Type-Options nosniff; 17 add_header X-XSS-Protection "1; mode=block"; 18 19 location / { 20 # たぶんここら辺に問題があるのかなと思います... 21 try_files $uri $uri/ /index.php?/$request_uri; 22 } 23 24 location ~ \.php$ { 25 include snippets/fastcgi-php.conf; 26 fastcgi_pass unix:/run/php/php7.0-fpm.sock; 27 } 28 29 location ~ /\.ht { 30 deny all; 31 } 32}
###試したこと
url.com/viewimage/abcdef.jpg
にアクセスした場合Nginxの404画面が表示されるのですが、末尾をたとえばabcdef.jpggなどとして、変な拡張子にしてリクエストするときちんと処理されるらしくCodeIgniterの404画面が表示されます。
おそらく、pngやjpgなどといったきちんとした拡張子が末尾に来るリクエストのみ、PHP側に渡されることなくNginx側が処理してしまっているものと思っています。
おそらく設定次第でなんとかなるものと思いたいのです。。。
(ここがうまくいかないと本番環境のサーバーをApacheで構築し直さねばなりません...)
どなたか、お力をお貸しください。
他の箇所の設定ファイルが必要であれば、教えてください。
よろしくお願い申し上げます。
###ソフトウェアのバージョン等
Nginx/1.10.0
OS: Ubuntu
PHP 7.0.8
###追記: Nginxのデバッグログ
リクエストを受けてからレスポンスヘッダを返すまでの一部のみ記載しています。
log
12017/01/06 13:42:54 [debug] 20967#20967: *67 http request line: "GET /viewimage/c91b92640d7e2c6d36eca6c0b57122e4.png HTTP/1.1" 22017/01/06 13:42:54 [debug] 20967#20967: *67 http uri: "/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.png" 32017/01/06 13:42:54 [debug] 20967#20967: *67 http args: "" 42017/01/06 13:42:54 [debug] 20967#20967: *67 http exten: "png" // ここでNginx側に判定されるのは怪しいです... 52017/01/06 13:42:54 [debug] 20967#20967: *67 posix_memalign: 0000557FB465B9B0:4096 @16 62017/01/06 13:42:54 [debug] 20967#20967: *67 http process request header line 72017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "Host: url.com" 82017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "Connection: keep-alive" 92017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "Cache-Control: max-age=0" 102017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "Upgrade-Insecure-Requests: 1" 112017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" 122017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" 132017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "DNT: 1" 142017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "Accept-Encoding: gzip, deflate, sdch" 152017/01/06 13:42:54 [debug] 20967#20967: *67 http header: "Accept-Language: ja,en-US;q=0.8,en;q=0.6" 162017/01/06 13:42:54 [debug] 20967#20967: *67 http header done 172017/01/06 13:42:54 [debug] 20967#20967: *67 event timer del: 9: 1483677834748 182017/01/06 13:42:54 [debug] 20967#20967: *67 generic phase: 0 192017/01/06 13:42:54 [debug] 20967#20967: *67 rewrite phase: 1 202017/01/06 13:42:54 [debug] 20967#20967: *67 test location: "/" 212017/01/06 13:42:54 [debug] 20967#20967: *67 test location: ~ "\.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$" 222017/01/06 13:42:54 [debug] 20967#20967: *67 using configuration "\.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$" 232017/01/06 13:42:54 [debug] 20967#20967: *67 http cl:-1 max:1048576 242017/01/06 13:42:54 [debug] 20967#20967: *67 rewrite phase: 3 252017/01/06 13:42:54 [debug] 20967#20967: *67 post rewrite phase: 4 262017/01/06 13:42:54 [debug] 20967#20967: *67 generic phase: 5 272017/01/06 13:42:54 [debug] 20967#20967: *67 generic phase: 6 282017/01/06 13:42:54 [debug] 20967#20967: *67 generic phase: 7 292017/01/06 13:42:54 [debug] 20967#20967: *67 access phase: 8 302017/01/06 13:42:54 [debug] 20967#20967: *67 access phase: 9 312017/01/06 13:42:54 [debug] 20967#20967: *67 access phase: 10 322017/01/06 13:42:54 [debug] 20967#20967: *67 post access phase: 11 332017/01/06 13:42:54 [debug] 20967#20967: *67 try files phase: 12 342017/01/06 13:42:54 [debug] 20967#20967: *67 content phase: 13 352017/01/06 13:42:54 [debug] 20967#20967: *67 content phase: 14 362017/01/06 13:42:54 [debug] 20967#20967: *67 content phase: 15 372017/01/06 13:42:54 [debug] 20967#20967: *67 content phase: 16 382017/01/06 13:42:54 [debug] 20967#20967: *67 content phase: 17 392017/01/06 13:42:54 [debug] 20967#20967: *67 http filename: "/var/www/public/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.png" 402017/01/06 13:42:54 [debug] 20967#20967: *67 add cleanup: 0000557FB465B758 412017/01/06 13:42:54 [error] 20967#20967: *67 open() "/var/www/public/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.png" failed (2: No such file or directory), client: xxx.xx.xx.xx, server: url.com, request: "GET /viewimage/c91b92640d7e2c6d36eca6c0b57122e4.png HTTP/1.1", host: "url.com"
###追記2: 正常にリライトされた時のデバッグログ
文字数制限のため一部省略しています。
log
12017/01/06 14:03:50 [debug] 21040#21040: *132 http request line: "GET /viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg HTTP/1.1" 22017/01/06 14:03:50 [debug] 21040#21040: *132 http uri: "/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" 32017/01/06 14:03:50 [debug] 21040#21040: *132 http args: "" 42017/01/06 14:03:50 [debug] 21040#21040: *132 http exten: "pngg" 52017/01/06 14:03:50 [debug] 21040#21040: *132 posix_memalign: 0000557FB465F9C0:4096 @16 62017/01/06 14:03:50 [debug] 21040#21040: *132 http process request header line 72017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "Host: bbs.sugakubu.com" 82017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "Connection: keep-alive" 92017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "Cache-Control: max-age=0" 102017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "Upgrade-Insecure-Requests: 1" 112017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" 122017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" 132017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "DNT: 1" 142017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "Accept-Encoding: gzip, deflate, sdch" 152017/01/06 14:03:50 [debug] 21040#21040: *132 http header: "Accept-Language: ja,en-US;q=0.8,en;q=0.6" 162017/01/06 14:03:50 [debug] 21040#21040: *132 http header done 172017/01/06 14:03:50 [debug] 21040#21040: *132 event timer del: 3: 1483679090605 182017/01/06 14:03:50 [debug] 21040#21040: *132 generic phase: 0 192017/01/06 14:03:50 [debug] 21040#21040: *132 rewrite phase: 1 202017/01/06 14:03:50 [debug] 21040#21040: *132 test location: "/" 212017/01/06 14:03:50 [debug] 21040#21040: *132 test location: ~ "\.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$" 222017/01/06 14:03:50 [debug] 21040#21040: *132 test location: ~ "[^/]\.php(/|$)" 232017/01/06 14:03:50 [debug] 21040#21040: *132 test location: ~ "/\.ht" 242017/01/06 14:03:50 [debug] 21040#21040: *132 using configuration "/" 252017/01/06 14:03:50 [debug] 21040#21040: *132 http cl:-1 max:1048576 262017/01/06 14:03:50 [debug] 21040#21040: *132 rewrite phase: 3 272017/01/06 14:03:50 [debug] 21040#21040: *132 post rewrite phase: 4 282017/01/06 14:03:50 [debug] 21040#21040: *132 generic phase: 5-7 292017/01/06 14:03:50 [debug] 21040#21040: *132 access phase: 8-10 302017/01/06 14:03:50 [debug] 21040#21040: *132 post access phase: 11 312017/01/06 14:03:50 [debug] 21040#21040: *132 try files phase: 12 322017/01/06 14:03:50 [debug] 21040#21040: *132 http script var: "/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" 332017/01/06 14:03:50 [debug] 21040#21040: *132 trying to use file: "/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" "/var/www/public/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" 342017/01/06 14:03:50 [debug] 21040#21040: *132 http script var: "/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" 352017/01/06 14:03:50 [debug] 21040#21040: *132 trying to use dir: "/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" "/var/www/public/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" 362017/01/06 14:03:50 [debug] 21040#21040: *132 http script copy: "/index.php?/" 372017/01/06 14:03:50 [debug] 21040#21040: *132 http script var: "/viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" 382017/01/06 14:03:50 [debug] 21040#21040: *132 trying to use file: "/index.php?//viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" "/var/www/public/index.php?//viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg" 392017/01/06 14:03:50 [debug] 21040#21040: *132 internal redirect: "/index.php?//viewimage/c91b92640d7e2c6d36eca6c0b57122e4.pngg"
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/06 05:01
退会済みユーザー
2017/01/06 05:11
2017/01/06 05:21