Назад | Перейти на главную страницу

FastCGI отправил в stderr: «Основной сценарий неизвестен» + Owncloud

У меня странная ошибка в конфигурации nginx / php5-fpm. Я уже размещал этот вопрос на форумах owncloud и задавал вопросы на форуме nginx, но они понятия не имеют. Когда я искал serverfault, предложения по этой теме не относились напрямую к моей проблеме, потому что все они используют неправильно настроенный блок местоположения, что, как мне кажется, здесь не так (я взял конфигурацию непосредственно из документации owncloud).

Так в чем проблема?

Мой nginx error.log заполняется этими:

"FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: MY IP, server: MY DOMAIN, request: "GET /core/img/actions/history.svg HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "MY HOSTNAME/DOMAIN", referrer: "MY DOMAIN"

Owncloud работает в подкаталоге, /srv/www/owncloud, корень указывает на /srv/www. Если я укажу ту же конфигурацию на root /srv/www/owncloud; возникает та же ошибка, но на этот раз она гласит:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: IP, server: HOSTNAME, request: "GET /owncloud/owncloud/status.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "HOSTNAME"

Обратите внимание на дублированный путь owncloud ... файл, который ищет php, находится по адресу /srv/www/owncloud/status.php (также может быть .gif из ошибки выше, он случайный) , а не в /owncloud/owncloud... но когда я возвращаю корень документа в / src / www, php полностью пропускает путь / owncloud! Это сводит меня с ума ...

Моя конфигурация nginx выглядит так:

user  nginx;
worker_processes auto;

pid /var/run/nginx.pid;

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


http {
    include /etc/nginx/sites-enabled/*;
    include mime.types;
    default_type application/octet-stream;

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
}

И мой owncloud - конфиг сайта:

upstream php-handler {
    server unix:/var/run/php5-fpm.sock;
}

server {
    listen MY IP:4433 ssl;
    server_name MY DOMAIN;

    ssl_certificate /etc/ssl/owncloud/owncloud_full.crt;
    ssl_certificate_key /etc/ssl/owncloud/owncloud.key;
    ssl_dhparam /etc/ssl/owncloud/dhparam.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/ssl/owncloud/comodo_full_chain.pem;
    resolver DNS SERVERS valid=300s;
    resolver_timeout 10s;

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers on;
    ssl_trusted_certificate /etc/ssl/owncloud/comodo_full_chain.pem;
    resolver 95.129.51.51 80.244.244.244 valid=300s;
    resolver_timeout 10s;

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_ciphers *LIST OF SECURE CIPHERS*;

    ssl_session_timeout 10m;
    ssl_session_cache off;
    ssl_session_tickets on;
    ssl_session_ticket_key /etc/nginx/ticketkey;

    # Add headers to serve security related headers
  add_header Strict-Transport-Security 'max-age=15768000; includeSubDomains; preload' always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;

    # Path to the root of your installation
    root /srv/www;

    # set max upload size
    client_max_body_size 10G;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    index index.php;
    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    rewrite ^/.well-known/carddav /remote.php/carddav/ permanent;
    rewrite ^/.well-known/caldav /remote.php/caldav/ permanent;

    # set max upload size
    client_max_body_size 10G;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    index index.php;
    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    rewrite ^/.well-known/carddav /remote.php/carddav/ permanent;
    rewrite ^/.well-known/caldav /remote.php/caldav/ permanent;

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

location ~ ^/(build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
}

location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
    deny all;
}

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

location ~ ^/(build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
}

location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
    deny all;
}

location / {

    rewrite ^/remote/(.*) /remote.php last;
    rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
    try_files $uri $uri/ =404;
}

location ~ \.php(?:$|/) {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param HTTPS on;
    fastcgi_param modHeadersAvailable true;
    fastcgi_pass php-handler;
    fastcgi_intercept_errors on;
}

# Adding the cache control header for js and css files
# Make sure it is BELOW the location ~ \.php(?:$|/) { block

location ~* \.(?:css|js)$ {
    add_header Cache-Control "public, max-age=7200";
    # Add headers to serve security related headers
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    # Optional: Don't log access to assets
    access_log off;
}


location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
    access_log off;
}
}    

Если бы у кого-нибудь из вас возникла идея, я был бы рад.

Моя среда: Ubuntu 14.04 VPS, nginx 1.9.11, PHP5-FPM (последняя версия с ubuntu), apparmor выключен (отключил его, когда я столкнулся с этой ошибкой), файлы в / srv доступны для чтения пользователем nginx, я даже их порезал для устранения этой ошибки, но это не имеет никакого эффекта. Open_basedir в php не действует (в любом случае включает все соответствующие места, но не устраняет ошибку при выключении).

Интересно, отправляется ли запрос svg на PHP. Попробуйте изменить свое последнее местоположение на это

location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf|svg)$ {
  access_log off;
}

Причина, по которой я подозреваю, заключается в этом блоке, который отправляет все запросы для / на PHP, что, вероятно, не нужно

location ~ \.php(?:$|/) {

Если это не помогает, вы хотите знать, через какой блок местоположения проходит запрос. Добавьте что-то подобное в каждый из ваших блоков местоположения и просмотрите запрос / ответ с помощью Заголовки HTTP в реальном времени и firefox (или curl, я думаю, что это "curl -i" для получения заголовков, но я могу ошибаться)

location (whatever) {
  add_header Z_LOCATION "DESCRIBE LOCATION";
}