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
907
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 Eigene Kategorien für ebay Angebote oder JTL Wawi Kategorie Baum nutzen Einrichtung und Installation von JTL-eazyAuction 0
Neu GPSR Plugin für Gambio Connector steht bereit Gambio-Connector 0
Neu JTL-Infoschreiben "Wichtige Neuerung im Postgesetz zur Kennzeichnungspflicht" - Umsetzung auch für Österreichische Post Labels ? JTL-ShippingLabels - Ideen, Lob und Kritik 0
Neu Benutzerdefinierte Klasse für Überschrift anlegen funktioniert nicht Templates für JTL-Shop 2
Kategoriebox Nummer für Unterkategorien JTL-Wawi 1.9 2
20 % USt wird für UK nicht ausgewiesen - was mache ich falsch JTL-Wawi 1.9 3
Neu Spezialist für Rechnungsformular-Anpassung benötigt Dienstleistung, Jobs und Ähnliches 1
Getrenntes Lager für den JTL shop JTL-Wawi 1.9 1
Neu Benutzer Authentifizierung für externe App/Shop Onlineshop-Anbindung 1
Sql Abfrage VK Preise pro Kundengruppe für Grafana JTL-Wawi 1.8 9
Neu List & Label - Eigene SQL-Abfrage als Grundlage für Tabelle im Berichtscontainer? User helfen Usern - Fragen zu JTL-Wawi 10
Schnittstelle für Zalando, Kaufland und Otto JTL-Wawi 1.9 5
Neu Die Kennzeichnungspflicht für schwere Pakete kommt am 1.1.2025 JTL-ShippingLabels - Ideen, Lob und Kritik 0
Neu Ausgabeweg => Beschreibungen werden nicht von JTL Wawi gezogen für Shop/ebay/sonst was User helfen Usern - Fragen zu JTL-Wawi 3
Neu SQL Vartable für Reservierte Artikel gesucht User helfen Usern - Fragen zu JTL-Wawi 2
Herstellername / Verantwortliche Person für die EU für Kaufland kaufland.de - Anbindung (SCX) 1
Neu Umfrage: Scanpflicht auf Artikelebene (Nur für bestimmte Artikel aktivieren/deaktivieren) JTL-WMS / JTL-Packtisch+ - Ideen, Lob und Kritik 0
Neu Workflow und Version für Vorhaben Starten mit JTL: Projektabwicklung & Migration 3
Neu Rabatt für Bundles Allgemeine Fragen zu JTL-Shop 2
Neu Suche Dienstleister für Rechnungsvorlage, MwSt Sätze User helfen Usern - Fragen zu JTL-Wawi 0
Provisionsabrechnung für Vertrieb JTL-Wawi 1.9 1
Beantwortet Kosten für Aufträge aus Shopware 5 Shopware-Connector 1
Neu Artikelbestände für Stücklistenartikel blockieren User helfen Usern - Fragen zu JTL-Wawi 2
Neu Attribute für EWR Pflichtangaben - otto.de User helfen Usern - Fragen zu JTL-Wawi 5
Neu Amazon Lister 2.0 Fehlercode: SLR402 Bild "1.jpg" für das Angebot mit SKU "xxxxx" auf Channel "AMAZONDEJTL" wurde nicht gefunden Amazon-Lister - Ideen, Lob und Kritik 0
Neu Variable für Zulaufdatum User helfen Usern - Fragen zu JTL-Wawi 1
Neu Wichtige Infos zu GPSR-Attributen für JTL-eazyAuction und kommende JTL-Wawi Version 1.9.6.0 Einrichtung und Installation von JTL-eazyAuction 120
Welche Einstellung für "Überverkäufe nicht mehr möglich" wenn "alle Lagerbestände null" sind. JTL-Wawi 1.9 5
Neu Preisdarstellung: keine „ab“-Preise mehr mit Staffelpreisen für Produkte ohne Variationen (JTL Shop 5.3.3) Allgemeine Fragen zu JTL-Shop 1
Attribute für EWR Pflichtangaben (ab 13.12.2024) auf den Marktplätzen otto.de & kaufland.de Otto.de - Anbindung (SCX) 8
Neu GTIN/EAN für mehrere Artikel verwenden Arbeitsabläufe in JTL-Wawi 2
Rabatt für einzelnen Kunden einrichten JTL-Wawi 1.9 2
Neu Artikeletikett für Kinderartikel drucken mit GTIN Barcode funktioniert nicht User helfen Usern - Fragen zu JTL-Wawi 12
Neu Vorlage für Angeboten Rechnungsbetrag ändern Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu S: Plugin Dropdown-Menü für meine Kategorien Plugins für JTL-Shop 10
Neu EVRI Label für Versand nach UK - wer benutzt es? Business Jungle 2
Nur bestimmte Bilder für einen Marktplatz aktivieren (Hood.de) JTL-Wawi 1.8 2
Neu Drucker für WMS getauscht - Zollpapiere werden nicht gedruckt JTL-ShippingLabels - Ideen, Lob und Kritik 1
Variable für Kundengruppe Allgemeine Fragen zu JTL-Shop 6
Neu Beschreibung für Amazon ohne HTML Inhalte Arbeitsabläufe in JTL-Wawi 3
Hilfe gesucht für Änderung der internen Schlüsselnummern! JTL-Wawi 1.9 8
Beantwortet Manueller Worklfow Rechnung für Mahnung, wie den offenen Rechnungsbetrag bei Teilrechnung ausgeben? JTL-Workflows - Ideen, Lob und Kritik 9
Tipps für effiziente Änderungen bestehender Artikel JTL-Wawi 1.7 2
Neu Bilder für alle Plattformen verwenden User helfen Usern - Fragen zu JTL-Wawi 8
Neu JTL WaWI abgleich mit Amazon für Deal Day & Black Friday User helfen Usern - Fragen zu JTL-Wawi 1
Onpage composer Texte für Merkmal Seiten Einrichtung JTL-Shop5 1
Neu Amazon Lister 2.0 - Code 99016 - Ein Maximum von 1 Vorkommen (oder Vorkommnissen) ist für das Attribut color zulässig Amazon-Lister - Fehler und Bugs 1
Neu Anbindung von JTL an Onlinehandel für GPSR (Produktsicherheit) Schnittstellen Import / Export 3
Sonderpreise für den Otto Marktplatz übertragen Otto.de - Anbindung (SCX) 1
Neu Suche Tipps für Plesk Settings Installation / Updates von JTL-Shop 0

Ähnliche Themen