これは 公式Symfony2ドキュメント に基づくサイト構成です
server {
listen 80;
server_name project.local;
root /media/Storage/project/web;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
location ~ ^/(app|app_dev|config)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
server {
listen 443;
server_name project.local;
root /media/Storage/project/web;
ssl on;
ssl_certificate /etc/nginx/ssl/localhost.crt;
ssl_certificate_key /etc/nginx/ssl/localhost.key;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
location ~ ^/(app|app_dev|config)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
最初はNo input file specified.
エラーが発生していましたが、 nginx wiki で読んだことがありますが、この構成ではcgi.fix_pathinfo=0
は必要ありません(実際には、Symfony2が必要だと言われています) cgi.fix_pathinfo=1
)になります。
そのため、デフォルト(1
)に戻し、File not found.
を取得しています。
私は 他の質問location ~ \.php$ {
の使用を提案しているところを見てきましたが、Symfony2アプリ用ではありませんでした。
可能であれば、Symfony2の公式設定を維持したいと思います。
なぜこれが起こっているのですか、そして解決策は何ですか?
編集1:
cgi.fix_pathinfo
を0
に戻し、構成を次のように変更しました。
server {
listen 80;
server_name project.local;
root /media/Storage/project/web;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
location ~ "^(.+\.php)($|/)" {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
server {
listen 443 ssl;
server_name project.local;
root /media/Storage/project/web;
ssl_certificate /etc/nginx/ssl/localhost.crt;
ssl_certificate_key /etc/nginx/ssl/localhost.key;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
location ~ "^(.+\.php)($|/)" {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
次に、IRCで提案されているように、nginxとphp5-fpmを再起動しましたが、有名なInput file not specified
エラーが発生しました。
編集2:これはerror.logです
2014/06/25 22:11:45 [エラー] 11922#0:* 3 FastCGIがstderrで送信されました: "プライマリスクリプトを開くことができません:/media/Storage/project/web/app_dev.php(そのようなファイルまたはディレクトリはありません) "アップストリームから応答ヘッダーを読み取っている間、クライアント:127.0.0.1、サーバー:project.local、リクエスト:" GET /app_dev.php HTTP/1.1 "、アップストリーム:" fastcgi:// unix:/ var/run/php5-fpm .sock: "、ホスト:" project.local "
編集3:これはaccess.logです
127.0.0.1 --- [25/Jun/2014:22:11:45 +0200] "GET /app_dev.php HTTP/1.1" 404 56 "-" "Mozilla/5.0(X11; Linux x86_64)AppleWebKit/537.36(KHTML 、Geckoのように)Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36 "
Symfony2ログファイルは空です。 symfonyが実行されたことはないと思います。
編集4:次のように会議を変更しました this SO anwser to:
server {
listen 80;
server_name project.local;
root /media/Storage/project/web;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
index app.php;
if (-f $request_filename) {
break;
}
rewrite ^(.*)$ /app.php last;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ (app|app_dev).php {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param HTTPS off;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
server {
listen 443 ssl;
server_name project.local;
root /media/Storage/project/web;
ssl_certificate /etc/nginx/ssl/localhost.crt;
ssl_certificate_key /etc/nginx/ssl/localhost.key;
error_log /var/log/nginx/ssl_error.log;
access_log /var/log/nginx/ssl_access.log;
location / {
index app.php;
if (-f $request_filename) {
break;
}
rewrite ^(.*)$ /app.php last;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ (app|app_dev).php {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
そして今、私はAccess denied.
エラーを受け取っています。ええ、何かが変わりました:)。ブー、まだ動作していません:(。
編集5:chown loostro:www-data /media/Storage/project -R
を実行してからchmod g+s /media/Storage/project -R
を実行しましたが、Access denied
を取得しています
EDIT 6:/var/run/php5-fpm.sock
権限は次のとおりです。
srw-rw---- 1 www-data www-data 0 cze 26 11:03 php5-fpm.sock
/etc/php5/fpm/pool.d/www.conf
ファイルがデフォルトです(Ubuntu 14.04ディストリビューションの場合)。ただし、チュートリアルに従ってコメントを外したこれらの変更は除きます。
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
[〜#〜] summary [〜#〜]:私の問題は間違ったファイルパーミッションでした。公式のsymfony2 nginxの構成 はOKです。ファイルをNTFSストレージドライブに移動しましたが、ファイルの移動中にアクセス許可が変更されたようです。
chown loostro:www-data -R /media/Storage/project
-所有者をloostroに変更し、グループをwww-dataに変更します(loostroはアプリを開発するユーザーであり、php5-fpmはwww-dataとして実行されます)。chmod 755 -R /media/Storage/project
-プロジェクトのファイルパーミッションをrwx(所有者)rx(グループ、その他)に再帰的に変更しますcd /media/Storage/project
プロジェクトディレクトリに入るchmod 775 -R app/cache app/logs web/uploads private/uploads
-アップロード可能なディレクトリrwx(所有者、グループ)およびrx(その他)のファイルパーミッションを再帰的に変更しますchmod g+s -R /media/Storage/project
-ディレクトリに新しく作成されたファイルのユーザーとグループおよびファイルのアクセス許可を再帰的に保持します