bigton
@bigton
Web-программист

Как не дублировать настройки php-fpm в каждом location?

Добрый день.

Все PHP файлы должны уходить в PHP-FPM, но для некоторых файлов и директорий могут меняться какие то отдельные параметры, например, fastcgi_read_timeout. Сейчас для каждого location приходится дублировать один и тот же код:

include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;

Можно как то этот код убрать в функцию и подключать в каждом отдельно настраиваемом location?

Спасибо.

server {

    listen 80 default_server;

    root /var/www/site.ru/www;

    index index.php;

    server_name site.ru;

    access_log /var/www/site.ru/log/nginx.access.log;
    error_log /var/www/site.ru/log/nginx.error.log;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

    location = /task.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_read_timeout 300;
    }

    location ~ /cron/.+\.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_read_timeout 600;
    }
}
  • Вопрос задан
  • 1153 просмотра
Решения вопроса 1
bigton
@bigton Автор вопроса
Web-программист
Разобрался в своём вопросе. Может быть кому то пригодится.

1. Использовать именованный location

location / {
    try_files $uri $uri/ =404;
}

# именованный location
location @php {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

location ~ \.php$ {
    try_files /no @php;
}

location = /task.php$ {
    try_files /no @php;
    fastcgi_read_timeout 300; # не сработает
}

location ~ /cron/.+\.php$ {
    try_files /no @php;
    fastcgi_read_timeout 600; # не сработает
}

Минус - нельзя применять индивидуальные настройки для location.

2. Подключение через include

# /etc/nginx/php.conf
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;

location / {
    try_files $uri $uri/ =404;
}

location ~ \.php$ {
    include /etc/nginx/php.conf;
}

location = /task.php$ {
    include /etc/nginx/php.conf;
    fastcgi_read_timeout 300; # сработает
}

location ~ /cron/.+\.php$ {
    include /etc/nginx/php.conf;
    fastcgi_read_timeout 600; # сработает
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
mr_T
@mr_T
Web-разработчик
include как бы намекает, что можно вставлять куски конфигов из отдельных файлов. Создаешь файл с тем, что нужно, и просто пишешь include my-awsome-config-file.
Ответ написан
Комментировать
kompi
@kompi
nullstack devoops
Заменить повторяющиеся параметры на именнованную секцию.
Ответ написан
Установите на тест-сервер centminmod, посмотрите как устроен ;) Инклудами собственно, как выше сказали.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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