2 votes

Nginx + php5-fpm + Symfony2 = "Fichier non trouvé."

Ceci est la configuration du site basée sur la documentation officielle de 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;
}

Au début, j'obtenais l'erreur Aucun fichier d'entrée spécifié., cependant j'ai lu sur le wiki nginx que pour cette configuration je n'ai pas besoin du cgi.fix_pathinfo=0 (en fait, ils disent que Symfony2 a besoin que ce soit cgi.fix_pathinfo=1).

Alors je l'ai changé de nouveau à la valeur par défaut (1) et maintenant j'obtiens Fichier non trouvé..

J'ai vu d'autres questions où ils suggèrent d'utiliser location ~ \.php$ {, cependant ils n'étaient pas destinés à une application Symfony2.

J'aimerais rester avec la configuration officielle de Symfony2 si possible.

Pourquoi cela arrive-t-il, et quelle est la solution?

EDIT 1:

J'ai changé le cgi.fix_pathinfo de nouveau à 0 et ai modifié la config de cette façon :

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;
}

Puis j'ai redémarré nginx et php5-fpm, comme suggéré sur IRC, cependant, j'obtiens l'erreur célèbre Fichier d'entrée non spécifié.

EDIT 2: voici le fichier error.log

2014/06/25 22:11:45 [error] 11922#0: *3 FastCGI sent in stderr: "Unable to open primary script: /media/Storage/project/web/app_dev.php (No such file or directory)" while reading response header from upstream, client: 127.0.0.1, server: project.local, request: "GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "project.local"

EDIT 3: voici 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, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36"

Les fichiers journaux de symfony2 sont vides. Je ne pense pas que Symfony ait jamais été exécuté.

EDIT 4: J'ai changé ma configuration en suivant cette réponse SO à :

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;
    }
}

Et maintenant j'obtiens l'erreur Accès refusé. Youpi, quelque chose a changé :). Oups, ça ne fonctionne pas encore :(.

EDIT 5: J'ai chown loostro:www-data /media/Storage/project -R puis chmod g+s /media/Storage/project -R, mais j'obtiens toujours Accès refusé

EDIT 6: Les permissions du fichier /var/run/php5-fpm.sock sont :

srw-rw---- 1 www-data www-data 0 cze 26 11:03 php5-fpm.sock

Le fichier /etc/php5/fpm/pool.d/www.conf est par défaut (pour la distribution Ubuntu 14.04), sauf ces changements que j'ai décommentés en suivant un tutoriel:

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

1voto

eel ghEEz Points 303

RÉSUMÉ: Mon problème était des autorisations de fichiers incorrectes. La configuration officielle de symfony2 pour nginx est OK. J'ai déplacé mes fichiers vers un lecteur de stockage NTFS, et il semble qu'au cours du déplacement, les autorisations des fichiers ont été modifiées.

  • chown loostro:www-data -R /media/Storage/project - changer le propriétaire en loostro et le groupe en www-data (loostro est mon utilisateur sous lequel je développe l'application, php5-fpm s'exécute en tant que www-data), de manière récursive
  • chmod 755 -R /media/Storage/project - changer les autorisations des fichiers pour le projet en rwx (propriétaire) rx (groupe, autres), de manière récursive
  • cd /media/Storage/project entrer dans mon répertoire de projet
  • chmod 775 -R app/cache app/logs web/uploads private/uploads - changer les autorisations des fichiers pour les répertoires pouvant être téléchargés en rwx (propriétaire, groupe) et rx (autres), de manière récursive
  • chmod g+s -R /media/Storage/project - conserver les autorisations des utilisateurs et des groupes et des fichiers pour les fichiers nouvellement créés dans les répertoires, de manière récursive

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X