Ein Beispiel für die Verwendung von nginx zum Konfigurieren mehrerer Laravel-Projekte mit einem Domänennamen

Ein Beispiel für die Verwendung von nginx zum Konfigurieren mehrerer Laravel-Projekte mit einem Domänennamen

Hintergrund

Da die Anzahl der Unterprojekte des Unternehmens zunimmt, wird es mehr als ein Dutzend Projekte unterschiedlicher Größe geben (nur Backend). Gemäß der ursprünglichen Vorgehensweise muss für jedes gestartete Projekt ein Domänenname der zweiten Ebene vorhanden sein, der dem entsprechenden Projekt zugeordnet ist. Zehn Projekte bedeuten, dass es zehn Domänennamen der zweiten Ebene gibt (ohne Testumgebung, Unterproduktionsumgebung usw.). Eine so große Anzahl von Domänennamen ist nicht nur schwierig zu verwalten, sondern, was noch wichtiger ist, eine Verschwendung von Ressourcen. Dieses Problem hat mir lange Zeit Probleme bereitet. Heute habe ich es endlich gelöst. Ich möchte das Boxentagebuch aufzeichnen. In diesem Artikel werden nicht die Prinzipien der einzelnen Anweisungen in nginx erläutert, sondern die Verwendung von nginx-Anweisungen anhand der tatsächlichen Projektkonfiguration geübt und daraus gelernt.

Vorbereitung

Domänenname

Angenommen, der Domänenname lautet: http://www.dev.com

Experimentelle Umgebung

Alibaba Cloud ECS + CentOS + Nginx + PHP-FPM

Projekt 1

1. Projektpfad: /data/wwwroot/project1/
2. Zugriffspfad: http://www.dev.com/project1/

Projekt 2

1. Projektpfad: /data/wwwroot/project2/
2. Zugriffspfad: http://www.dev.com/project2/

Projekt 3

1. Projektpfad: /data/wwwroot/project3/
2. Zugriffspfad: http://www.dev.com/project3/

Beteiligte Wissenspunkte

  • Nginx-Standortanweisung, Verwendung siehe: https://www.jb51.net/article/154637.htm
  • Nginx-Alias-Direktive, Verwendung siehe: https://www.jb51.net/article/154640.htm

Implementierungsschritte

Um das obige Zugriffsformular zu erreichen, müssen wir die Standortdirektive und die Aliasdirektive in nginx verwenden. Die Konfiguration ist wie folgt

Standort ^~ /${PROJECT}/ {
 Alias ​​{$PATH};
 versuche_dateien $uri $uri/ @${PROJECT};

 Standort ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $Anforderungsdateiname;
  fastcgi_params einschließen;
 }
}

Standort @${PROJECT}{
 /${PROJECT}/(.*)$ /${PROJECT}/index.php?/$1 zuletzt neu schreiben;
}

Hinweis: ${PROJECT} und {$PATH} in der obigen Konfiguration sind die Teile, die im eigentlichen Prozess ersetzt werden müssen. ${PROJECT} ist der Pfadteil der URL, auf den zugegriffen werden muss, z. B. project1, und {$PATH} stellt den tatsächlichen Zugriffspfad des Projekts dar, z. B. /data/wwwroot/project1. Am Beispiel von http://www.dev.com/project1 lautet die entsprechende Nginx-Konfiguration wie folgt

Standort ^~ /project1/ {
 Alias ​​/data/wwwroot/projekt1/öffentlich;
 versuche_dateien $uri $uri/ @projekt1;

 Standort ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $Anforderungsdateiname;
  fastcgi_params einschließen;
 }
}

Standort @project1{
 /project1/(.*)$ /project1/index.php?/$1 zuletzt neu schreiben;
}

Für die Konfiguration von project2 und project3 müssen Sie nur der obigen Konfigurationsvorlage folgen. Die vollständige Nginx-Konfiguration lautet wie folgt

