2014-12-15 5 views
1

Проблема с моей конфигурацией NGINX, когда я просматриваю URL-адрес с расширением .php, которого не существует, вместо ответа 404 я получаю 'Не указан входной файл.' ошибка. Ниже моя конфигурация NGINX, любые идеи, что может произойти?Ошибка ввода входного файла при посещении нерезидентных URL-адресов с расширениями .php

html { 
    # Compression 

    # Enable Gzip compressed. 
    gzip on; 

    # Enable compression both for HTTP/1.0 and HTTP/1.1. 
    gzip_http_version 1.1; 

    # Compression level (1-9). 
    # 5 is a perfect compromise between size and cpu usage, offering about 
    # 75% reduction for most ascii files (almost identical to level 9). 
    gzip_comp_level 5; 

    # Don't compress anything that's already small and unlikely to shrink much 
    # if at all (the default is 20 bytes, which is bad as that usually leads to 
    # larger files after gzipping). 
    gzip_min_length 128; 

    # Compress data even for clients that are connecting to us via proxies, 
    # identified by the "Via" header (required for CloudFront). 
    gzip_proxied any; 

    # Tell proxies to cache both the gzipped and regular version of a resource 
    # whenever the client's Accept-Encoding capabilities header varies; 
    # Avoids the issue where a non-gzip capable client (which is extremely rare 
    # today) would display gibberish if their proxy gave them the gzipped version. 
    gzip_vary on; 

    # Compress all output labeled with one of the following MIME-types. 
    gzip_types application/atom+xml application/x-javascript application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/svg+xml image/x-icon text/css text/plain text/x-component; 
} 

server { 
    listen 80; 
    server_name www.example.com example.com; 
    return 301 https://example.com$request_uri; 
} 

server { 
    listen *:443 ssl; 
    server_name www.example.com; 
    return https://example.com$request_uri 301; 
} 

server { 
    listen 443 ssl; 
    server_name example.com; 
    root /home/example/default/public; 

    index index.html index.htm index.php; 

    charset utf-8; 

    location/{ 
     try_files $uri $uri/ /index.php?$query_string; 
    } 

    location = /favicon.ico { access_log off; log_not_found off; } 
    location = /robots.txt { access_log off; log_not_found off; } 

    access_log off; 
    error_log /var/log/nginx/default-error.log error; 

    error_page 404 /index.php; 

    location ~ \.php$ { 
     fastcgi_param DB_PASSWORD "password"; 
     fastcgi_param DB_USERNAME "user"; 
     fastcgi_param DB_NAME "db"; 
     fastcgi_param DB_HOST "localhost"; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 

    location ~ /\.ht { 
     deny all; 
    } 

    # Expire rules for static content 

    # cache.appcache, your document html and data 
    location ~* \.(?:manifest|appcache|html?|xml|json)$ { 
     expires -1; 
     # access_log logs/static.log; # I don't usually include a static log 
    } 

    # Feed 
    location ~* \.(?:rss|atom)$ { 
     expires 1h; 
     add_header Cache-Control "public"; 
    } 

    # Media: images, icons, video, audio, HTC 
    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { 
     expires 1M; 
     access_log off; 
     add_header Cache-Control "public"; 
    } 

    # CSS and Javascript 
    location ~* \.(?:css|js)$ { 
     expires 1y; 
     access_log off; 
     add_header Cache-Control "public"; 
    } 
} 

ответ

0

Для ваших целей, добавив:

fastcgi_param SCRIPT_FILENAME $request_filename; 

... на ваш location ~ \.php$ { блок должен решить эту проблему. PHP требует, чтобы эта переменная была равна абсолютному пути файловой системы к скрипту PHP, который должен выполняться, и именно то, что вы хотите, зависит от вашей конфигурации. Ответ на вопрос о том, как правильно настроить SCRIPT_FILENAME, не существует.

Некоторые из переменных, которые могут быть использованы, обсуждаются здесь: https://serverfault.com/a/496031

именно то, что вы хотите для данного сценария зависит от многих факторов, таких как ли отображение на директории, не $document_root, будь фторкаучука chrooted, etc.

Но для случая вы описываете, I думаю вышеуказанное должно решить вашу проблему.

+0

Спасибо за ответ, но, к сожалению, добавление этой декларации не устраняет проблему, которую я боюсь. –

+0

@GarethDaine разрешает ведение журнала ошибок для fpm и задает 'catch_workers_output = yes' для пула, если вы еще этого не сделали. Это должно зарегистрировать сообщение, которое сообщит вам, какой путь он ищет. – DaveRandom

+0

@GarethDaine ваше объявление 'try_files' должно привести к тому, что он всегда найдет файл для обслуживания запроса или укореняет все через'/index.php' - вы уверены, что '/ index.php' существует? – DaveRandom

 Смежные вопросы

  • Нет связанных вопросов^_^