Пошаговая инструкция по настройке Nginx для работы GLPI в корне сайта и OsTicket по адресу /tickets/
Руководство по настройке веб-сервера Nginx для размещения двух популярных систем технической поддержки и учёта IT-активов: GLPI и OsTicket. В данном материале мы рассмотрим установку и настройку на примере домена help.itforprof.com
Особенностью данной конфигурации является то, что OsTicket работает не в корне сайта, а в директории /tickets/ и использует Nginx + php-fpm.
Предварительные требования
1. Установленный веб-сервер Nginx
Убедитесь, что Nginx установлен и работает на вашем сервере.
2. Установленная СУБД MySQL (MariaDB)
Обе платформы (GLPI и OsTicket) требуют для работы базу данных MySQL или MariaDB.
3. Установленный PHP-FPM
Для корректной работы PHP-скриптов (как в GLPI, так и в OsTicket) необходимо использовать PHP-FPM. В данном конфигурационном файле указан сокет php8.2-fpm. Если у вас установлена другая версия PHP, замените путь сокета на соответствующий.
4. SSL-сертификат
Настройка предполагает работу по протоколу HTTPS (порт 443). Сертификат можно выпустить любым удобным способом, например, через:
В конфигурационном файле Nginx указывается путь к этим файлам сертификатов и ключу:
ssl_certificate /path_to_cert/help.itforprof.com_ecc/fullchain.cer;
ssl_certificate_key /path_to_cert/help.itforprof.com_ecc/help.itforprof.com.key;
Где располагаются GLPI и OsTicket
• GLPI: в корне сайта /, физически в каталоге /var/www/glpi.
• OsTicket: по адресу /tickets/, физически в каталоге /var/www/osticket/upload/.
Структура каталогов:
/var/www/glpi # Файлы GLPI
/var/www/osticket/upload # Файлы OsTicket
Конфигурационный файл Nginx
Ниже приведён полный конфигурационный файл, расположенный по адресу:
/etc/nginx/sites-enabled/help_https.conf
Внимание! Конфиг не обрезан и не изменён — приводим его целиком, затем разберём построчно.
server {
listen 443 ssl http2;
ssl_certificate /path_to_cert/help.itforprof.com_ecc/fullchain.cer;
ssl_certificate_key /path_to_cert/help.itforprof.com_ecc/help.itforprof.com.key;
server_name help.itforprof.com;
add_header Strict-Transport-Security max-age=31536000;
add_header Cache-Control "public, max-age=8640000";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
client_max_body_size 200m;
location ~ /\.ht {
deny all;
}
location = /robots.txt {
add_header Content-Type text/plain;
return 200 "User-agent: *\nDisallow: /\n";
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location ^~ /.well-known/acme-challenge/ {
root /tmp;
allow all;
default_type "text/plain";
}
#OsTicket
location ^~ /tickets/ {
alias /var/www/osticket/upload/;
index index.php;
access_log /var/log/nginx/osticket_access.log;
error_log /var/log/nginx/osticket_error.log;
location ~ ^/tickets/(.+\.php)(/.*)?$ {
error_log /var/log/nginx/osticket_error.log;
access_log /var/log/nginx/osticket_access.log;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_split_path_info ^/tickets/(.+\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PHP_VALUE "cgi.fix_pathinfo=1";
fastcgi_param HTTPS on;
include fastcgi_params;
}
try_files $uri $uri/ /tickets/index.php?$query_string;
}
#GLPI
location / {
error_log /var/log/nginx/glpi_error.log;
access_log /var/log/nginx/glpi_access.log;
root /var/www/glpi;
index index.php;
try_files $uri /public/index.php$is_args$args;
}
location ~ \.php$ {
error_log /var/log/nginx/glpi_error.log;
access_log /var/log/nginx/glpi_access.log;
root /var/www/glpi;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_COOKIE $http_cookie;
fastcgi_param HTTPS on;
proxy_cookie_path / "/; secure; HttpOnly";
}
}
Построчный разбор конфигурационного файла
Рассмотрим ключевые директивы, которые влияют на работу GLPI и OsTicket.
1. listen 443 ssl http2;
Указывает, что сервер принимает запросы на порт 443 по протоколу HTTPS и поддерживает HTTP/2.
2. ssl_certificate /…/fullchain.cer; и ssl_certificate_key /…/help.itforprof.com.key;
Пути к файлам SSL-сертификата и его приватному ключу. Сертификат обеспечивает шифрование соединения.
3. server_name help.itforprof.com;
Имя сервера (домен), к которому будет обращаться браузер.
4. Безопасные заголовки:
- add_header Strict-Transport-Security max-age=31536000;
Заставляет браузер всегда использовать HTTPS в течение указанного времени (в секундах).
- add_header Cache-Control «public, max-age=8640000»;
Управляет кэшированием. max-age=8640000 секунд (примерно 100 дней).
- add_header X-Content-Type-Options «nosniff»;
Запрещает браузеру определять тип контента самостоятельно («MIME-sniffing»).
- add_header X-XSS-Protection «1; mode=block»;
Включает встроенный механизм защиты от XSS-векторных атак в браузерах.
5. client_max_body_size 200m;
Ограничивает максимальный размер загружаемых файлов до 200 МБ. Это нужно, например, при загрузке вложений в систему поддержки.
6. location~/\.ht { deny all; }
Защищает .ht* файлы (например, .htaccess) от прямого доступа.
7. location= /robots.txt { … }
Определяет поведение для файла robots.txt, который запрещает индексировать сайт поисковым системам. (Если хотите разрешить, отредактируйте это).
8. location= /favicon.ico { … }
Оптимизация логов — отключается вывод об отсутствии favicon.
9. location^~ /.well-known/acme-challenge/ { … }
Директива, позволяющая верифицировать домен при выпуске сертификатов через ACME-клиенты (certbot, acme.sh). Папка /tmp выбрана как пример для хранения challenge-файлов
Блок OsTicket
location ^~ /tickets/ {
alias /var/www/osticket/upload/;
index index.php;
access_log /var/log/nginx/osticket_access.log;
error_log /var/log/nginx/osticket_error.log;
...
}
• alias /var/www/osticket/upload/;
Заменяет путь /tickets/ на физический каталог /var/www/osticket/upload/.
• index index.php;
При обращении к /tickets/ запускается index.php OsTicket.
• access_log и error_log указывают, где хранятся логи для удобства мониторинга.
Далее внутри этого блока:
location ~ ^/tickets/(.+\.php)(/.*)?$ {
error_log /var/log/nginx/osticket_error.log;
access_log /var/log/nginx/osticket_access.log;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_split_path_info ^/tickets/(.+\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PHP_VALUE "cgi.fix_pathinfo=1";
fastcgi_param HTTPS on;
include fastcgi_params;
}
• fastcgi_pass unix:/run/php/php8.2-fpm.sock;
Указывает, что обработка PHP-сценариев идёт через сокет PHP-FPM (версии 8.2).
• fastcgi_split_path_info ^/tickets/(.+\.php)(/.*)$;
Делит URI на две части: скрипт и дополнительный путь.
• set $path_info $fastcgi_path_info;
Устанавливает переменную $path_info, чтобы передать её в OsTicket.
• fastcgi_param PATH_INFO $path_info;
Передача $path_info в окружение PHP. Зачем это нужно в OsTicket?
o OsTicket (как и некоторые другие PHP-приложения) использует «PATH_INFO» для корректной маршрутизации и работы с «дружественными» URL. Если этот параметр не передавать, система может некорректно обрабатывать некоторые запросы, связанные с путями внутри /tickets.
• fastcgi_param SCRIPT_FILENAME $request_filename;
Сообщает PHP-FPM, какой файл должен быть интерпретирован как скрипт.
• fastcgi_param PHP_VALUE «cgi.fix_pathinfo=1»;
Дополнительная настройка для корректной обработки путей при работе с PHP в CGI-режиме.
Наконец:
try_files $uri $uri/ /tickets/index.php?$query_string;
• try_files
Пытается найти реальный файл или директорию, если не находит — перенаправляет на index.php с исходными параметрами ?$query_string.
Блок GLPI
location / {
error_log /var/log/nginx/glpi_error.log;
access_log /var/log/nginx/glpi_access.log;
root /var/www/glpi;
index index.php;
try_files $uri /public/index.php$is_args$args;
}
• root /var/www/glpi;
Все запросы к / обрабатываются файловым каталогом GLPI.
• try_files $uri /public/index.php$is_args$args;
Если запрашиваемый файл не найден, то запрос направляется в /public/index.php, используя параметры GET ($args).
location ~ \.php$ {
error_log /var/log/nginx/glpi_error.log;
access_log /var/log/nginx/glpi_access.log;
root /var/www/glpi;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_COOKIE $http_cookie;
fastcgi_param HTTPS on;
proxy_cookie_path / "/; secure; HttpOnly";
}
• location ~ \.php$ { … }
Обработчик всех PHP-файлов в корне.
• fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Определяет физический путь исполняемого PHP-файла.
• proxy_cookie_path / «/; secure; HttpOnly»;
Настраивает атрибуты secure; HttpOnly для cookie. Это повышает безопасность, запрещая доступ к cookies через JS и передавая их только по HTTPS.
Вывод
В итоге получаем единую конфигурацию Nginx, которая позволяет:
• Обслуживать GLPI с корневого адреса домена (/), используя каталог /var/www/glpi.
• Обслуживать OsTicket по адресу /tickets/, используя каталог /var/www/osticket/upload/.
• Работать по HTTPS (порт 443), используя выданный сертификат.
• Безопасно обрабатывать файлы PHP через php-fpm.
• Контролировать логи и удобнее вести отладку благодаря раздельным лог-файлам.
• Передавать переменную $path_info в OsTicket для корректной маршрутизации.
Если у вас возникли сложности или вопросы при настройке, мы будем рады помочь. Обращайтесь к специалистам itforprof.com за профессиональной поддержкой, чтобы быть уверенными в бесперебойной и безопасной работе ваших сервисов!