web-dev-qa-db-ja.com

Nginx + php5-fpm + Symfony2 = "ファイルが見つかりません。"

これは 公式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_pathinfo0に戻し、構成を次のように変更しました。

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
1
loostro

[〜#〜] 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-ディレクトリに新しく作成されたファイルのユーザーとグループおよびファイルのアクセス許可を再帰的に保持します
1
loostro