Verwalten Sie Nginx-Umschreibungen im Projektordner

1

Ich versuche herauszufinden, wie man von Apache zu nginx migriert und die Regeln für das Neuschreiben flexibel hält, damit sie für Entwickler geändert werden können. Dies ist unser aktuelles Setup:

  • Wir haben eine .htaccess-Datei im Stammordner des Projekts (und in einigen Unterordnern auch)
  • In dieser .htaccess-Datei können die Entwickler Umschreibungen für hübsche Permalinks zu bestimmten Skripten definieren (wir verwenden keine "globale" index.php-Datei).
  • Diese .htaccess-Datei ist in unserem Git-Repo enthalten, sodass der Entwickler beim Hinzufügen / Ändern von Rewrites nicht die Serverkonfiguration ändern muss (für die er keine Berechtigungen hat).

Soweit ich bereits erfahren habe, gibt es keine .htaccess-Entsprechung pro Verzeichnis zu nginx. Wie können wir das also möglicherweise lösen? Müssen wir eine "globale" index.php-Datei verwenden, um die Umschreibungen aufzulösen? Das würde wahrscheinlich die Gesamtleistung erheblich verringern.

PS Wie Sie vielleicht bemerkt haben, habe ich noch nie Nginx verwendet.

2ndkauboy
quelle
Mit einem Front-Controller ist die Leistung nicht wesentlich beeinträchtigt. Es ist im Grunde genommen nur ein zusätzlicher switchAufruf in Ihrer Anwendung und keine Regex auf dem Webserver. Was vielleicht sogar eine bessere Leistung bringt ...
Michael Hampton
Ich würde sagen, dass das Durchlaufen eines PHP-Arrays mit regulären Ausdrücken (und eventuell Bedingungen) weniger performant ist als das Durchführen durch eine Serverkonfigurationsdatei.
2ndkauboy
1
Klingt für mich nach vorzeitiger Optimierung. Ein Frontcontroller ist nur rundum sauberer. Es gibt kaum einen Grund, keinen zu haben.
Michael Hampton
Müssen Sie wirklich von Apache zu Nginx wechseln? Aus Ihrer Sicht ist Apache möglicherweise das bessere Tool für diesen Job.
Christopher Perrin
Das Problem mit unserer Website ist, dass wir einmal im Jahr eine Woche haben, in der der Verkehr 10-mal so hoch ist wie in regelmäßigen Abständen. Und nginx bietet viele Möglichkeiten, um so hohe Lasten zu lösen. Wir wollen also unbedingt ausprobieren, wie Nginx mit diesen hohen Belastungen umgeht. Ich denke nicht, dass unser Setup sehr einzigartig ist.
2ndkauboy

Antworten:

0

OK, also zunächst sollten Sie sorgfältig überlegen, ob Nginx Ihnen bei Ihrem Leistungsproblem wirklich hilft (gemäß Ihrem Kommentar), und dies in einer Entwicklungsumgebung testen, bevor Sie sich Gedanken darüber machen, wie Ihre Bereitstellung funktionieren wird.

Es ist wahr, dass Nginx schneller ist und dass seine Multithread-Architektur bei der Bewältigung hoher Lasten hilfreich ist. Ihre PHP-Site wäre jedoch außergewöhnlich ungewöhnlich, wenn der Teil Ihres Vorgangs, den Sie beschleunigen möchten, mehr als ein oder zwei Prozent ausmacht der gesamten Verzögerungen. Ihr Engpass liegt mit ziemlicher Sicherheit in Ihrer Datenbank und der Ausführung von PHP.

Sie sollten sich wahrscheinlich zuerst das PHP-Compilation-Caching (zB APC), einen Front-End-Proxy (zB Lack oder Tintenfisch) und das interne Caching in Ihrer Anwendung ansehen (ist dies WordPress? Es gibt einige gute Caching-Module). Die Auslieferung statischer Dateien nur an nginx zu übergeben, mag eine gute Idee sein, aber es ist wahrscheinlich besser, entweder Ihre eigenen Proxys oder ein Content Distribution Network für diesen Inhalt zu verwenden.

Wenn Sie sich dennoch entscheiden, fortzufahren, kommen Ihnen einige Werkzeuge in den Sinn, obwohl es sich um ziemlich schwere Werkzeuge handelt. Sie können fortlaufende Integrations- und Konfigurationsverwaltungstools (z. B. Jenkins und Puppet oder gleichwertige Tools) verwenden, um Ihre Konfiguration von einem Versionskontroll-Repository auf Ihrem Server bereitzustellen, sobald sie in den entsprechenden Zweig eingecheckt wird. Dies ist jedoch eine Menge an Infrastrukturkomplexität, über die Sie lernen und die Sie aufbauen müssen. Ohne viel Wissen, Können und Sorgfalt können Sie Ihren Entwicklern möglicherweise trotzdem nur Root-Zugriff gewähren. Das Apache-Delegationssystem durch .htaccess wurde über viele Jahre hinweg entwickelt, und Sie werden seine Sicherheit nicht so schnell replizieren können.

Gehen Sie zurück und überprüfen Sie Ihre Annahmen mit einem Profilerstellungstool, um festzustellen, inwieweit ein Leistungsproblem bei der Verarbeitung von Regex vorliegt. Ich habe meistens Xdebug verwendet, aber es gibt andere gute Alternativen.

mc0e
quelle