Настройка Nginx для GLPI и OsTicket: пошаговая инструкция по совместной работе двух приложений на одном сервере
Руководство по настройке веб-сервера Nginx для размещения двух популярных систем технической поддержки и учёта IT-активов: GLPI и OsTicket. В данном материале рассматривается настройка Nginx с SSL, PHP-FPM и поддиректорией /tickets/ на примере домена help.itforprof.com
Особенностью данной конфигурации является то, что два приложения работают на одном сервере Nginx: GLPI — в корне сайта, а OsTicket — в поддиректории /tickets/, оба через PHP-FPM.
Требования к окружению
Конфигурация протестирована на следующем стеке:
- ОС: Ubuntu 22.04 / 24.04 LTS
- Nginx: 1.24.x — 1.26.x
- PHP: 8.2-FPM
- GLPI: 10.0.x
- OsTicket: 1.18.x
- СУБД: MariaDB 10.6+
Предварительные требования
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/.
Обратите внимание: для OsTicket используется директива alias (а не root), поскольку приложение размещено в поддиректории — это ключевое отличие alias vs root в Nginx.
Настройка Nginx предполагает следующую структуру каталогов:
/var/www/glpi # Файлы GLPI
/var/www/osticket/upload # Файлы OsTicket
Настройка Nginx: полный конфигурационный файл
Ниже приведён полный конфигурационный файл, расположенный по адресу:
/etc/nginx/sites-enabled/help_https.conf
Важно: Настройка Nginx включает редирект HTTP → HTTPS, SSL-сертификат, заголовки безопасности, защиту чувствительных каталогов GLPI и OsTicket, а также маршрутизацию API OsTicket. Далее каждый блок разбирается построчно.