Server {
 hören Sie 80;
 Servername http://www.dev.com;
 access_log /data/wwwlogs/nginx/access_log/www.dev.com_nginx.log kombiniert;
 Fehlerprotokoll /data/wwwlogs/nginx/error_log/www.dev.com_errr_log;
 index.html index.htm index.php;

 # Konfigurationsort von Projekt1 ^~ /project1/ {
 Alias ​​/data/wwwroot/projekt1/öffentlich;
 versuche_dateien $uri $uri/ @projekt1;
 Standort ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $Anforderungsdateiname;
  fastcgi_params einschließen;
 }
 }
 
 Standort @project1{
 /project1/(.*)$ /project1/index.php?/$1 zuletzt neu schreiben;
 }
 
 # Konfigurationsort von Projekt2 ^~ /project2/ {
 Alias ​​/data/wwwroot/projekt2/öffentlich;
 versuche_dateien $uri $uri/ @projekt2;
 
 Standort ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $Anforderungsdateiname;
  fastcgi_params einschließen;
 }
 }
 
 Standort @project2{
 /project2/(.*)$ /project2/index.php?/$1 zuletzt neu schreiben;
 }
 
 # Konfigurationsort von project2 ^~ /project3/ {
 Alias ​​/data/wwwroot/project3/public;
 versuche_dateien $uri $uri/ @projekt3;
 
 Standort ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $Anforderungsdateiname;
  fastcgi_params einschließen;
 }
 }
 
 Standort @project3{
 /project3/(.*)$ /project3/index.php?/$1 zuletzt neu schreiben;
 }
 
 
 # Alle .php analysieren
 Standort ~ \.php$ {
 fastcgi_pass unix:/dev/shm/php-cgi.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name;
 #fastcgi_param SCRIPT_FILENAME $Anforderungsdateiname;
 fastcgi_params einschließen;
 }
 
 #Links zu Bildern und Videos, dies dient zum Zwischenspeichern, zum Zwischenspeichern für 30 Tage und nicht zum Schreiben von Zugriffsprotokollen. Speicherort ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
 läuft in 30 Tagen ab;
 Zugriff_Abmeldung;
 }
 
 #Konfiguration der js-css-Dateien, hier ist der Cache, Cache für 7 Tage, nicht in den Speicherort des Zugriffsprotokolls schreiben ~ .*\.(js|css)?$ {
 läuft am 7. Tag ab;
 Zugriff_Abmeldung;
 }

 Standort ~ /\.ht {
 alles leugnen;
 }
}

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So ändern Sie die .env-Konfigurationsdatei in Laravel
  • Freigeben der Konfigurationsdateien zum Ausführen des PHP-Frameworks Laravel in Nginx
  • Beispielanalyse der Laravel-Frameworkumgebung und der Konfigurationsvorgänge
  • Tutorial zur Laravel-Frontend-Ressourcenkonfiguration
  • Beispiel für die Konfiguration globaler Variablen in einer Laravel-Konfigurationsdatei
  • Konfigurationsmethode zur Trennung von Lesen und Schreiben in der Laravel-Datenbank
  • Laravel-Datenbankverschlüsselung und Konfigurationsmethode für Datenbanktabellenpräfixe
  • Beispiel für die Datenbankkonfiguration und den Datenbankbetrieb des Laravel-Frameworks
  • laravel-admin generiert automatisch Module und zugehörige grundlegende Konfigurationsmethoden
  • Detaillierte Erklärung des Unterschieds zwischen der Laravel-Konfigurations-Routing-API und dem webdefinierten Routing
  • Detaillierte Konfiguration des Laravel5.6-Frameworks mit CKEditor5
  • Schritte zur globalen öffentlichen Funktionsmethode für Laravel-Konfiguration
  • Beispiel für die Konfiguration einer benutzerdefinierten Fehlerseite im Laravel5-Framework
  • So konfigurieren Sie mehrere Redis-Bibliotheken in Laravel
  • Laravel-Framework-Konfiguration 404 und andere abnormale Seiten
  • Laravel 5.5 – offiziell empfohlenes Lern-Tutorial zur Nginx-Konfiguration
  • Analyse der Konfiguration und Anwendungsmethoden des Laravel Memcached-Cache-Treibers
  • Detaillierte Erklärung der Laravel 5+ .env Umgebungskonfigurationsdatei

<<:  Zusammenfassung der Probleme beim Hinzufügen, Löschen, Ändern und Abfragen von MySQL-Tabellen, -Spalten und -Datenbanken

>>:  Upgrade von MySQL 5.1 auf 5.5.36 in CentOS

Artikel empfehlen

Einige Vorschläge für HTML-Anfänger und Neulinge, Experten können sie ignorieren

Gefühle: Ich bin Backend-Entwickler. Manchmal fühl...

Lösung für EF (Entity Framework)-Einfüge- oder Aktualisierungsfehler

Fehlermeldung: Die Store-Update-, Insert- oder De...

Tiefes Verständnis der Verwendung von ::before/:before und ::after/:after

Teil 1: Grundlagen 1. Im Gegensatz zu Pseudoklass...

Detaillierte Erläuterung der MySQL sql_mode-Abfrage und -Einstellung

1. Führen Sie SQL aus, um anzuzeigen wählen Sie @...

Docker-Datenverwaltung und Netzwerkkommunikationsnutzung

Sie können Docker installieren und einfache Vorgä...

MySQL-Optimierungslösung: Aktivieren Sie das Protokoll für langsame Abfragen

Inhaltsverzeichnis Vorwort Einrichten der Protoko...

Meta-Tags einfach erklärt

Der META-Tag, umgangssprachlich auch als Tag beze...

So schreiben Sie HTML-Header in der Webentwicklung für mobile Geräte

Code kopieren Der Code lautet wie folgt: <Kopf...

Wie erreicht MySQL eine Master-Slave-Synchronisierung?

Die Master-Slave-Synchronisierung, auch Master-Sl...

js-Version zur Realisierung der Rechnerfunktion

In diesem Artikelbeispiel wird der spezifische Co...