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

Затем перезапущенный nginx и php5-fpm, как предложено на IRC, однако, получая известное Input file not specified ошибка.

РЕДАКТИРОВАНИЕ 2: это - error.log

25.06.2014 22:11:45 [ошибка] 11922#0: *3 FastCGI, отправленные в stderr: "Не удалось открыть основной сценарий:/media/Storage/project/web/app_dev.php (Никакой такой файл или каталог)" при чтении заголовка ответа из восходящего потока, клиента: 127.0.0.1, сервер: project.local, запрос: "ПОЛУЧИТЕ/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] "ПОЛУЧАЮТ/app_dev.php HTTP/1.1" 404 56 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, как Геккон) Ubuntu Хром/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36"

symfony2 файлы журнала пусты. Я не думаю, что симфония когда-либо выполнялась.

РЕДАКТИРОВАНИЕ 4: я изменил свой confing после этого ТАК anwser к:

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. ошибка. Yay, что-то изменилось :). Шиканье, еще не работая :(.

РЕДАКТИРОВАНИЕ 5: я имею chown loostro:www-data /media/Storage/project -R и затем chmod g+s /media/Storage/project -R, все еще получение Access denied

РЕДАКТИРОВАНИЕ 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
задан 23 May 2017 в 15:41
1 ответ

SUMMARY: Моя проблема была в неправильных разрешениях на файлы. Официальная настройка symfony2 для nginx в порядке. Я переместил свои файлы на диск NTFS Storage, и кажется, что во время перемещения файлов разрешения были изменены.

  • chown loostro: www-data -R /media/Storage/project - измените владельца на loostro и group на www-data (loostro - мой пользователь, под которым я разрабатываю приложение, php5-fpm работает как www-data), recursively
  • chmod 755 -R /media/Storage/project - измените права доступа к файлам для проекта на rwx (владелец) rx (группа, другое), recursively
  • cd /media/Storage/project введите в каталог моего проекта
  • chmod 775 -R app/cache app/logs web/uploads private/uploads - измените права доступа к файлам для загружаемых каталогов rwx (owner,group) и rx (other), recursively
  • chmod g+s -R /media/Storage/project - сохраняйте права пользователя и группы и права доступа к файлам для вновь создаваемых файлов в каталогах, recursively
1
ответ дан 4 December 2019 в 00:23

Теги

Похожие вопросы