Neu Nginx Konfiguration für JTL Shop 5

  • Hinweis: Am 25.02.2025 zwischen 21:30 u. 22:30 Uhr - Einschränkungen beim Login und Erreichen folgender Dienste: FFN, Kundencenter, Admin, JTL-Shop, JTL-Wawi, Lizenzserver, ISI Gateway, Vouchers, Kassensysteme, Plan&Produce, Versand. Grund dafür ist ein Major Upgrade des OAuth-Dienstes. Vielen Dank für euer Verständnis!

exe

Guest
Hi, wir setzen bei uns auch den Nginx ein nur haben wir leider keine "offizielle" Nginx-Konfiguration. Der Shop ist sehr stark auf den Apache-Webserver ausgerichtet und dort ist er am sichersten mit dem Shop aufgehoben.
 

csaeum

Sehr aktives Mitglied
23. Juli 2011
1.329
147
Küps
Also dann selbst machen

Okay dann schaue ich mal, wäre halt schön wenn JTL selbst eine Nginx konfiguration rausgeben würde. Weil sich dann immer mit den Worten: "Ist offiziell nicht vorgesehen und daher bitte den Shop auf einen Apache laufen lassen" bei Problemen rausreden finde ich halt traurig.

Ich selbst habe es 2015 schonmal probiert und bin dann erstmal zurückgerudert weil bei einer anderen Sprache er fehler produzierte.
Ein Moderator meinte dann er lässt uns mal eine zukommen aber den Post finde ich nicht mehr.
 

exe

Guest
Momentan ja.

Ich denke nicht, dass es um herausreden geht, sondern es hat viel mit Wissen und Erfahrung zu tun und im Nginx gibt es andere Anforderungen als im Apache. Ich persönlich habe kein Problem den Shop mit Nginx laufen zu lassen (Was ich ja mache). Ein Problem sehe ich bei den jeweiligen individuellen Einstellungen (Plugins und Konfigurationen) die sind nun mal in der Kombination unendlich. Beim Apache hat man Erfahrungen mit Millionen von Kombinationen gemacht und auch die Entwicklungen der Plugins wurden auf das Verhalten vom Apache/Kunden angepasst.

Man kann hier gerne eine Konfiguration in der Community entwickeln und von den einzelnen Anforderungen/Erfahrungen lernen.
 

exe

Guest
Die beiden Serverblöcke sind _wirklich_ nur zum Testen gedacht und wer damit zum JTL-Support rennt... vergesst es :)

NICHT FÜR PRODUKTION GEDACHT UND OHNE SUPPORT !

Der Konfiguration fehlen etliche Nginx-Einstellungen ... die möchte ich aber jetzt nicht hier an dieser Stelle lösen - nur JTL- Shop Funktionalität !

Fangen wir einfach mal an: Shop5 Konfiguration ab Nginx 1.18.0

Für Implementierungen via FCGI
NGINX:
# Version 1.2 [Updated:22.01.2024]

###################################################
# NonSecure connection - forwarding to https
###################################################
server {

  listen 80;
  server_name jtlshop.example.com;
  return 301 https://$server_name$request_uri;

}

