Konfiguration Probleme auf NGINX (Plesk)

Hallo,

auf der Suche nach einer guten Google Analytics Alternative bin ich auf Matomo gestossen.

Nun habe ich es auf einer Subdomain soweit installiert.

Leider hänge ich nun an der Konfiguration auf NGINX (mein Webspace läuft mit Plesk) fest. Ich bekomme die nachfolgenden Punkte nicht in den Griff:

Systemprüfung:

  • Verzeichnisse, welche privat sein müssen
  • Empfohlene private Verzeichnisse
  • Server Info

Hinzu kommt noch:

  • [GoogleAnalyticsImporter] Erforderliche Executables (php)

Meine momentane nginx config:

# index.php rewrite
if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
}

# enable gzip compression
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain text/javascript application/javascript application/x-javascript text/xml text/css;
gzip_vary on;

# Expire
location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    expires max;
    log_not_found off;
}

add_header Referrer-Policy origin always; # make sure outgoing links don't show the URL to the Matomo instance
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;

## deny access to all other .php files
location ~* ^.+\.php$ {
    deny all;
    return 403;
}

## serve all other files normally
location / {
    try_files $uri $uri/ =404;
}

## disable all access to the following directories
location ~ ^/(config|tmp|core|lang) {
    deny all;
    return 403; # replace with 404 to not show these directories exist
}

location ~ /\.ht {
    deny  all;
    return 403;
}

location ~ js/container_.*_preview\.js$ {
    expires off;
    add_header Cache-Control 'private, no-cache, no-store';
}

location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
    allow all;
    ## Cache images,CSS,JS and webfonts for an hour
    ## Increasing the duration may improve the load-time, but may cause old files to show after an Matomo upgrade
    expires 1h;
    add_header Pragma public;
    add_header Cache-Control "public";
}

location ~ ^/(libs|vendor|plugins|misc|node_modules) {
    deny all;
    return 403;
}

## properly display textfiles in root directory
location ~/(.*\.md|LEGALNOTICE|LICENSE) {
    default_type text/plain;
}

Was übersehe ich bzw. wo

Für Hilfestellung bin dankbar!

VG Torsten

Was sind denn genau die Fehler, die du bei denen Checks bekommst?

Hallo Lukas,

nachfolgend der Systemcheck:

<details>
<summary>Click to view System Check</summary>

### Mandatory checks

#### PHP-Version >= 7.2.5:
 ✔ 8.0.3

#### PDO Erweiterung:
 ✔ 

#### PDO\MYSQL Erweiterung:
 ✔ 

#### MYSQLI Erweiterung:
 ✔ 

#### Weitere erforderliche Anforderungen:
 ✔ zlib ✔ json ✔ filter ✔ hash ✔ session

#### Erforderliche Funktionen:
 ✔ debug_backtrace ✔ eval ✔ hash ✔ gzcompress ✔ gzuncompress ✔ pack

#### Benötigte PHP Konfiguration (php.ini):
 ✔ session.auto_start = 0 ✔ max_execution_time = 0 OR = -1 OR >= 30

#### Verzeichnisse mit Schreibzugriff:
 ✔ $DOC_ROOT/tmp ✔ $DOC_ROOT/tmp/assets ✔ $DOC_ROOT/tmp/cache ✔ $DOC_ROOT/tmp/climulti ✔ $DOC_ROOT/tmp/latest ✔ $DOC_ROOT/tmp/logs ✔ $DOC_ROOT/tmp/sessions ✔ $DOC_ROOT/tmp/tcpdf ✔ $DOC_ROOT/tmp/templates_c

#### Verzeichnisse mit Schreibzugriff auf Tag Manager:
 ✔ $DOC_ROOT/js


### Optional checks