# Редирект HTTP → HTTPS
server {
listen 80;
server_name help.itforprof.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on; # Для Nginx < 1.25.1 используйте: 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; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "0" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# add_header Content-Security-Policy "default-src 'self'; ..." always;
client_max_body_size 200m;
# Кэширование только для статических файлов
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot)$ {
add_header Cache-Control "public, max-age=8640000";
access_log off;
}
# Защита служебных файлов
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;
# Запрет доступа к каталогу include (конфиги OsTicket)
location ~ /tickets/include {
deny all;
return 403;
}
# Маршрутизация API OsTicket
location ~ ^/tickets/api/(?:tickets|tasks).*$ {
try_files $uri $uri/ /tickets/api/http.php?$query_string;
}
# AJAX для admin-панели (SCP)
location ~ ^/tickets/scp/ajax.php/.*$ {
try_files $uri $uri/ /tickets/scp/ajax.php?$query_string;
}
# Обработка PHP
location ~ ^/tickets/(.+\.php)(/.*)?$ {
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;
access_log /var/log/nginx/osticket_access.log;
error_log /var/log/nginx/osticket_error.log;
}
try_files $uri $uri/ /tickets/index.php?$query_string;
}
# === GLPI ===
# Защита внутренних каталогов GLPI
location ~ ^/(config|files|lib|locales|install|phpunit|tests|tools|vendor)/ {
deny all;
return 403;
}
location / {
root /var/www/glpi;
index index.php;
try_files $uri /public/index.php$is_args$args;
access_log /var/log/nginx/glpi_access.log;
error_log /var/log/nginx/glpi_error.log;
}
location ~ \.php$ {
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;
access_log /var/log/nginx/glpi_access.log;
error_log /var/log/nginx/glpi_error.log;
}
}
Разбор конфигурации
Настройка Nginx для совместной работы GLPI и OsTicket опирается на несколько ключевых директив. Рассмотрим каждую из них.
Редирект HTTP → HTTPS
Первый блок server на порту 80 перенаправляет все HTTP-запросы на HTTPS с кодом 301 (Moved Permanently). Без этого блока пользователи, набравшие адрес без https://, получат ошибку подключения.
Основные директивы и SSL
1. listen 443 ssl; и http2 on;
Указывает, что сервер принимает запросы на порт 443 по HTTPS с поддержкой HTTP/2.
Важно: Начиная с Nginx 1.25.1 (июнь 2023), параметр http2 в директиве listen объявлен deprecated. Вместо listen 443 ssl http2; используйте отдельную директиву http2 on;. Для Nginx версий ниже 1.25.1 оставьте старый синтаксис: listen 443 ssl http2;
2. ssl_certificate и ssl_certificate_key
Пути к файлам SSL-сертификата и его приватному ключу. Сертификат обеспечивает шифрование соединения.
3. server_name help.itforprof.com;
Имя сервера (домен), к которому будет обращаться браузер.
Заголовки безопасности
Настройка Nginx включает четыре заголовка безопасности:
- Strict-Transport-Security с includeSubDomains — заставляет браузер всегда использовать HTTPS в течение указанного времени (в секундах), включая поддомены.
- X-Content-Type-Options “nosniff” — запрещает браузеру определять тип контента самостоятельно («MIME-sniffing»).
- X-XSS-Protection “0” — заголовок X-XSS-Protection официально устарел (deprecated). Chrome удалил XSS Auditor в версии 78 (2019), Firefox его никогда не поддерживал. По рекомендации OWASP, значение 1; mode=block может создавать дополнительные уязвимости. Вместо него используйте заголовок Content-Security-Policy (CSP).
- Referrer-Policy “strict-origin-when-cross-origin” — современный заголовок безопасности, рекомендованный OWASP, контролирует передачу заголовка Referer.
Кэширование статических файлов
Важно: Заголовок Cache-Control применяется только к статике (CSS, JS, изображения, шрифты) через отдельный блок location. Не следует применять Cache-Control на уровне server ко всем ответам — это приведёт к кэшированию динамических PHP-страниц (тикеты, формы, авторизация) и проблемам в продакшене.
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 (/tickets/)
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;
# Запрет доступа к /include/
location ~ /tickets/include {
deny all;
return 403;
}
# Маршрутизация API
location ~ ^/tickets/api/(?:tickets|tasks).*$ {
try_files $uri $uri/ /tickets/api/http.php?$query_string;
}
# AJAX для admin-панели
location ~ ^/tickets/scp/ajax.php/.*$ {
try_files $uri $uri/ /tickets/scp/ajax.php?$query_string;
}
...
}
• alias /var/www/osticket/upload/;
Заменяет путь /tickets/ на физический каталог /var/www/osticket/upload/.
• index index.php;
При обращении к /tickets/ запускается index.php OsTicket.
• access_log и error_log указывают, где хранятся логи для удобства мониторинга.
Защита каталога /include/:
Блок location ~ /tickets/include { deny all; } запрещает доступ к каталогу /include/, в котором хранятся конфигурационные файлы OsTicket с паролями БД и другими чувствительными данными.
Маршрутизация API и SCP:
Блоки для /tickets/api/ и /tickets/scp/ajax.php обеспечивают корректную работу REST API тикетов и AJAX-запросов в админ-панели (SCP). Без этих блоков часть функциональности OsTicket может не работать.
Настройка Nginx дополняется внутренним блоком обработки PHP:
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: настройка Nginx для корня сайта
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;
Настройка Nginx для GLPI: все запросы к / обрабатываются из каталога /var/www/glpi.
Примечание о безопасности: Начиная с GLPI 10.0.7, официальная документация рекомендует указывать root на /var/www/glpi/public. В нашей конфигурации root указывает на /var/www/glpi, а try_files перенаправляет в /public/index.php — это необходимо из-за совместного размещения с OsTicket. Для защиты чувствительных каталогов (config, files, vendor и др.) добавлен отдельный блок location с deny all.
• try_files $uri /public/index.php$is_args$args;
Если запрашиваемый файл не найден, то запрос направляется в /public/index.php, используя параметры GET ($args).
location ~ \.php$ {
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;
access_log /var/log/nginx/glpi_access.log;
error_log /var/log/nginx/glpi_error.log;
}
• location ~ \.php$ { … }
Обработчик всех PHP-файлов в корне.
• fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Определяет физический путь исполняемого PHP-файла.
Примечание: В оригинальной конфигурации использовалась директива proxy_cookie_path / “/; secure; HttpOnly”, однако она предназначена для проксируемых ответов и не работает с fastcgi_pass. Для настройки атрибутов cookie (secure, HttpOnly) в PHP-FPM лучше использовать session.cookie_secure и session.cookie_httponly в php.ini или через fastcgi_param PHP_VALUE.
Проверка и запуск конфигурации
После того как настройка Nginx завершена, выполните проверку синтаксиса и перезагрузите веб-сервер:
1. Проверка конфигурации:
nginx -t
Ожидаемый результат: nginx: configuration file /etc/nginx/nginx.conf test is successful
2. Перезагрузка Nginx:
systemctl reload nginx
3. Проверка заголовков ответа:
curl -I https://help.itforprof.com
Убедитесь, что в ответе присутствуют заголовки Strict-Transport-Security, X-Content-Type-Options и Referrer-Policy.
Типичные ошибки и их решение
• 502 Bad Gateway — проверьте, что PHP-FPM запущен и сокет соответствует вашей версии PHP: systemctl status php8.2-fpm
• 403 Forbidden — проверьте права доступа к каталогам GLPI и OsTicket (владелец www-data).
• Ошибка PATH_INFO в OsTicket — убедитесь, что директивы fastcgi_split_path_info и fastcgi_param PATH_INFO присутствуют в блоке OsTicket.
• GLPI показывает предупреждение о безопасности — это связано с тем, что root указывает на /var/www/glpi, а не на /var/www/glpi/public. Блок deny all для внутренних каталогов (config, files, vendor) компенсирует это.
• Ошибки в логах — раздельные лог-файлы позволяют быстро локализовать проблему: tail -f /var/log/nginx/glpi_error.log или tail -f /var/log/nginx/osticket_error.log. Для постоянного отслеживания рекомендуем настроить комплексный мониторинг сервера.
Итог
Настройка Nginx для GLPI и OsTicket на одном сервере позволяет:
• Обслуживать GLPI с корневого адреса домена (/), используя каталог /var/www/glpi.
• Обслуживать OsTicket по адресу /tickets/, используя каталог /var/www/osticket/upload/.
• Работать по HTTPS с поддержкой HTTP/2 и современными заголовками безопасности.
• Защищать чувствительные каталоги GLPI и OsTicket от прямого доступа. Для дополнительного контроля целостности файлов на сервере рекомендуем ознакомиться с настройкой AIDE.
• Обеспечивать корректную работу API OsTicket и маршрутизацию PATH_INFO.
• Контролировать логи и удобнее вести отладку благодаря раздельным лог-файлам.
Нужна помощь с настройкой Nginx, GLPI или OsTicket? Мы выполним установку, настройку и тестирование под ключ в рамках нашей услуги «Администрирование серверов». Оставьте заявку — мы свяжемся с вами!