###################################################
# Secure connection (default)
###################################################
server {

  listen 443 ssl http2;
  server_name jtlshop.example.com;
  root /var/www/jtlshop.example.com;
  index index.php;

  # Rewrite on unknown URI
  location / { try_files $uri $uri/ /index.php?$args; }

  # Rewrite for admin pages (Shop >= 5.2)
  location /admin/ { try_files $uri $uri/ /admin/index.php?$args; }

  # Rewrite JTL-Wawi/Worker access - Shop5
  rewrite ^/dbeS/(.*)\.php /dbeS/index.php?id=$1&$args last;

  # Rewrite static/assets to minify
  rewrite ^/asset/(.*)$ /includes/libs/minify/index.php?g=$1;
  rewrite ^/static/(.*)$ /templates_c/min/$1;

  # Allow access - Shop5
  location ~* ^/templates_c/min/ { allow all; }

  # Allow access - Sitemap & Search
  location ~* ^/export/(sitemap_index.xml|sitemap_0.xml.gz|jtlsearch.zip|delta_jtlsearch(.*).zip) { allow all; }

  # Allow access - Includes
  location ~* ^/includes/(sitemap.php|preisverlaufgraph(.*).php|cron_inc.php|newslettertracker.php|libs/minify/index.php(.*)|modules/notify.php)$ {
    allow all;
    proxy_pass http://php_shop;
  }

  # Block access
  location ~* ^/(classes|jtllogs|update|uploads|export|backup|templates_c)/(.*) { deny all; return 404;}
  location ~* ^/includes/(.*)\.(php|phtml|phar|sql|xml|json|log|tpl)$ { deny all; return 404; }
  location ~* ^/templates/\.(php|tpl)$ { deny all; return 404;}
  location ~* ^/(.*)\.md$ { deny all; return 404;}
  location ~* ^/cli { deny all; return 404;}

  # TLS-Certificate
  ssl_certificate /path/to/certificate/fullchain.pem;
  ssl_certificate_key /path/to/certificate/privkey.pem;

  # PHP via FCGI
  location ~ \.php$ {
    fastcgi_pass                     127.0.0.1:9001;
    fastcgi_index                    index.php;
    fastcgi_split_path_info    ^(.+\.php)(.*)$;

    include includes/fastcgi_params.conf;
    fastcgi_param PATH_INFO                   $fastcgi_path_info;
    fastcgi_param SCRIPT_FILENAME      $document_root$fastcgi_script_name;
  }

  access_log /var/log/nginx/jtlshop.example.com-access.log main;
  error_log /var/log/nginx/jtlshop.example.com-error.log;

}

Für Implementierungen via ProxyPass
NGINX:
# Version 1.11 [Updated:22.01.2024]

###################################################
# Forwarding (proxy/pass) to PHP-Deamon(s)
###################################################
upstream php_shop{
    # via socket (Must be adjusted!)
    ## server unix:/var/run/php/php8.2-fpm.sock;

    # alternativ via (multiple)host/port (Must be adjusted!)
    ## keepalive 32;
    ## server 127.0.0.1:9000;
}

###################################################
# NonSecure connection - forwarding to https
###################################################
server {

  listen 80;
  server_name jtlshop.example.com;
  return 301 https://$server_name$request_uri;

}

