Neu Nginx Konfiguration für JTL Shop 5

exe

Administrator
Mitarbeiter
4. Juni 2016
515
208
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.295
141
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

Administrator
Mitarbeiter
4. Juni 2016
515
208
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

Administrator
Mitarbeiter
4. Juni 2016
515
208
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

Administrator
Mitarbeiter
4. Juni 2016
515
208
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 bearbeitet:
  • Gefällt mir
Reaktionen: Horus Sirius

exe

Administrator
Mitarbeiter
4. Juni 2016
515
208
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 bearbeitet:
  • Gefällt mir
Reaktionen: 301Moved

exe

Administrator
Mitarbeiter
4. Juni 2016
515
208
Ä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 bearbeitet:

exe

Administrator
Mitarbeiter
4. Juni 2016
515
208
Änerung:
[24.06.2021] Upstream hinzugefügt. Vorteil bei dem Einsatz von mehreren PHP-Deamons/Server - zentrale Änderung innerhalb der Konfiguration.
 

HannesD.

Mitglied
14. März 2021
9
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

Administrator
Mitarbeiter
4. Juni 2016
515
208
Ä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 bearbeitet:
  • Gefällt mir
Reaktionen: hula1499

exe

Administrator
Mitarbeiter
4. Juni 2016
515
208
Änderung Nginx:
[13.06.2022] Neue Namensgebung für die Dateien des Search5-Plugins in der "Allow"-Liste hinzugefügt
 
Zuletzt bearbeitet:

exe

Administrator
Mitarbeiter
4. Juni 2016
515
208
Ä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
855
38
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