#### Verzeichnisse, welche privat sein müssen:
⚠ Error: $MATOMO_URLconfig/config.ini.php⚠ Error: $MATOMO_URLtmp/cache/tracker/matomocache_general.php
Wir haben festgestellt, dass auf die oben aufgelisteten URLs über den Browser zugegriffen werden kann, was aber NICHT so sein sollte. Der Zugriff kann ein mögliches Sicherheitsrisiko darstellen, weil der Inhalt Informationen über Ihren Server und potenziell über Ihre Benutzer enthält. Bitte beschränken Sie den Zugriff auf diese URLs.<br/><br/>Wir haben auch herausgefunden, dass Matomos Konfigurationsverzeichnis öffentlich zugänglich ist. Zwar können Angreifer die Konfigurationsdatei nicht lesen, jedoch sind Ihre MySQL Anmeldeinformationen und andere Informationen für jeden zugänglich, wenn Ihr Webserver aus irgend einem Grund aufhört, PHP Dateien auszuführen. Bitte prüfen Sie Ihre Webserverkonfiguration und verwehren Sie den Zugriff zu diesem Verzeichnis.<br/><br/>Erfahren Sie hier mehr darüber.
#### Empfohlene private Verzeichnisse:
⚠ Error: $MATOMO_URLtmp/ Wir haben die obenstehenden URLs gefunden, welche über den Browser erreichbar sind, aber wir empfehlen das zu unterbinden. Wenn möglich, schränken Sie bitte den Zugriff auf sie ein. Erfahren Sie hier mehr darüber.

#### Dateiintegrität:
 ✔ 

#### 64-bit PHP Binär:
 ✔ 

#### Tracker-Status:
 ✔ 

#### Speicherlimit:
 ✔ 1024M

#### Zeitzone:
 ✔ 

#### Öffnen einer URL:
 ✔ curl

#### PageSpeed deaktiviert:
 ✔ 

#### GD &gt; 2.x + Freetype (Graphiken):
 ✔ 

#### Andere Erweiterungen:
 ✔ json ✔ libxml ✔ dom ✔ SimpleXML ✔ openssl

#### Andere Funktionen:
 ✔ shell_exec ✔ set_time_limit ✔ mail ✔ parse_ini_file ✔ glob ✔ gzopen ✔ md5_file

#### Dateisystem:
 ✔ 

#### Cron einrichten (schneller ladende Berichte):
 ⚠ Warning: Für eine optimale Leistung und ein schnelles Matomo wird dringend empfohlen, einen Crontab einzurichten, um Ihre Berichte automatisch zu archivieren und das Auslösen durch den Browser in den Matomo-Einstellungen zu deaktivieren. Erfahren Sie mehr.

#### Cron einrichten - Prozesse via CLI steuern:
 nicht unterstützt (wahlweise) (Gründe: unbekannt) Erfahren Sie mehr

#### Datenbankfähigkeiten:
 ✔ UTF8mb4 charset ⚠ Warning: LOAD DATA INFILE<br/>Die Benutzung von LOAD DATA INFILE erhöht die Geschwindigkeit des Matomo Archivierungsprozesses erheblich. Um es für Matomo verfügbar zu machen, versuchen Sie Ihre PHP- und MySQL Software zu aktualisieren und stellen Sie sicher, dass der gewählte Datenbankbenutzer das FILE Recht besitzt.<br/>Falls Ihr Matomo Server Webseiten mit erhöhtem Verkehrsaufkommen (z. B.: &gt; 100.000 Seiten pro Monat) verarbeiten muss, empfehlen wir dieses Problem zu beheben.<br/><strong>Fehler:</strong> LOAD DATA INFILE failed... Error was: <br/>  Try #1: LOAD DATA INFILE : SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'web1212_analytics'@'%' (using password: YES)[28000],<br/>  Try #2: LOAD DATA LOCAL INFILE : SQLSTATE[42000]: Syntax error or access violation: 1148 The used command is not allowed with this MySQL version[42000]<br/>Troubleshooting: FAQ on matomo.org ✔ CREATE TEMPORARY TABLES ✔ Changing transaction isolation level

#### Maximale Packetgröße:
 ⚠ Warning: Es wird empfohlen die 'max_allowed_packet' Größe in Ihrer MySQL Datenbank auf mindestens 64MB zu erhöhen. Aktuell ist 16MB eingestellt.

#### Erzwungene SSL Verbindung:
 ✔ 

#### Standorterkennung:
 ✔ geoip2php (continent_code, continent_name, country_code, country_name, region_code, region_name, city_name, postal_code, lat, long)

#### Update über HTTPS:
 ✔ 

#### Schreibbarer JavaScript-Tracker ("/matomo.js"):
 ✔ 

#### [GoogleAnalyticsImporter] Benötigte PHP Funktionen:
 ✔ 

#### [GoogleAnalyticsImporter] Erforderliche Executables (php):
⚠ Error: Matomo kann die PHP executable nicht finden. Der Google Analytics Importer ruft PHP mit der Kommandozeile auf um zu importieren. Diese muss in PHP vorhanden und aufrufbar sein, damit der Importer funktioniert.