###################################################
# Secure connection (default)
###################################################
server {

  listen 443 ssl http2;
  server_name jtlshop.example.com;
  root /var/www/jtlshop.example.com;
  index index.php;

  # Rewrite JTL-Wawi/Worker access - Shop5
  rewrite ^/dbeS/(.*)\.php /dbeS/index.php?id=$1&$args last;

  # Rewrite static/assets to minify
  rewrite ^/asset/(.*)$ /includes/libs/minify/index.php?g=$1;
  rewrite ^/static/(.*)$ /templates_c/min/$1;

  # Allow access - Shop5
  location ~* ^/templates_c/min/ { allow all; }

  # Allow access - Sitemap & Search
  location ~* ^/export/(sitemap_index.xml|sitemap_0.xml.gz|jtlsearch.zip|delta_jtlsearch(.*).zip) { allow all; }

  # Allow access - Includes
  location ~* ^/includes/(sitemap.php|preisverlaufgraph(.*).php|cron_inc.php|newslettertracker.php|libs/minify/index.php(.*)|modules/notify.php)$ {
    allow all;
    proxy_pass http://php_shop;
  }

  # Block access
  location ~* ^/(classes|jtllogs|update|uploads|export|backup|templates_c)/(.*) { deny all; return 404;}
  location ~* ^/includes/(.*)\.(php|phtml|phar|sql|xml|json|log|tpl)$ { deny all; return 404; }
  location ~* ^/templates/\.(php|tpl)$ { deny all; return 404;}
  location ~* ^/(.*)\.md$ { deny all; return 404;}
  location ~* ^/cli { deny all; return 404;}

  # TLS-Certificate
  ssl_certificate /path/to/certificate/fullchain.pem;
  ssl_certificate_key /path/to/certificate/privkey.pem;

  # PHP via Proxy
  location ~ \.php$ { proxy_pass http://php_shop; }

  access_log /var/log/nginx/jtlshop.example.com-access.log main;
  error_log /var/log/nginx/jtlshop.example.com-error.log;

}

Changelog:
[16.04.2021] Hinzufügen der Ausnahme für den Aufruf der notify.php innerhalb des "/includes" Verzeichnisses (Für Paypal-Requests)
[21.06.2021] Asset Rewrite für minify sollte auf index.php pointen, kann ansonsten in Verbindung mit Proxys zu Fehlern führen.
[24.06.2021] Upstream hinzugefügt. Vorteil bei dem Einsatz von mehreren PHP-Deamons/Server - zentrale Änderung innerhalb der Konfiguration.
[13.06.2022] Neue Namensgebung für die Datei des Search-Plugins in der "Allow"-Liste hinzugefügt
[14.02.2023] Aufteilung zwischen FCGI und ProxyPass
[10.07.2023] Default PHP-Version ab Shop 5.2.3 ist PHP 8.2
[22.01.2024] Fehlende Rewrite-Rule für minifyed statics (Danke an @karabey)
 

exe

Guest
FYI

Nginx bietet neben dem bekannten Nginx-Webserver auch Nginx-UNIT an, es ist ein "Ersatz" für den PHP-FPM.

https://unit.nginx.org/

PHP-FPM ist in skalierten Umgebungen eher kompliziert zu verwalten und zu dem auf reines PHP beschränkt. Auch der Einsatz von verschiedenen PHP-Versionen auf einem Server ist sehr aufwändig zu verwalten. Bei Nginx UNIT ist das alles einfacher und man kann auch Python, Java, c#, Javascript, go usw. einsetzen und einfach zwischen verschiedenen Versionen switchen.

Wer den UNIT anstatt des PHP-FPM einsetzen möchte, hat hier eine Vorlage für den JTL- Shop (5).

Und auch hier gilt: "Wer hiermit zum JTL-Support rennt... vergesst es" :)

JSON:
# Version 1.6 [Updated:10.07.2023]
{
  "applications": {
    "jtlshop": {
      "limits": {
        "requests": 100,
        "timeout": 30
      },
      "options": {
        "admin": {
          "open_basedir": "/path/to/app",
          "sys_temp_dir": "/path/to/app/tmp",
          "upload_tmp_dir": "/path/to/app/tmp"
          "error_log": "/path/to/app/log/php.log",
          "session.save_path": "/path/to/app/sessions",
          "max_execution_time": "180",
          "upload_max_filesize": "20M",
          "post_max_size": "20M",
          "memory_limit": "128M",
          "error_reporting": "32767",
          "log_errors": "on",
          "opcache.enable": "1",
          "opcache.enable_cli": "1",
          "opcache.jit_buffer_size": "256M",
          "opcache.jit": "tracing"
        }
      },
      "processes": {
        "idle_timeout": 30,
        "max": 10,
        "spare": 2
      },
      "targets": {
        "direct": {
          "root": "/path/to/app/public/"
        },
        "index": {
          "root": "/path/to/app/public/",
          "script": "index.php"
        },
        "index-special-admin": {
          "root": "/path/to/app/public/admin/",
          "script": "index.php"
        }

      },
      "type": "php 8.2",
      "user": "unit-jtlshop"
    }
  },
  "listeners": {
    "127.0.0.1:9001": {
      "pass": "routes/jtlshop"
    }
  },
  "routes": {
    "jtlshop": [
      {
        "action": {
          "pass": "applications/jtlshop/direct"
        },
        "match": {
          "uri": [
            "*.php"
          ]
        }
      },
      {
        "action": {
          "fallback": {
            "pass": "applications/jtlshop/index-special-admin"
          },
          "share": "/path/to/app/public/$uri"
        },
        "match": {
          "uri": [
            "/admin/*"
          ]
        }
      },
      {
        "action": {
          "fallback": {
            "pass": "applications/jtlshop/index"
          },
          "share": "/path/to/app/public/$uri"
        }
      }
    ]
  }
}

