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 не действует (в любом случае включает все соответствующие местоположения, но не устраняет ошибку при выключении).

1
задан 16 February 2016 в 22:22
1 ответ

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

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

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

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

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

location (whatever) {
  add_header Z_LOCATION "DESCRIBE LOCATION";
}
2
ответ дан 3 December 2019 в 20:41

Теги

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