#### [GoogleAnalyticsImporter] Erforderliche Executables (nohup):
 ✔ 


### Informational results

#### Matomo Version:
 4.7.1

#### Matomo Update History:
 4.7.1,

#### Matomo Install Version:
 4.7.1

#### Latest Available Version:
 4.7.1

#### Is Git Deployment:
 0

#### PHP_OS:
 Linux

#### PHP_BINARY:
 /opt/plesk/php/8.0/sbin/php-fpm

#### PHP SAPI:
 ⚠ Warning: fpm-fcgi<br><br>PHP FPM ignoriert die .htaccess-Regeln für .php-Dateien. Um sicherzustellen, dass auf sensible Dateien nicht direkt zugegriffen werden kann, wird empfohlen, bestimmte Verzeichnisse von der Bearbeitung durch "PHP FPM" auszuschließen. Weitere Informationen finden Sie in der  offiziellen nginx-Serverkonfiguration 

#### Timezone Version:
 0.system

#### PHP Timezone:
 UTC

#### PHP Time:
 1646050236

#### PHP Datetime:
 2022-02-28 12:10:36

#### PHP Disabled functions:
 opcache_get_status

#### PHP INI max_execution_time:
 360

#### PHP INI post_max_size:
 512M

#### PHP INI max_input_vars:
 1000

#### PHP INI zlib.output_compression:
 

#### Curl Version:
 7.47.0, OpenSSL/1.0.2g

#### Suhosin Installed:
 0

#### DB Prefix:
 matomo_

#### DB Charset:
 utf8mb4

#### DB Adapter:
 PDO\MYSQL

#### MySQL Version:
 5.7.33-0ubuntu0.16.04.1

#### Num Tables:
 46

#### Browser Segment Archiving Enabled:
 1

#### Development Mode Enabled:
 0

#### Internet Enabled:
 1

#### Multi Server Environment:
 0

#### Auto Update Enabled:
 1

#### Custom User Path:
 0

#### Custom Include Path:
 0

#### Release Channel:
 latest_stable

#### Plugins Activated:
 API, Actions, Annotations, BulkTracking, Contents, CoreAdminHome, CoreConsole, CoreHome, CorePluginsAdmin, CoreUpdater, CoreVisualizations, CoreVue, CustomAlerts 4.0.3, CustomDimensions, CustomJsTracker, DBStats, Dashboard, DevicePlugins, DevicesDetection, Diagnostics, Ecommerce, Events, FacebookPageWidgetByAmperage 1.0.7, Feedback, GeoIp2, Goals, GoogleAnalyticsImporter 4.1.10, Heartbeat, ImageGraph, Insights, Installation, Intl, IntranetMeasurable, LanguagesManager, Live, Login, MarketingCampaignsReporting 4.1.1, Marketplace, MobileMessaging, Monolog, Morpheus, MultiSites, Overlay, PagePerformance, PrivacyManager, ProfessionalServices, Provider 4.0.3, Proxy, Referrers, Resolution, RssWidget, SEO, ScheduledReports, SegmentEditor, SitesManager, TagManager, Tour, Transitions, TwoFactorAuth, UserCountry, UserCountryMap, UserId, UserLanguage, UsersManager, VisitFrequency, VisitTime, VisitorInterest, VisitsSummary, WebsiteMeasurable, Widgetize

#### Plugins Deactivated:
 MobileAppMeasurable

#### Plugins Invalid:
 

#### Server Info:
 ⚠ Warning: nginx/1.18.0<br><br>Um sicherzustellen, dass auf sensible Dateien nicht direkt zugegriffen werden kann, wird empfohlen, Ihren Webserver so zu konfigurieren, dass der Zugriff auf bestimmte Verzeichnisse eingeschränkt wird. Weitere Informationen finden Sie in der  offiziellen nginx-Serverkonfiguration 

#### Had visits in last 1 day:
 1

#### Had visits in last 3 days:
 1

#### Had visits in last 5 days:
 1

#### Archive Time Last Started:
 0

#### Archive Time Last Finished:
 0

#### User Agent:
 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Safari/605.1.15

#### Browser Language:
 de-de,de

#### Total Invalidation Count:
 14

#### In Progress Invalidation Count:
 0

#### Scheduled Invalidation Count:
 14