Bei der Konfiguration liegt der Shop unter /path/to/app/public/, da unter /path/to/app/ "Arbeitsverzeichnisse" wie tmp, session und logs liegen.

Changelog:
[22.02.2022] Ab der Version 1.26 wird die URI innerhalb der Share-Angabe per $uri übergeben - die Beispielkonfig wurde entsprechend angepasst.
[22.02.2022] Default nun php 8.0 hinterlegt
[22.02.2022] Aktivierung von opcache.jit
[16.01.2023] Default nun php 8.1 hinterlegt (Ab Shop 5.2)
[03.02.2023] Try_files für /admin/ auf Unit-Ebene abgefangen (Ab Shop 5.2 benötigt)
[10.07.2023] Default PHP-Version ab Shop 5.2.3 ist PHP 8.2
 
Zuletzt von einem Moderator bearbeitet:

exe

Guest
Ich push den Beitrag nochmals nach oben, damit die Änderungen besser sichtbar werden - bisher wurden diese hier leise eingepflegt ;)

Änderung:
[16.04.2021] Hinzufügen der Ausnahme für den Aufruf der notify.php innerhalb des "/includes" Verzeichnisses (Für Paypal-Requests)
 
Zuletzt von einem Moderator bearbeitet:
  • Gefällt mir
Reaktionen: 301Moved

exe

Guest
Änderung:
[21.06.2021] Asset Rewrite für minify sollte auf index.php pointen, kann ansonsten in Verbindung mit Proxys zu Fehlern führen.
 
Zuletzt von einem Moderator bearbeitet:

exe

Guest
Änerung:
[24.06.2021] Upstream hinzugefügt. Vorteil bei dem Einsatz von mehreren PHP-Deamons/Server - zentrale Änderung innerhalb der Konfiguration.
 

HannesD.

Aktives Mitglied
14. März 2021
14
0
Hi Leute,

habe das Problem, dass hochgeladene Bilder nicht vom Server verarbeitet und entsprechend in Verzeichnisse kopiert werden. Sie werden in media/image/storage hochgeladen, dann passiert aber nichts weiter - werden also auch nicht in media/image/product verarbeitet und es werden keine Verzeichnisse angelegt. Selbes beim OPC. Leider gibt es keinerlei Fehlermeldungen. Weder im Shoplog noch im error. log des nginx.

Config ist quasi wie oben mit einer kleinen Anpassung:

location @img_proxy { rewrite ^(.*)$ /index.php; } location ~ \.(gif|jpg|jpeg|png|webp)$ { try_files $uri @img_proxy; }

Bin momentan etwas ratlos. Hat jemand einen Tipp? Neuinstallation lief ohne Probleme und ohne Meldungen. Shop 5.1.1, PHP 8.0.13, nginx 1.20.2
 

exe

Guest
Änderung [Unit]:
[22.02.2022] Im Unit wird ab der Version 1.26 die URI innerhalb der Share-Angabe per $uri übergeben - die Beispielkonfig wurde entsprechend angepasst.
[22.02.2022] Default nun php 8.0 hinterlegt
[22.02.2022] Aktivierung von opcache.jit
 
Zuletzt von einem Moderator bearbeitet:
  • Gefällt mir
Reaktionen: hula1499

exe

Guest
Änderung Nginx:
[13.06.2022] Neue Namensgebung für die Dateien des Search5-Plugins in der "Allow"-Liste hinzugefügt
 
Zuletzt von einem Moderator bearbeitet:

exe

