Приклад конфігурації nginx для LimeSurvey
From LimeSurvey Manual
Приклад конфігурації Nginx для LimeSurvey
Нижче наведено приклад конфігурації для запуску LimeSurvey за допомогою nginx і PHP-FPM. Змініть шляхи, доменні імена та налаштування сокета/порту PHP-FPM відповідно до налаштувань вашого сервера.
Примітка: Це базовий приклад. Завжди перевіряйте та адаптуйте його відповідно до ваших вимог безпеки, перш ніж використовувати в робочому середовищі.
server {
listen 80;
server_name survey.example.com;
# Redirect all HTTP traffic to HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name survey.example.com;
root /var/www/limesurvey;
index index.php;
# SSL certificates
ssl_certificate /etc/ssl/certs/survey.example.com.crt;
ssl_certificate_key /etc/ssl/private/survey.example.com.key;
# Recommended SSL settings
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
client_max_body_size 100M;
access_log /var/log/nginx/limesurvey_access.log;
error_log /var/log/nginx/limesurvey_error.log;
location / {
index index.html index.php;
try_files $uri $uri/ /index.php?$args;
}
# Deny access to directories that are only used on the server
# ^~ gives these locations priority over the PHP location below, so PHP files in them are never executed
location ^~ /application/ { deny all; }
location ^~ /vendor/ { deny all; }
location ^~ /docs/ { deny all; }
location ^~ /locale/ { deny all; }
location ^~ /modules/ { deny all; }
location ^~ /tmp/runtime/ { deny all; }
location ^~ /tests/ { deny all; }
# Uploaded files: never execute scripts, never deliver files uploaded by participants directly
location ^~ /upload/ {
location ~* \.(php\d?|phtml|pl|py|pyc|pyo|cgi|pcgi\d?|sh|lua|icn)$ {
deny all;
}
location ~ ^/upload/surveys/.*/fu_[a-z0-9_]*$ {
deny all;
}
try_files $uri =404;
}
# Regular expression locations are checked in order and the first match wins,
# so all deny rules below must stay above the PHP location
# Deny access to hidden files and directories, except .well-known
location ~ /\.(?!well-known) {
deny all;
}
# Deny access to the internal directories of the KCFinder file manager
location ~ ^/assets/packages/kcfinder/(conf|core|doc|integration|lang|lib|tpl)/ {
deny all;
}
# Deny access to development, build and debug files in the LimeSurvey root directory
location ~ ^/(setdebug\.php|open-api-gen\.php|composer\.(json|lock)|package\.json|yarn\.lock|gulpfile\.js|phpunit\.xml|psalm(-\w+)?\.xml|phpci\.yml|phpcs\.ruleset\.xml|publiccode\.yml|manifest\.yml|CONTRIBUTING\.md|README\.md|SECURITY\.md)$ {
deny all;
}
location ~* \.(log|sql|htaccess)$ {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Пояснення ключових директив
fastcgi_pass: вказує на сокет PHP-FPM або TCP-адресу, що обробляє запити PHP. Змініть його відповідно до конфігурації вашого пулу PHP-FPM.try_files: забезпечує правильну маршрутизацію URL-адрес через фронт-контролер LimeSurvey (index.php).client_max_body_size: збільшує максимальний розмір файлів, які можна завантажити, що корисно для опитувань із запитаннями із завантаженням файлів.- Правила заборони: блокують прямий веб-доступ до конфігураційних файлів, журналів і каталогів застосунку, які ніколи не повинні бути публічно доступними. nginx перевіряє розташування з регулярними виразами в порядку їх появи, і спрацьовує перший збіг. Розміщуйте правила заборони вище за розташування PHP, інакше PHP-файли в цих каталогах будуть виконуватися, а не блокуватися.
- Встановлення в підкаталозі: у прикладі передбачається, що LimeSurvey встановлено в кореневому каталозі документів. Якщо ви встановлюєте його в підкаталозі, додайте цей підкаталог до шляхів у правилах заборони, наприклад
location ^~ /limesurvey/vendor/.