Nginx и PHP-FPM не работают в vhost

Я пытаюсь перенести проект на Nginx + PHP-FPM с виртуальным хостом. Но когда я пытаюсь загрузить веб-сайт, я получаю файл с именем «скачать» с содержимым index.php.

содержимое nginx.conf:

user nginx nginx;

worker_processes 4;
worker_rlimit_nofile 64000;

error_log /var/log/nginx/error_log debug;

events {
        worker_connections 16000;
        multi_accept on;
        use epoll;
}

http {
        log_format main
                '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $bytes_sent '
                '"$http_referer" "$http_user_agent" '
                '"$gzip_ratio"';

        access_log on;

        disable_symlinks if_not_owner;
        ignore_invalid_headers on;
        server_tokens off;

        keepalive_timeout 20;
        client_header_timeout 20;
        client_body_timeout 20;
        reset_timedout_connection on;
        send_timeout 20;

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        charset UTF-8;

        gzip on;
        gzip_vary on;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js image/x-icon image/bmp;

        server {
                location ~ \.php$ {
                        try_files $uri =404;
                        include /etc/nginx/fastcgi.conf;
                        fastcgi_pass unix:/run/php-fpm.socket;
                        fastcgi_index index.php;
                }
        }
        include /etc/nginx/sites-enabled/*;
}

содержимое файла vhost:

 server {
        listen 127.0.0.1:80;
        server_name yps.dev;

        access_log /var/log/nginx/yps.access_log main;
        error_log /var/log/nginx/yps.error_log debug;

        root /home/bobbles/projects/yps_upstream/www/public;
        index index.cgi index.htm index.html index.php;

        location ~ \.php$ {
                try_files $uri =404;
                include /etc/nginx/fastcgi.conf;
                fastcgi_pass unix:/run/php-fpm.socket;
                #fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
        }
}

Включенные параметры fastcgi:

# cat /etc/nginx/fastcgi.conf 

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

пул PHP-FPM:

[www]
listen =/run/php-fpm.socket
listen.owner = nginx
listen.mode = 0666
user = nobody
group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on

розетка:

# ls -al /run/php-fpm.socket 
srw-rw-rw- 1 nginx nginx 0 Oct 12 22:12 /run/php-fpm.socket

В логах доступа и логах ошибок нет вывода кроме таймаута в логе ошибок:

==> /var/log/nginx/error_log <==
2014/10/12 22:15:39 [info] 3317#0: *19 client closed connection while waiting for request, client: 127.0.0.1, server: 0.0.0.0:80
2014/10/12 22:15:39 [info] 3317#0: *20 client closed connection while waiting for request, client: 127.0.0.1, server: 0.0.0.0:80

Журнал доступа молчит.

Что я делаю не так? /var/log/fpm-php.www.log никогда не создается, поэтому я предполагаю, что это означает, что запрос никогда не доходит до php-fpm, но тогда что не так с моей конфигурацией nginx?

РЕДАКТИРОВАТЬ:

Вот что происходит, когда я пытаюсь получить доступ к статическому файлу из каталога:

==> /var/log/nginx/localhost.error_log <==
2014/10/12 21:16:04 [error] 3021#0: *3 openat() "/usr/share/nginx/html/email.html" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /email.html HTTP/1.1", host: "yps.dev"

==> /var/log/nginx/localhost.access_log <==
127.0.0.1 - - [12/Oct/2014:21:16:04 +0200] "GET /email.html HTTP/1.1" 404 410 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "3.10"

==> /var/log/nginx/yps.error_log <==
2014/10/12 21:16:23 [info] 3021#0: *4 client closed connection while waiting for request, client: 127.0.0.1, server: 0.0.0.0:80

видимо запрос одновременно передается на виртуальный хост yps, а не.


person Tom Macdonald    schedule 12.10.2014    source источник
comment
Близкие избиратели: пожалуйста, объясните!   -  person Tom Macdonald    schedule 13.10.2014


Ответы (1)


это обновленная версия вашего файла vhost, которая может работать:

server {
        listen 80;
        server_name yps.dev;

        access_log /var/log/nginx/yps.access_log main;
        error_log /var/log/nginx/yps.error_log debug;

        root /home/bobbles/projects/yps_upstream/www/public;
        index index.php index.htm index.html;
        location / {
            try_files $uri $uri/ @handler; 
        }

        location @handler { 
            rewrite / /index.php;
        }

        location ~ \.php$ {
                if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php-fpm.socket;
                #fastcgi_pass 127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_index index.php;
                include /etc/nginx/fastcgi.conf;

        }
}
person tawfekov    schedule 12.10.2014
comment
@TomMacdonald, не могли бы вы сбросить nginx.conf, я вижу, что в нем были некоторые изменения, запуск команды sudo nginx -T может проверить конфигурацию для вас и показать вам ошибку, если она есть - person tawfekov; 12.10.2014
comment
извините sudo nginx -t не заглавная буква - person tawfekov; 12.10.2014
comment
Да, я понял это. :-) Но ошибок не было. - person Tom Macdonald; 12.10.2014
comment
nginx обслуживает статическое содержимое? - person tawfekov; 12.10.2014
comment
см. мою правку. Я попытался получить доступ к статическому файлу, который находился в каталоге vhost. - person Tom Macdonald; 12.10.2014