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

Linux-Befehl „cut“ erklärt

Der Cut-Befehl in Linux und Unix dient dazu, aus ...

So installieren Sie MySQL über Yum auf CentOS7

1. Überprüfen Sie, ob MySQL installiert ist Yum-L...

Code zum Aktivieren von IE8 im IE7-Kompatibilitätsmodus

Das beliebteste Tag ist IE8 Browser-Anbieter geben...

So beheben Sie den Verbindungsfehler zur Datenbank beim Start von ServerManager

Servermanager-Startfehler bei Verbindung zur Date...

Beispiel für utf8mb4-Sortierung in MySQL

Allgemeine utf8mb4-Sortierregeln in MySQL sind: u...

MySQL-Datenbankbeschränkungen und Prinzipien des Datentabellenentwurfs

Inhaltsverzeichnis 1. Datenbankbeschränkungen 1.1...

Implementierung der MySQL-Datensortierung (aufsteigend und absteigend)

Datensortierung aufsteigend, absteigend 1. Sortie...

Tutorial zur Installation von MySQL 5.7.18 auf Mac OS 10.12

Ich habe das ganze Internet durchsucht und bin au...

Mini-Programm implementiert Listen-Countdown-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Implementierungsbeispiel für den Bildupload mit Vue+Element+Springboot

Vor kurzem hatte ich zufällig Kontakt mit dem Pro...