koltykov
@koltykov

NGINX и PHP-FPM не отрабатывает код include (показывает в браузере исходник). Почему?

Настраиваю новый сервер с nginx 1.6.0 и PHP 5.5.15 (PHP-FPM). Столкнулся с такой проблемой, что PHP-файлы, которые в NGINX перенаправляются в location не обрабатываются PHP, а в браузере показывается исходный код.
Конфиг для домена:
server {
    listen 80;
    server_name www.domain.com domain.com;

    root /var/www/domain.com/;

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

    location /cms {
	rewrite ^(.*)$ /index.php?q=$1 last;
    }
    location /tags/ {
	rewrite ^/(.+)$ /cms/index.php?q=$1 last;
    }

    include /etc/nginx/templates/default;
    include /etc/nginx/templates/php;
}


Код templates/php:
# Передаём обработку PHP-скриптов PHP-FPM
location ~ \.php$ {
    try_files $uri =404; 
    #PHP-FPM слушает на Unix сокете
    fastcgi_pass   unix:/tmp/wwwpool.sock;

    #Использовать cache зона one
    fastcgi_cache one;

    #Помещать страницу в кеш, после 3-х использований. 
    fastcgi_cache_min_uses 3;

    #Кешировать перечисленные ответы
    fastcgi_cache_valid 200 301 302 304 5m;

    #Формат ключа кеша - по этому ключу nginx находит правильную страничку
    fastcgi_cache_key "$request_method|$host|$request_uri";

    fastcgi_index index.php;
    fastcgi_intercept_errors on; # только на период тестирования

    # Включаем параметры из /etc/nginx/fastcgi_param
    include fastcgi_params;

    # Путь к скрипту, который будет передан в php-fpm
    fastcgi_param       SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_ignore_client_abort     off;
}


Конфиг nginx.conf:
user  www-data;
worker_processes auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
    use epoll;
}

http {
    fastcgi_cache_path /tmp/fcgi-cache/ levels=1:2   keys_zone=one:10m;
    server_tokens off;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #default_type text/html;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  /var/log/nginx/access.log  main;
    error_log /var/log/nginx/error.log crit;

    sendfile    on;
    tcp_nopush  on;
    tcp_nodelay on; 

    keepalive_timeout 20;
    client_body_timeout 30;
    send_timeout 20;
    client_max_body_size 10m;

    reset_timedout_connection on; 

    ##
    # Gzip Settings
    ##
    gzip on;
    gzip_min_length	2100;
    gzip_disable	"msie6";
    gzip_proxied	any;
    gzip_comp_level	4;
    gzip_types 		text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary		on; 

    include /etc/nginx/sites-enabled/*;
}


В частности при вызове любой страницы domain.com/tags/exampl1 в браузере показывается исходный код страницы /cms/index.php. Т.е. <?PHP и т.д.

В настройках PHP.ini директива short_open_tag = On
  • Вопрос задан
  • 3293 просмотра
Решения вопроса 1
merryjane
@merryjane
Системный администратор
Попробуйте убрать строку с try_files из этой конструкции:
location ~ \.php$ {
    try_files $uri =404;


В php.ini short_open_tag включен?
Что будет если создать файл с содержимым:
<?php phpinfo(); ?>
и попробовать открыть его через браузер?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы