FastCGI enviado em stderr: “Script primário desconhecido” + Owncloud

1

Eu tenho um erro estranho com minha configuração nginx / php5-fpm. Eu já postei essa pergunta nos fóruns do owncloud e perguntei ao fórum nginx, mas eles não fazem ideia. Como eu procurei serverfault, as sugestões sobre este tópico não se aplicam diretamente ao meu problema, porque todos eles compartilham um bloco de localização configurado incorretamente, o que eu acho que não é o caso aqui (eu tirei a configuração diretamente da documentação do owncloud). / p>

Então, qual é o problema?

Meu nginx error.log é preenchido com:

"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 é executado em um subdiretório, /srv/www/owncloud, a raiz aponta para /srv/www . Se eu apontar a mesma configuração para o root /srv/www/owncloud ; o mesmo erro é causado, mas desta vez se lê:

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"

Observe o caminho "owncloud" duplicado ... o arquivo, php está procurando, está localizado em /srv/www/owncloud/status.php (pode ser o .gif do erro acima, é gentil de random), não em /owncloud/owncloud...but quando eu reverter a raiz do documento para / src / www, php omite o caminho / owncloud completamente! Está me deixando louca ...

Minha configuração do nginx parece assim:

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

E minha própria configuração do site:

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

Se algum de vocês tivesse uma ideia, eu ficaria feliz.

Meu ambiente é: Ubuntu 14.04 VPS, nginx 1.9.11, PHP5-FPM (mais recente com o Ubuntu), apparmor está desligado (desligado como eu experimentei este erro), arquivos em / srv são legíveis pelo usuário nginx, i mesmo chown-los para resolver esse erro, mas não tem efeito. Open_basedir em php não tem efeito (inclui todos os locais relevantes de qualquer maneira, mas não resolve o erro quando desligado).

    
por user338846 16.02.2016 / 19:09

1 resposta

2

Gostaria de saber se o pedido svg está sendo enviado para o PHP. Tente mudar sua última localização para esta

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

A razão pela qual eu suspeito é este bloco, que está enviando todos os pedidos para / para o PHP, o que é provavelmente desnecessário

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

Se isso não ajuda você quer saber qual bloco de localização a solicitação está passando. Adicione algo assim a cada um dos seus blocos de localização e veja a solicitação / resposta com Live Cabeçalhos HTTP e firefox (ou curl, acho que é "curl -i" para obter cabeçalhos, mas posso estar errado)

location (whatever) {
  add_header Z_LOCATION "DESCRIBE LOCATION";
}
    
por 16.02.2016 / 19:19