Guest
Änderung im Unit für den Shop 5.2
[03.02.2023] Try_files für /admin/ auf Unit-Ebene abgefangen
 

karabey

Sehr aktives Mitglied
28. November 2012
916
75
Hier fehlen der Eintrag für /static/ für den Nova Template

Code:
rewrite ^/static/(.*)$ templates_c/min/$1;

Kann nicht sagen ob es korrekt wäre.

Das rewrite mit /asset/ möchte auch nicht wirklich die entsprechenden Dateien aufrufen. Bei mir gibt es 404.
Code:
# Rewrite assets to minify
rewrite ^/asset/(.*)$ /includes/libs/minify/index.php?g=$1;
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: exe

exe

Guest
Hier fehlen der Eintrag für /static/ für den Nova Template

Code:
rewrite ^/static/(.*)$ templates_c/min/$1;

Wenn du die CSS und JS Daten komprimierst und als "Ja, statisch" ankonfigurierst, muss dein obiger Rewrite rewrite hinterlegt werden :) Vielen dank für die Info !

Das rewrite mit /asset/ möchte auch nicht wirklich die entsprechenden Dateien aufrufen. Bei mir gibt es 404.
Code:
# Rewrite assets to minify
rewrite ^/asset/(.*)$ /includes/libs/minify/index.php?g=$1;

Das kann ich leider noch nicht nachvollziehen.
 
  • Gefällt mir