#### Earliest invalidation ts_started:
 

#### Latest invalidation ts_started:
 

#### Earliest invalidation ts_invalidated:
 2022-02-26 07:47:54

#### Latest invalidation ts_invalidated:
 2022-02-28 01:29:25

#### Number of segment invalidations:
 0

#### Number of plugin invalidations:
 0

#### List of plugins being invalidated:
 

#### Anonymize Referrer:
 

#### Do Not Track enabled:
 1

</details>

und

Wir haben festgestellt, dass auf die oben aufgelisteten URLs über den Browser zugegriffen werden kann, was aber NICHT so sein sollte. Der Zugriff kann ein mögliches Sicherheitsrisiko darstellen, weil der Inhalt Informationen über Ihren Server und potenziell über Ihre Benutzer enthält. Bitte beschränken Sie den Zugriff auf diese URLs.

Wir haben auch herausgefunden, dass Matomos Konfigurationsverzeichnis öffentlich zugänglich ist. Zwar können Angreifer die Konfigurationsdatei nicht lesen, jedoch sind Ihre MySQL Anmeldeinformationen und andere Informationen für jeden zugänglich, wenn Ihr Webserver aus irgend einem Grund aufhört, PHP Dateien auszuführen. Bitte prüfen Sie Ihre Webserverkonfiguration und verwehren Sie den Zugriff zu diesem Verzeichnis.

Was passiert wenn man https://matomo.example/tmp/cache/tracker/matomocache_general.php im Browser aufruft? Wird sie wirklich mit einem 403 blockiert (wie die nginx config nahelegen würde)?

Dann kommt eine Login Seite. Also kein 403. Irgendetwas scheint mit der NGINX conf. nicht zu stimmen.

Kann es vielleicht an dem Block liegen?

Falls du dir aber sicher bist, dass die Weiterleitungen funktionieren und niemand auf die originalen URLs zugreifen kann, kannst du die Warnungen natürlich auch ignorieren.

Sicher bin ich mir nicht … somit möchte ich das so anpassen das es passt.

Ein Fehler aus heiterem Himmel einfach verschwunden.

Es bleiben noch folgende:

#### Verzeichnisse, welche privat sein müssen:
⚠ Error: $MATOMO_URLconfig/config.ini.php⚠ Error: $MATOMO_URLtmp/cache/tracker/matomocache_general.php
Wir haben festgestellt, dass auf die oben aufgelisteten URLs über den Browser zugegriffen werden kann, was aber NICHT so sein sollte. Der Zugriff kann ein mögliches Sicherheitsrisiko darstellen, weil der Inhalt Informationen über Ihren Server und potenziell über Ihre Benutzer enthält. Bitte beschränken Sie den Zugriff auf diese URLs.<br/><br/>Wir haben auch herausgefunden, dass Matomos Konfigurationsverzeichnis öffentlich zugänglich ist. Zwar können Angreifer die Konfigurationsdatei nicht lesen, jedoch sind Ihre MySQL Anmeldeinformationen und andere Informationen für jeden zugänglich, wenn Ihr Webserver aus irgend einem Grund aufhört, PHP Dateien auszuführen. Bitte prüfen Sie Ihre Webserverkonfiguration und verwehren Sie den Zugriff zu diesem Verzeichnis.<br/><br/>Erfahren Sie hier mehr darüber.
#### Empfohlene private Verzeichnisse:
⚠ Error: $MATOMO_URLtmp/⚠ Error: $MATOMO_URLtmp/empty⚠ Error: $MATOMO_URLlang/en.json Wir haben die obenstehenden URLs gefunden, welche über den Browser erreichbar sind, aber wir empfehlen das zu unterbinden. Wenn möglich, schränken Sie bitte den Zugriff auf sie ein. Erfahren Sie hier mehr darüber.

#### PHP SAPI:
 ⚠ Warning: fpm-fcgi<br><br>PHP FPM ignoriert die .htaccess-Regeln für .php-Dateien. Um sicherzustellen, dass auf sensible Dateien nicht direkt zugegriffen werden kann, wird empfohlen, bestimmte Verzeichnisse von der Bearbeitung durch "PHP FPM" auszuschließen. Weitere Informationen finden Sie in der  offiziellen nginx-Serverkonfiguration 

Ich bin ratlos was nun zu tun ist dieses zu erreichen. Ich bin für Ratschläge dankbar.