it-swarm.com.ru

1 FastCGI отправил в stderr: "Основной сценарий неизвестен"

Я впервые использую Nginx, но я более чем знаком с Apache и Linux. Я использую существующий проект, и когда я пытаюсь увидеть index.php, я получаю файл 404, который не найден.

Вот запись access.log:

2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", Host: "www.ordercloud.lh"

А вот файл с сайтами:

server {
# Listening on port 80 without an IP address is only recommended if you are not running multiple v-hosts
    listen       80;
# Bind to the public IP bound to your domain
#listen 127.0.0.11:80;
# Specify this vhost's domain name
    server_name www.ordercloud.lh;
    root /home/willem/git/console/frontend/www;
    index index.php index.html index.htm;

# Specify log locations for current site
    access_log /var/log/access.log;
    error_log /var/log/error.log warn;

# Typically I create a restrictions.conf file that I then include across all of my vhosts
#include conf.d/restrictions.conf;
# I've included the content of my restrictions.conf in-line for this example

# BEGIN restrictions.conf
# Disable logging for favicon
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

# Disable logging for robots.txt
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
# END restrictions.conf

# Typically I create a yiiframework.conf file that I then include across all of my yii vhosts
#include conf.d/yiiframework.conf;
# I've included the content of my yiiframework.conf in-line for this example

# BEGIN yiiframework.conf
# Block access to protected, framework, and nbproject (artifact from Netbeans)
    location ~ /(protected|framework|nbproject) {
        deny all;
        access_log off;
        log_not_found off;
    }

# Block access to theme-folder views directories
    location ~ /themes/\w+/views {
        deny all;
        access_log off;
        log_not_found off;
    }

# Attempt the uri, uri+/, then fall back to yii's index.php with args included
# Note: old examples use IF statements, which nginx considers evil, this approach is more widely supported
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
# END yiiframework.conf

# Tell browser to cache image files for 24 hours, do not log missing images
# I typically keep this after the yii rules, so that there is no conflict with content served by Yii
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 24h;
        log_not_found off;
    }

# Block for processing PHP files
# Specifically matches URIs ending in .php
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_intercept_errors on;
# Fix for server variables that behave differently under nginx/php-fpm than typically expected
        #fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Include the standard fastcgi_params file included with nginx
        include fastcgi_params;
        #fastcgi_param  PATH_INFO        $fastcgi_path_info;
        #fastcgi_index index.php;
# Override the SCRIPT_FILENAME variable set by fastcgi_params
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
# Pass to upstream PHP-FPM; This must match whatever you name your upstream connection
        fastcgi_pass 127.0.0.1:9000;

    }
}

Мой /home/willem/git/console принадлежит www-data: www-data (мой веб-пользователь запускает php и т.д.), И я дал ему 777 разрешений из-за разочарования ...

Кто-нибудь может посоветовать?

11
We0

Итак, 3 вещи, которые я нашел после дня борьбы

  1. По какой-то причине у меня уже было что-то, работающее на порту 9000, поэтому я Изменился на 9001
  2. Мой сайт по умолчанию перехватывал мой новый, еще раз я не Понимаю, почему это не должно, но я просто отключил его
  3. Nginx автоматически не делает ссылку sym для сайтов, доступных для Site-enabled. 

Надеюсь, это спасет кого-то от неприятностей!

Вот более подробная ссылка в случае сбоя сервера: https://serverfault.com/questions/517190/nginx-1-fastcgi-sent-in-stderr-primary-script-unknown/517207#517207

5
We0

Это сообщение от сервера fastcgi обычно означает, что данное ему SCRIPT_FILENAME не было найдено или недоступно как файл в его файловой системе. 

Разрешения файла оформления заказа на /home/willem/git/console/frontend/www/index.php

Это 644?

А/home/willem/git/console/frontend/www /

Это 755?

8
Sergey Bogdanov

В случае, если у кого-то была такая же ошибка: в моем случае проблема заключалась в отсутствующей корневой директиве внутри блока местоположения в nginx.conf, как объяснено в вики Arch

6
flower_green

«Основной сценарий неизвестен» вызван контекстом безопасности SELinux.

клиент получает ответ 

Файл не найден.

nginx error.log имеет следующее сообщение об ошибке

* 19 FastCGI отправил в stderr: «Основной сценарий неизвестен» при чтении заголовка ответа из апстрима

поэтому просто измените тип контекста безопасности корневой веб-папки на httpd_sys_content_t

chcon -R -t httpd_sys_content_t/var/www/show




есть 3 пользователя для конфигурации nginx/php-fpm

/etc/nginx/nginx.conf

user nobody nobody;  ### `user-1`, this is the user run nginx woker process
...
include servers/*.conf;

/etc/nginx/servers/www.conf

location ~ \.php$ {
#   fastcgi_pass 127.0.0.1:9000;  # tcp socket
    fastcgi_pass unix:/var/run/php-fpm/fpm-www.sock;  # unix socket
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

/etc/php-fpm.d/www.conf

[www]
user = Apache  ### `user-2`, this is the user run php-fpm pool process
user = Apache

;listen = 127.0.0.1:9000  # tcp socket
listen = /var/run/php-fpm/fpm-www.sock  # unix socket

listen.onwer = nobody  ### `user-3`, this is the user for unix socket, like /var/run/php-fpm/fpm-www.sock
listen.group = nobody  # for tcp socket, these lines can be commented
listen.mode = 0660

user-1 и user-2 не обязательно должны быть одинаковыми.

для сокета unix пользователь-1 должен быть таким же, как пользователь-3, , поскольку nginx fastcgi_pass должен иметь разрешение на чтение/запись на сокете unix.

в противном случае nginx получит 502 Bad Gateway , а nginx error.log выдает следующее сообщение об ошибке

* 36 connect () для unix: /var/run/php-fpm/fpm-www.sock сбой (13: разрешение запрещено) при подключении к восходящему потоку

3
PLA

Я не знаю, как рассчитывается $ document_root, но я решил эту проблему, путем Действительно убедившись, что мой корень документа находится в/usr/share/nginx/просто там, где есть папка html

1
enRaiser