Reaktionen: karabey
Ähnliche Themen
Titel Forum Antworten Datum
Neu PHP - MySQL Konfiguration am Server für JTL Shop 5 Allgemeine Fragen zu JTL-Shop 1
Rechnungsvorlagen für Kleinunternehmer JTL-Wawi 1.8 1
Neu Workflow-Bedingungen für Teillieferung aus zwei Lagern (Lager A & Lager B) User helfen Usern - Fragen zu JTL-Wawi 1
Neu Warenkorb Anzeige Problem für Kleinunternehmer Allgemeine Fragen zu JTL-Shop 6
Neu Plugin für Checkout Prozess Plugins für JTL-Shop 5
Neu Grundsätzlich mehrfach Versandlabel für Pakete über 30kg JTL-Workflows - Ideen, Lob und Kritik 10
Neu Mindestbestand für bestimmte Lagerplätze User helfen Usern - Fragen zu JTL-Wawi 1
Neu Connector für Magento 2.4.6 Allgemeines zu den JTL-Connectoren 1
Neu Suche SQL Abfrage für Hersteller die keinem Artikel mehr zugeordnet sind. User helfen Usern - Fragen zu JTL-Wawi 6
Neu Faktura-Liste für Aufträge pro Kunden Schnittstellen Import / Export 1
Neu Artikelanzahl für die Startedition Allgemeine Fragen zu JTL-Shop 5
Neu Template für eigene Seite Templates für JTL-Shop 9
Neu Freelancer für Amazon-Account-Management & JTL-Wawi gesucht Dienstleistung, Jobs und Ähnliches 2
Neu Servicepartner für Workflow gesucht Dienstleistung, Jobs und Ähnliches 3
Neu Workflow für fehlerhafte Retouren User helfen Usern - Fragen zu JTL-Wawi 0
Zentraler Medien-Ordner für mehrere Shops unter subdomain Einrichtung JTL-Shop5 0
Neu Google Search Console: 5xx-Fehler für nicht indexierte Seiten mit URL-Parametern – Warum? Betrieb / Pflege von JTL-Shop 3
Zahlungsabgleich - Zahlungsausgänge automatisch für Mitarbeiter ausblenden JTL-Wawi 1.9 1
Beschreibung Texte für Ausgabeweg WMS Packtisch+ JTL-Wawi 1.9 2
Neu SQL Abfrage für offene Aufträge über Ameise User helfen Usern - Fragen zu JTL-Wawi 5
In Diskussion Workflow für die Abfrage des noch offenen Kreditlimits JTL-Workflows - Ideen, Lob und Kritik 2
In Diskussion Workflow für fehlgeschlagenen Versanddatenexport Adressfehler beheben JTL-Workflows - Fehler und Bugs 5
Beantwortet GLS Label - Duplikat für Versender JTL-ShippingLabels - Fehler und Bugs 0
Neu Sinnvoll? Skript- oder Plugin-Lösung für (Nicht-ganz-)Dropshipping? User helfen Usern - Fragen zu JTL-Wawi 1
Neu Profi? Agentur, Dienstleister gesucht für JTL Rechnungsdatenservice JTL 2 Datev Schnittstellen Import / Export 0
In Diskussion Syntax für For-Schleife? For-Schleife im Workflow gibt Syntaxfehler aus ... JTL-Workflows - Fehler und Bugs 13
Neu Virtuelle Assistenz für Kundenservice gesucht User helfen Usern - Fragen zu JTL-Wawi 0
In Diskussion Tagesabschluß "Entnahme für Bank" funktioniert nicht JTL-POS - Fehler und Bugs 6
URL PFAD SEO Multishop Für jeden Shop unterschiedliche Einträge JTL-Wawi 1.9 2
Gelöst Variable für das Zählprotokoll Allgemeine Fragen zu JTL-POS 1
Gelöst Workflow Auftrag mit Positionsabfrage geht nicht, wegen Textposition für den Versand JTL-Workflows - Ideen, Lob und Kritik 1
In Diskussion Günstiges Android Tablet für kleinen Laden JTL-POS - Fragen zu Hardware 3
Gelöst Neues System für JTL POS gesucht – Erfahrungen & Empfehlungen? JTL-POS - Fragen zu Hardware 8
"Abholung" nur für bestimmte Kunden Einrichtung JTL-Shop5 4
Neu Suche Anbieter für Server Side Tracking Allgemeine Fragen zu JTL-Shop 0
Neu Kauf Ihres Lagerbestands durch Amazon für den weltweiten Verkauf - Wie Abbildung in JTL? Betrieb / Pflege von JTL-Shop 0
Neu Eigenes Formular erstellen für Kundenservice Allgemeine Fragen zu JTL-Shop 7
Neu Apple Pay in PayPal Plugin für die Schweiz Plugins für JTL-Shop 4
Neu Festgelegte Zahlungsart für Kunde Allgemeine Fragen zu JTL-Shop 0
Neu 🛒𝐍𝐞𝐮𝐞𝐬 𝐏𝐥𝐮𝐠-𝐈𝐧: Eigene Lösung für Rechnungskauf mit Bonitäts- & Betrugsprüfung direkt im Check-out - JTL5? Plugins für JTL-Shop 4
Neu Die wichtigsten Shopify/JTL-Wawi Tipps für Anfänger (wie mich) Shopify-Connector 11
Neu Wawi 1.9.5.4, Ameise Preise glätten für Ebay Vorlagen und laufende Angebote?? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Zusätzlicher Content für Filter-Seiten Templates für JTL-Shop 0
Neu Amazon Lister 2.0 - Kategorieindividuelle Felder auf Root eben möglich, z.B. für bullet_point1-5 Amazon-Lister - Ideen, Lob und Kritik 1
Neu Produktionszettel für die Kommissionierung JTL-Plan&Produce - Ideen, Lob und Kritik 5
Neu XML Rechnung - Artikel werden für 0€ verkauft, warum? JTL-Wawi - Fehler und Bugs 6
Neu Import von Kategorien geht nur für die Standrdsprache. Zweite Sprache geht leider nicht. JTL-Ameise - Fehler und Bugs 4
Rechnung für Händler JTL-Wawi 1.9 2
Neu Unterschiedliche Rechnungs Mailvorlagen für B2B und B2C Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu Suchen Freelancer für Support JTL wawi und shop sowie Anbindung an die Markplätze Dienstleistung, Jobs und Ähnliches 1

Ähnliche Themen