LimeSurvey nginx Beispielkonfiguration
From LimeSurvey Manual
Nginx-Konfigurationsbeispiel für LimeSurvey
Nachfolgend finden Sie eine Beispielkonfiguration für die Ausführung von LimeSurvey mit nginx und PHP-FPM. Passen Sie Pfade, Domainnamen und PHP-FPM-Socket-/Port-Einstellungen an Ihre Serverkonfiguration an.
Hinweis: Dies ist ein einfaches Beispiel. Überprüfen und passen Sie es stets an Ihre eigenen Sicherheitsanforderungen an, bevor Sie es in der Produktion einsetzen.
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;
}
}
Erläuterung der wichtigsten Direktiven
fastcgi_pass: Verweist auf den PHP-FPM-Socket oder die TCP-Adresse, die PHP-Anfragen verarbeitet. Passen Sie dies an Ihre PHP-FPM-Pool-Konfiguration an.try_files: Stellt sicher, dass URLs korrekt über den Front-Controller von LimeSurvey (index.php) geleitet werden.client_max_body_size: Erhöht die maximale Upload-Größe, nützlich für Umfragen mit Fragen zum Datei-Upload.- Verweigerungsregeln: Blockieren den direkten Webzugriff auf Konfigurationsdateien, Protokolle und Anwendungsverzeichnisse, die niemals öffentlich erreichbar sein sollten. nginx prüft Locations mit Regulären Ausdrücken in der Reihenfolge, in der sie erscheinen, und der erste Treffer gewinnt. Platzieren Sie die Verweigerungsregeln oberhalb der PHP-Location, da sonst PHP-Dateien in diesen Verzeichnissen ausgeführt statt verweigert werden.
- Installation in einem Unterverzeichnis: Das Beispiel geht davon aus, dass LimeSurvey im Document Root installiert ist. Wenn Sie es in einem Unterverzeichnis installieren, fügen Sie das Unterverzeichnis zu den Pfaden der Verweigerungsregeln hinzu, zum Beispiel
location ^~ /limesurvey/vendor/.