Интерфейс Zabbix на базе Nginx + php-fpm в Debian Stretch

Система мониторинга Zabbix, а точнее, её веб-интерфейс идёт в комплекте с конфигурационным файлом для веб-сервера Apache.
Для Nginx же в интернете есть множество инструкций, ни одна из которых полноценно у меня не завелась.
В связи с этим была разработана своя конфигурация Nginx, которой я здесь и поделюсь.

1. Установим zabbix по инструкции на официальном сайте https://www.zabbix.com/documentation/3.4/manual/installation/getting_zabbix, где, среди прочего, есть вариант установки zabbix через «apt-get install zabbix», при этом, Apache ставить не нужно!

2. Установим Nginx:

# apt-get install nginx

3. Создадим конфигурационный файл в /etc/nginx/sites-enabled/zabbix.conf с контентом:
(подразумевается, что домен будет называться zabbix.mihanentalpo.me, разумеется, у вас он будет другой)

server
{
    #имя сервера
    server_name zabbix.mihanentalpo.me;
	
    #Используем HTTP (пока, скоро перейдём на HTTPS)
    listen *:80;

    #Корень такой, потому что zabbix лежит в /usr/share/zabbix, а открывается он только по адресу /zabbix
    root /usr/share;
 
    # Логи
    error_log /var/log/nginx/zabbix-error.log;
    access_log /var/log/nginx/zabbix-access.log;

    # Этот блок для получения SSL-сертификата Letsencrypt
    location ~ /.well-known
    {
        location ~ /.well-known/acme-challenge/(.*)
        {
            default_type "text/plain";
            root /var/www/letsencrypt;
        }
    }

    # Запретим доступ к скрытым файлам
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # При входе по адресу / перенаправляем в адрес /zabbix - только он и должен работать
    location / {
        return 301 http://$host/zabbix;
    }

    # Главная локация - всё что в папке /zabbix
    location ~ ^/zabbix/(.+)? {
        index index.php;
        
        # Все файлы *.php в этом location обрабатываются через php-fpm
        location ~ ^/zabbix/.*\.php(.*)$ {
            index index.php;            
            # Файл сокета, где будет слушать php-fpm
            fastcgi_pass unix:/var/run/php5-fpm-zabbix.sock;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    }
}

4. Создадим конфигурационный файл для PHP-FPM /etc/php5/fpm/pool.d/zabbix.conf.
Файл создан на базе стандартного файла /etc/php5/fpm/pool.d/www.conf, стандартные комментарии удалены:

[zabbix]
; Пользователь и группа
user = zabbix
group = www-data
; Файл сокета
listen = /var/run/php5-fpm-zabbix.sock
; Пользователь и группа владельца сокета
listen.owner = zabbix
listen.group = www-data
; Права доступа
listen.mode = 0660

; Менеджер процессов
pm = dynamic

; Настройки менеджера процессов
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 600

; Ограничиваем расширения только php-файлами
security.limit_extensions = .php

5. Перезапустим nginx и php-fpm

service nginx restart
service php5-fpm restart

6. Убедимся что интерфейс открывается по адресу http://zabbix.mihanentalpo.me/zabbix (подставить ваш хост)

7. Теперь получим для вашего хоста SSL-сертификат, чтобы можно было открывать интерфейс по протоколу HTTPS, чем обеспечить невозможность подслушивать ваш сетевой трафик с интерфейсом, в моменты, когда вы пользуетесь им из общедоступных сетей (например через WiFi в кафе) Действовать будем по методу, описанному здесь

8. После получения сертификата нужно изменить конфигурационный файл nginx таким образом, чтобы он мог работать по HTTPS-протоколу:

server
{
    # Слушаем 80-й порт чтобы перенаправить пользователя на HTTPS
    listen *:80;
    server_name zabbix.mihanentalpo.me;
    # Перенаправляем на https
    return 301 https://$server_name$request_uri;	
}
server
{
    #имя сервера
    server_name zabbix.mihanentalpo.me;
	
    #Используем HTTPS
    listen *:443 ssl;
    
    #Настраиваем SSL:
    ssl on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_certificate /etc/letsencrypt/live/mihanentalpo.me/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/mihanentalpo.me/privkey.pem;

    #Корень такой, потому что zabbix лежит в /usr/share/zabbix, а открывается он только по адресу /zabbix
    root /usr/share;
 
    # Логи
    error_log /var/log/nginx/zabbix-error.log;
    access_log /var/log/nginx/zabbix-access.log;

    # Этот блок для получения SSL-сертификата Letsencrypt
    location ~ /.well-known
    {
        location ~ /.well-known/acme-challenge/(.*)
        {
            default_type "text/plain";
            root /var/www/letsencrypt;
        }
    }

    # Запретим доступ к скрытым файлам
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # При входе по адресу / перенаправляем в адрес /zabbix - только он и должен работать
    location / {
        return 301 http://$host/zabbix;
    }

    # Главная локация - всё что в папке /zabbix
    location ~ ^/zabbix/(.+)? {
        index index.php;
        
        # Все файлы *.php в этом location обрабатываются через php-fpm
        location ~ ^/zabbix/.*\.php(.*)$ {
            index index.php;            
            # Файл сокета, где будет слушать php-fpm
            fastcgi_pass unix:/var/run/php5-fpm-zabbix.sock;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    }
}

Оставить комментарий