Neu Nginx Konfiguration für JTL Shop 5

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.328
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
910
74
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
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 0
Neu Produktionszettel für die Kommissionierung JTL-Plan&Produce - Ideen, Lob und Kritik 0
Neu XML Rechnung - Artikel werden für 0€ verkauft, warum? JTL-Wawi - Fehler und Bugs 0
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
Neu Bestätigungs e-mail für Auftrag stornieren Arbeitsabläufe in JTL-Wawi 1
Neu Besten Hosting-Anbieter für Wawi und JTL-Shop Starten mit JTL: Projektabwicklung & Migration 6
Neu Spezielle Preise für Kundengruppen im JTL-Shop Allgemeine Fragen zu JTL-Shop 3
Neu GPSR-relevante Herstellerdaten als PDF exportieren – Lösungen für Artikeletiketten? Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 7
Neu Artikel im Shop nur für DE ausschliessen Allgemeine Fragen zu JTL-Shop 1
Neu Google Exportformat für Shopping hängt sich auf - Weder Cronjob noch manueller Anstoß führen zur Erstellung einer erfolgreiche .zip Datei Allgemeine Fragen zu JTL-Shop 5
Versandetikett für Portokasse (Deutsche Post) nachdrucken JTL-Wawi 1.9 3
Neu Meldepflicht für Registrierkassen ab 2025 Allgemeine Fragen zu JTL-POS 1
Neu Amazon Lister 2.0 für USA, Australien, NL, PL, SE, BE etc. in Planung? Amazon-Lister - Ideen, Lob und Kritik 0
Neu Suche Anbieter für Erstellung einer eigenen Übersicht , da JTL Projektbörse fehlerhaft Eigene Übersichten in der JTL-Wawi 5
Neu JTL Profi / Freelancer gesucht für verschiedene kleinere Projekte (Daten Import/Export, Auswertung, Workflows usw.) Starten mit JTL: Projektabwicklung & Migration 1
Neu verschiedene Größen für ein Artikel Allgemeine Fragen zu JTL-POS 4
Neu Falsche URLs in Sitemap für englischen Seiten bei "Routing-Schema: Mit Locale" JTL-Shop - Fehler und Bugs 0
Neu Verschiedene Artikeltexte für veschiedene ebay Konten ermöglichen eBay-Anbindung - Ideen, Lob und Kritik 0
Neu JTL POS - Epson TSE micro SD Karte für andere Drucker kompatibel? - Metapace T-3II JTL-POS - Fragen zu Hardware 2
Neu Eigener Export für ShippyPro User helfen Usern - Fragen zu JTL-Wawi 5
Neu Hilfe bei korrekter Variable für Umsatzsteuer-Summe und dotLiquid-Übersicht Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Alternative für B2B Market gesucht – Kundengruppen und JTL-Connector WooCommerce-Connector 0
Neu Pickliste für Aufträge mit mehr als einem Artikel aus verschiedenen Lagerbereichen Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 1
Neu 1.9.5.4, Ameise und Preise importieren für das Feld "Standardpreis in neuen angelegte Vorlagen" JTL-Ameise - Fehler und Bugs 3
Neu DotLiquid Formel für Lieferadresse mail und wenn nicht vorhanden dann Rechnungsadresse mail verwenden Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu Biete: Windows Server optimiert für JTL und MS SQL Standard Lizenz (8 Monate alt, 42% unter Neupreis) Dienstleistung, Jobs und Ähnliches 0
Neu Plugin für Bundles gesucht Plugins für JTL-Shop 4
Neu 📢 Plugin "Verbotene Artikel: Kauf nur für richtige Kundengruppe" by NETZdinge.de Plugins für JTL-Shop 1
Neu Kein Loginbereich für Affiliate Partner Webstollen Plugins für JTL-Shop 1
Neu Problem bei der Anzeige von Hinweistexten für Produkte einer bestimmten Kategorie im NOVA Template Allgemeine Fragen zu JTL-Shop 1
Neu GPSR Umsetzung auch für "Artikel auf Anfrage" nötig? User helfen Usern - Fragen zu JTL-Wawi 2
Webinar: E-Rechnungspflicht 2025: Basics & Best-Practices für Onlinehändler Messen, Stammtische und interessante Events 2
Neu Neues Zusatzfeld-Set für Shopware 6 in JTL erstellen (nicht nur custom_jtl) Shopware-Connector 0
GPSR umsetzen Kurzfassung für Dummys? JTL-Wawi 1.9 13
Neu Gratisgeschenke nicht verfügbar für Kundengruppe X - Warenkorb-Fehler JTL-Shop - Fehler und Bugs 0
Neu Kategorie für Webshop aktiv setzen unter Beibehaltung des aktiv-Status aller enthaltener Artikel User helfen Usern - Fragen zu JTL-Wawi 6
Neu XRechnung für WAWI 1.5 Smalltalk 28
GPSR für nur einen Artikel des Hersteller JTL-Wawi 1.9 2
Neu [Error][Code:21920427] Adressangaben für die verantwortliche Person sind unvollständig. Geben Sie für die Adresse bitte die Straße, den Ort, die PLZ eBay-Anbindung - Fehler und Bugs 4
Neu Versandklasse für Kindartikel wird falsch übertragen/überschrieben WooCommerce-Connector 0
Neu Effizientere Lösung für Wawi-Updates gesucht Installation von JTL-Wawi 52
Retoureneingang - keine Abfrage mehr für Seriennummer? JTL-Wawi 1.9 2
Neu Warenkorb für einzelne Produkte Deaktivieren Allgemeine Fragen zu JTL-Shop 3
Neu GSPR Amazon - Probleme für Wiederverkäufer von Markenprodukten Amazon-Anbindung - Fehler und Bugs 10

Ähnliche Themen