Administrator
Mitarbeiter
4. Juni 2016
515
208
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 504 Gateway Time-Out nginx bei Plugin-Updates Gelöste Themen in diesem Bereich 10
Neu Plugin für Boomerang Versandverpackungen Plugins für JTL-Shop 1
SQL Abfrage für verkaufte Artikel + aktueller Bestand JTL-Wawi 1.8 1
Neu Grundpreisangaben für geringe Gramm-Mengen werden nicht angezeigt Betrieb / Pflege von JTL-Shop 0
Neu mit FBM für Ausland User helfen Usern - Fragen zu JTL-Wawi 2
Neu Falsche Gewinnermittlung für Kleinunternehmer JTL-Wawi - Ideen, Lob und Kritik 8
Neu Netto für Händler gleich, Brutto für Endkunden - Plugin oder andere Alternative? Allgemeine Fragen zu JTL-Shop 0
Neu Mindestbestellwert für Netto-Einkaufswert JTL-Shop 5 Allgemeine Fragen zu JTL-Shop 0
Neu Cron für Export-Manager "tut nix" JTL-Shop - Fehler und Bugs 13
Neu Liquid Variable für Positionsart User helfen Usern - Fragen zu JTL-Wawi 3
Neu leeres Textfeld erstellen für einen Hinweis auf der Rechnung User helfen Usern - Fragen zu JTL-Wawi 2
Neu Filter für Zeitraum in "Alle Bons" aktualisiert sich nicht JTL-POS - Fehler und Bugs 0
Neu Mobatraum.de Alles für die Modellbahnträume Shops stellen sich vor 0
Neu Nachbestellung via Bestellvorschläge für Ladenlokale Allgemeine Fragen zu JTL-POS 0
Neu Export Gesamtpreis für Artikel mit Mindestabnahme Allgemeine Fragen zu JTL-Shop 0
Neu Frage zu Designvorlage JTL-Adept - Slider (für Ebay) eBay-Designvorlagen - Fehler und Bugs 4
Hosted (gehostete?) Datenbank Download Zweitgerät für unterwegs JTL-Wawi 1.8 13
Kennzahlen Übersicht für JTL Wawi - Wirtschaftliche Auswertung JTL-Wawi 1.8 0
Neu Feldname für Workflow herausfinden User helfen Usern - Fragen zu JTL-Wawi 4
Neu Datenimport über Ameise in JTL für Shopware Shopware-Connector 1
Wichtig Beta Connector für Presta 8 mit PHP 8+ PrestaShop-Connector 29
Anfrage für Zusammenarbeit zur Verbesserung unseres JTL-Onlineshops Einrichtung JTL-Shop5 1
Neu Track&Trace für Österreichische Post JTL-Track&Trace - Ideen, Lob und Kritik 2
Neu PrestaShop Connector für Prestashop 8 mit PHP 8.2 wird nicht unterstützt PrestaShop-Connector 3
Neu Variablen für den Email Versand Einrichtung JTL-Shop5 0
Neu Nach Update auf 5.3 funktioniert das Video-Portlet für lokale Videos nicht Gelöste Themen in diesem Bereich 9
Wo befindet sich das Feld mit der Information für "Zustandsbeschreibung" auf Ebay? JTL-Wawi 1.8 9
Neu Egener Export für CBAM-Bericht möglich? JTL Ameise - Eigene Exporte 0
Beantwortet Globaler Haken für Überverkaufe ermöglichen JTL-Workflows - Fehler und Bugs 2
Neu JTL 1.8.12.0 - Artikelattribut für Shop importieren - Format CSV-Datei / Hilfe bei Import von individuellen Attributen für JTL-Shop (googlekat) JTL-Ameise - Ideen, Lob und Kritik 1
In Diskussion Benutzerdefinierten Standardpfad für Errorlogs definieren (Voting) JTL-Workflows - Ideen, Lob und Kritik 0
Neu Freitextfeld über Variation - Zeichenbeschränkung für Gravur Allgemeine Fragen zu JTL-Shop 8
Neu Template/ Vorlage für Bestellbestätigung gesucht Templates für JTL-Shop 0
WaWi Preisuntergrenze für Artikel festschreiben JTL-Wawi 1.7 4
Neu Variablen für Stücklistartikel in den neuen Vorlagen Angebot Auftrag Rechnung ect. Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Anleitung: Artikeletiketten für Auftrag, Rechnung, Lieferschein etc. drucken mit Etikettenanzahl = Artikelanzahl User helfen Usern - Fragen zu JTL-Wawi 0
Neu Zusatzkosten für Artikel Gelöste Themen in diesem Bereich 17
Neu Versandschein für Schweiz kann nicht gedruckt werden folgende Fehlermeldung JTL-ShippingLabels - Fehler und Bugs 1
Neu Bestellbestätigung email Variable Hinweistext für Downloadartikel Allgemeine Fragen zu JTL-Shop 3
Neu Dienstleister/Freelancer für Vorlagenerstellung Design gesucht Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu JTL erstellt falsche Rechnungskorrekturen für Amazon.co.uk Aufträge und verweigert den Support Amazon-Anbindung - Fehler und Bugs 5
Neu Pickliste für Standardlager - Sortierung in WMS Mobile Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Neu Workflow Web-Request Post für mollie Arbeitsabläufe in JTL-Wawi 6
Versuch Bilder aus Ebay für Kaufland zu übernehmen JTL-Wawi 1.8 0
Debitorennummern für bestehende und neue Kunden anlegen JTL-Wawi 1.8 2
Druckvorlage für Etiketten aus Auftragspositionen JTL-Wawi 1.8 4
Eigene Felder für Ebay-Listings verwenden JTL-Wawi 1.8 0
In Diskussion Automatische Zuweisung der Kategorien für Artikel durch Workflow JTL-Workflows - Ideen, Lob und Kritik 3
Gelöst Hardware für häufige Konstellationen mit USB und Swissbit TSE-Problem ab Android 11 JTL-POS - Fragen zu Hardware 5
Neu Wie erstelle ich das richtige Layout für handy, Desktop etc Allgemeine Fragen zu JTL-Shop 0

Ähnliche Themen