Назад | Перейти на главную страницу

Как я могу повторно использовать директивы конфигурации PHP в нескольких блоках сервера Nginx?

Итак, у меня есть Nginx и php-fpm, обслуживающие несколько сайтов в разных доменах. Файл конфигурации становится очень большим из-за повторения location ~ \.php$ { } блоки в каждом server { } блок:

server {
    listen 80;
    server_name firstsite.com;
    root /var/www/firstsite;

    location ~ \.php$ {
        root           /var/www/firstsite;
        try_files $uri =404;
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
server {
    listen 80;
    server_name secondsite.com;
    root /var/www/secondsite;

    location ~ \.php$ {
        root           /var/www/secondsite;
        try_files $uri =404;
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Я не могу переместить блоки в другой файл и включить его, так как root меняется в каждом случае. Как мне избежать такого повторения?

Вы перемещаете обычные вещи в другой файл и include Это.

Создайте каталог, например /etc/nginx/package-configs/ и поместите общий php в файл /etc/nginx/package-configs/php.conf.

Чтобы использовать файл, в папке php поместите include /etc/nginx/package-configs/php.conf.

Для более общего ответа вы также можете использовать шаблон:

# conf.d/sites.conf
server { 
  set $sitename brazzers.com
  include conf.d/site.template;
}
server { 
  set $sitename playboy.com
  include conf.d/site.template;
}

 

# site.template
location / {
        root /var/www/$sitename;
        # etc etc etc
}