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.337
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
923
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 DB Konfiguration - Pfad Installation von JTL-Wawi 1
25 Gutscheine für Kunden auf Rechnung erstellen Allgemeine Fragen zu JTL-Vouchers 0
Neu SEO URL für den Blog Allgemeine Fragen zu JTL-Shop 2
Neu 🚨 Hinweis für JTL-Händler, die Taxdoo nutzen News, Events und Umfragen 1
Monatsabschluss Amazon FBA UK / CH mit JTL2Datev WaWi 1.10 bei IDU Nutzung und Zwangs VCS für GB / Schweiz JTL-Wawi 1.10 0
Neu Biete Connector-Tools für vollautomatische Lieferantenbestellungen an uvm. Dienstleistung, Jobs und Ähnliches 0
Externe Auftragsnummer für Rechnungs-Druckvorlage nicht vorhanden JTL-Wawi 1.11 6
Neu Sind Support-Tickets für WaWi und Ameise ohne kostenpflichtigen Tarif nicht mehr möglich? JTL-Wawi - Fehler und Bugs 3
Neu Coupon-Steuer Plugin: Korrekte Steuerberechnung für JTL-Shop Coupons Plugins für JTL-Shop 1
Neu Neuer Server für kleines Unternehmen User helfen Usern - Fragen zu JTL-Wawi 28
Neu Welche SQL Server Version für WaWi 1.0.0.0.0 unter Windows 11 Installation von JTL-Wawi 6
Neu Was ist die korrekte Variable für die letzte Seite eines Artikellistings? Betrieb / Pflege von JTL-Shop 11
Neu Open-Source-Lösung für produzierende Betriebe User helfen Usern 0
Neu Varianten Artikel erstellen mit Lister 2.0 nur für Amazon Amazon-Lister - Ideen, Lob und Kritik 0
Neu SUCHE Freelancer für JTL WAWI Anbindung an WooCommerce und Einrichtung Dienstleistung, Jobs und Ähnliches 2
Amazon-ASIN mit mehreren SKU für Chargenverfolgung JTL-Wawi 1.10 0
Neu ID Hook für Warenkrob User helfen Usern 0
Neu Platzhalter für GPSR werden mit angezeigt PrestaShop-Connector 1
Neu Workflow für voraussichtlichen Liefertag erstellen JTL-Workflows - Ideen, Lob und Kritik 6
Neu Workflow für voraussichtlichen Liefertag erstellen User helfen Usern - Fragen zu JTL-Wawi 1
Neu CustomWorkflow für Pattenkonto JTL-Workflows - Ideen, Lob und Kritik 1
Neu Adressetiketten für Briefe mit Etikettendrucker erstellen / Formatierungsproblem Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 4
Neu 🚀 Pilotkunden gesucht: HS Dynamic Pricing Plugin für JTL-Shop Plugins für JTL-Shop 0
Wichtig 💡Die Retourenplattform für Webshops – Expertise von unserem neuen Partner Returnless News, Events und Umfragen 0
Neu Kapazitäten frei für Routineaufgaben JTL Wawi Dienstleistung, Jobs und Ähnliches 0
Neu Trainingsmodus für JTL-POS gewünscht JTL-POS - Ideen, Lob und Kritik 0
Artikel teilweise nicht für Verkaufskanäle aktivierbar JTL-Wawi 1.10 0
Neu VCS lite: Arithmetischer Überlauffehler für tinyint-Datentyp, Wert = -1. Amazon-Anbindung - Fehler und Bugs 0
Monatsweise Warenbewegungen für alle Artikel exportieren JTL-Wawi 1.10 1
WF - automatisches Aktivieren / Deaktivieren für Verkaufskanal Shop JTL-Wawi 1.9 6
Artikel nicht automatisch für Verkaufskanal aktivieren JTL-Wawi 1.10 2
Neu Welcher Hoster ist für JTL-Shop 5 empfehlenswert? User helfen Usern 12
Buchhaltung vollautomatisiert für die Schweiz JTL-Wawi 1.10 9
Vote für debugging des Mobile Server Fehlers JTL-Wawi 1.11 1
Massenänderung "Lagerplatz" für Artikel bei WMS Lager JTL-Wawi 1.10 2
Neu Bestellobergrenze (999€) für Schweizer Kunden im Shop hinterlegen Betrieb / Pflege von JTL-Shop 1
Alternativtext für Artikelbilder per Ameise pro Plattform setzen JTL-Wawi 1.10 0
Neu Staffelpreise für Verpackungseinheiten Einrichtung von JTL-Shop4 4
Neu Kunden einen Retouren QR Code beim ausliefern mitschicken für Warenankauf ??? JTL-ShippingLabels - Fehler und Bugs 0
Neu Suche Freelancer für Aufsetzen JTL B2B Shop Dienstleistung, Jobs und Ähnliches 3
Gelöst Kartenleser für RKSV JTL-POS - Fragen zu Hardware 2
Neu Artikel nur für Admin sichtbar Allgemeine Fragen zu JTL-Shop 2
Neu Zusätzlicher Kundendisplay für Kassensystem iMin D4 Pro Einrichtung / Updates von JTL-POS 1
Neu Besteht Interesse an einer Versandschnittstelle für GEL-Express? Schnittstellen Import / Export 0
Neu Tailwind als Basis für JTL Shop 6 ? Templates für JTL-Shop 2
Neu Variablen für Kassenbon Einrichtung / Updates von JTL-POS 1
Neu Feature Requests für das News System Refactoring JTL-Shop - Ideen, Lob und Kritik 7
Neu Neues Plugin: JTL Closed Shop – Zugangsbeschränkung, Pre-Sale & Wartungsmodus für deinen JTL-Shop Plugins für JTL-Shop 2
Neu Falsche Währung in VCS-Lite Rechnungsvorlage bei anderem Land für Rechnung als Lieferung, HUF statt EUR Amazon-Anbindung - Fehler und Bugs 0
Gelöst Workflow-Trigger für Selbstabholung / FFN-Versand JTL-Workflows - Fehler und Bugs 2

Ähnliche Themen