nginx
入門者です。
Laravel
の勉強を始めていて、問題にぶつかったのでヘルプをお願いします。
症状
Laravel
の public
ディレクトリの中にある .php
ファイルを実行させたいのですが、「〜 could not be found.」とエラーが出て表示できません。
環境
macOS Sierra バージョン10.12.5
Laravel 5.4
バージョン情報
zsh
1$ nginx -v 2nginx version: nginx/1.12.0 3 4$ php -v 5PHP 7.1.1 (cli) (built: Jan 23 2017 15:09:57) ( NTS ) 6Copyright (c) 1997-2017 The PHP Group 7Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies 8 9$ php-fpm -v 10PHP 5.6.30 (fpm-fcgi) (built: Feb 7 2017 16:19:01) 11Copyright (c) 1997-2016 The PHP Group 12Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies 13 14$ valet -v 15Laravel Valet 2.0.4
経過
元々ウェブサーバと言えば apache
としか思ってなく、昨日初めてLaravel
で動いてるのがnginx
という別のウェブサーバなのかもしれないと思い始めた程度のビギナーです。
nginx
でphp
を動かすためにはphp-fpm
というものが必要だということも今日知りました。
設定ファイルを上手く設定すればいいのかなと思っているのですが、今の力で独力で解決するのに限界を感じ質問させていただいています。
設定ファイル
/usr/local/etc/nginx/.nginx.conf
が設定ファイルなのかも自信はないのですが、この中身は
conf
1user taro staff; 2worker_processes auto; 3 4events { 5 worker_connections 1024; 6} 7 8http { 9 include mime.types; 10 default_type application/octet-stream; 11 12 sendfile on; 13 keepalive_timeout 65; 14 client_max_body_size 128M; 15 16 gzip on; 17 gzip_comp_level 5; 18 gzip_min_length 256; 19 gzip_proxied any; 20 gzip_vary on; 21 22 gzip_types 23 application/atom+xml 24 application/javascript 25 application/json 26 application/rss+xml 27 application/vnd.ms-fontobject 28 application/x-font-ttf 29 application/x-web-app-manifest+json 30 application/xhtml+xml 31 application/xml 32 font/opentype 33 image/svg+xml 34 image/x-icon 35 text/css 36 text/plain 37 text/x-component; 38 39 include /Users/taro/.valet/Nginx/*; 40 include servers/*; 41 include valet/valet.conf; 42}
となっています。
Laravel
をインストールしたままの状態なので、これをいじっていいのかもおっかなびっくりな状態です。
/Users/taro/.valet/Nginx/
の中には1つだけファイル.keep
があり中身は空行が1行だけです。
/usr/local/etc/nginx/servers/
にはファイルはなく、
/usr/local/etc/nginx/valet/
の中には1つだけファイルvalet.conf
があり、中身は
server { listen 80 default_server; root /; charset utf-8; location /41c270e4-5535-4daa-b23e-c269744c2f45/ { internal; alias /; try_files $uri $uri/; } location / { rewrite ^ /Users/taro/.composer/vendor/laravel/valet/server.php last; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log /Users/taro/.valet/Log/nginx-access.log; error_log /Users/taro/.valet/Log/nginx-error.log; error_page 404 /Users/taro/.composer/vendor/laravel/valet/server.php; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/Users/taro/.valet/valet.sock; fastcgi_index /Users/taro/.composer/vendor/laravel/valet/server.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /Users/taro/.composer/vendor/laravel/valet/server.php; } location ~ /\.ht { deny all; } }
です。
Laravel
のトップディレクトリ(?)は~/development/laravel
で、ここで
laravel new nginx_example
としてnginx_example
アプリケーションを作成し、
http://nginx_example.dev
にアクセスすると、いつもの白地に天地中央寄せの小洒落たページが表示されます。
ここで、public
に
hello.html
html
1Hello, Laravel!
というファイルを作り、index.blade.php
を
php
1???(ここらで混乱&スタミナ切れしてきました)
としブラウザをリロードすると、
Hello, Laravel!
と表示され・・(るためにはどうしたらいいんでしょう?)
で、(ここからは推測なのですが)そのままで
hello.php
php
1<?php print("Hello, Nginx!"); ?>
というファイルを作ってindex.blade.php
を
php
1???(もう分かりません)
としてブラウザをリロードすると
「〜 could not be found.」
と表示され(るんじゃないかな?)
それを
Hello, Nginx!
と表示させるためにはどうしたらいいでしょう?
何だかグダグダな質問になってしまって申し訳ありません。
汲み取っていただいてお助けいただけたら幸いです。
2017.7.13(thu) 23:50 追記
ちょっと持ち直しました。
public
以下のファイルを見たければ
index.blade.php
ではなく
web.php
を書き換えればいいのかなと。
という方針に変えて
web.php
php
1<?php 2Route::get('/', function () { 3 return File::get((public_path()) . '/hello.html'); 4});
に変えてみたところ、めでたく
Hello, Laravel!
と表示されました。
で、問題のphp
ですが、
web.php
php
1<?php 2Route::get('/', function () { 3 return File::get((public_path()) . '/hello.php'); 4});
変えてリロードしたところ何も表示されず、ソースを表示すると、
view-source:http://nginx_example.dev/
html
1<?php print("Hello, Nginx!"); ?>
と書かれていました。
このhello.php
が実行されるにはどうしたら良いでしょうか?
もう一度お知恵を拝借いたしたく、よろしくお願いします。
2017.7.14(fri) 9:38 追記
web.phpを書き換えました。
php
1Route::get('hello', function() { 2 require(public_path('hello.php')); 3});
を追加。
public
の直下にhello.php
というファイルを作り、中身を
php
1<?php 2print("Hello, Nginx!"); 3?>
としました。ブラウザをリロードするとめでたく
Hello, Nginx!
と表示させることが出来ました。
public
の中のphp
ファイルの実行はこれでOKだと思うのですが、
public/js
の中にjavascript
をはき出す.php
を作りたいというのがそもそものやりたい事だったのですが、勝手な解釈で問題を端折ってしまったことをお詫びいたします。
追加質問になってしまって申し訳ありません。
上記、
「public/js
の中にjavascript
をはき出す.php
を作りたい」の件です。
web.php
に
php
1Route::get('test', function() { 2 require(public_path('test.html')); 3});
を追加しました。
public/js/alert.js
というファイルを
javascript
1alert("OK!");
と作り、public
直下にtest.html
html
1<!DOCTYPE html> 2<html> 3<head> 4 <title></title> 5</head> 6<body> 7 <h1>test</h1> 8 <script src="./js/alert.js"></script> 9</body> 10</html>
を置いて
http://nginx_example.dev/test
にアクセスすると、
OK!
と意図通りアラートが出ました。
次に拡張子を変えてpublic/js/alert.php
というファイルを
javascript
1alert("Got it!");
と作り、test.html
の
<script src="./js/alert.js"></script>
を
<script src="./js/alert.php"></script>
と書き換えて同じく
http://nginx_example.dev/test
にアクセスすると、アラートは出てこず、ただtestと表示されるだけです。
何とかGot it!
を表示させたいのですが方法はありますでしょうか?
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/14 06:47
2017/07/14 07:03
2017/07/14 13:21