Config nginx for Laravel In einem Unterordner

Lesezeit: 8 Minuten

Benutzer-Avatar
Lu32

Ich habe ein altes Projekt, das jetzt neue Funktionen erfordert, ich werde Laravel verwenden, um es bereitzustellen, alles funktioniert in xampp mit Apache, aber mein Server con nginx zeigt mir eine Zugriffsverweigerungsnachricht und kann nicht auf meine Routen zugreifen, wie sollte meine sein Site-Konfiguration sollte sein, wenn Laravel in mysite.com/2015 installiert ist. Meine Site-Konfiguration lautet wie folgt. Was muss ich ändern? Ich habe versucht

location /newsection/ { 
   try_files $uri $uri/ /newsection/public/index.php$request_uri;
}

aber es verursacht 500 Fehler

server {
    listen 80;
    server_name am2.aminversiones.com;
    root /home/forge/am2.aminversiones.com;

    # FORGE SSL (DO NOT REMOVE!)
    # ssl_certificate;
    # ssl_certificate_key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    index index.html index.htm index.php;

    charset utf-8;

    client_max_body_size 300M;

    location / {
        #try_files $uri $uri/ /index.php?$query_string;
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/am2.aminversiones.com-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

    # Remove trailing slash to please routing system.
    if (!-d $request_filename) {
        rewrite     ^/(.+)/$ /$1 permanent;
    }

    # version 1
    location ^~ /2015 {
        alias /home/forge/am2.aminversiones.com/2015/public;
        try_files $uri $uri/ @2015;
        location ~* \.php {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            include /etc/nginx/fastcgi_params;
        }
    }

    location @2015 {
        rewrite ^/2015/(.*)$ /2015/index.php/$1 last; # THIS IS THE IMPORTANT LINE
    }
    # end version 1

    # version 2
    # this is with `ln -s /home/tom/public_html/demos/demo1/public <document root>/demo1`
    location ~ /2015 {
        try_files /2015/$uri /2015/$uri/ /2015/index.php?q=$uri&$args;
    }
    # end version 2

    # PHP FPM configuration.
    location ~* \.php$ {
        fastcgi_pass                    unix:/var/run/php5-fpm.sock;
        include                             /etc/nginx/fastcgi_params;
        fastcgi_index                       index.php;
        fastcgi_split_path_info             ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO             $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED       $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME       $document_root$fastcgi_script_name;
    }

    # We don't need .ht files with nginx.
    location ~ /\.ht {
        deny all;
    }
}

Benutzer-Avatar
Lu32

Nun, ich habe eine Lösung für eine sehr einfache Konfiguration gefunden und Laravel in einem Unterverzeichnis auf einem Nginx-Server installiert. Fügen Sie in der Konfigurationsdatei /etc/nginx/sites-available/yourSite Folgendes hinzu:

location ^~ /laravel {
    alias /var/www/laravel/public;
    try_files $uri $uri/ @laravel;

    location ~ \.php {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
    }
}

location @laravel {
    rewrite /laravel/(.*)$ /laravel/index.php?/$1 last;
}

und voila, Ihre Routen funktionieren normal, wie sie sollten.

  • Dies hat ein Problem behoben, das ich seit einigen Tagen hatte. Vielen Dank

    – cfv1000

    28. Mai 2015 um 13:56 Uhr

  • Das funktioniert super, aber wenn ich das tue: example.org/laravel/?var=12345 es wird mir einen 404-Fehler geben. Irgendwelche Ideen, wie man es löst, Grüße!

    – Alberto

    19. Juni 2015 um 15:31 Uhr


  • @Alberto stellen Sie sicher, dass Sie nginx und php5-fpm neu laden

    – Lu32

    19. Juni 2015 um 21:07 Uhr


  • Das funktioniert nicht. Es zwingt PHP-Dateien herunterzuladen, anstatt bedient zu werden

    – Sebastian

    18. November 2020 um 21:33 Uhr

Benutzer-Avatar
Hamid Naghipour

Nachdem ich einige Stunden mit diesem Problem verbracht habe, habe ich endlich mein Problem mit einer Subdomain-Adresse wie folgt behoben:

Wenn Sie Ihre setzen möchten laravel Projekt in einem subfolder auf einem Server mit ngnix-ubuntu 16-php.7.2also hier ist die ngnix-Konfiguration:

  1. Ihr verschachtelter (Unterordner) befindet sich nicht in Ihrem Hauptordner

    /var/www/main: /var/www/nested:

dann sollte deine config lauten:

location /nested {

        alias /var/www/nested/public;

        try_files $uri $uri/ @nested;

               location ~ \.php$ {
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $request_filename;
                        fastcgi_pass   unix:/run/php/php7.2-fpm.sock;

                                }
   }

location @nested {
        rewrite /nested/(.*)$ /nested/index.php?/$1 last;
}
  1. Der Laravel-Test-Ordner (Unterordner) im Hauptordner:

    /var/www/main: /var/www/main/nested:

dann sollte deine config lauten:

location /laravel-test {

    alias /var/www/main/laravel-test/public;

    try_files $uri $uri/ @laravelTest;

           location ~ \.php$ {
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $request_filename;
                    fastcgi_pass   unix:/run/php/php7.2-fpm.sock;

                            }


  }

location @laravelTest {
        rewrite /laravel-test/(.*)$ /laravel-test/index.php?/$1 last;
}

  • Danke, die erste Option funktioniert. Und warum rewrite /nested/(.*)$ /nested/index.php?/$1 last; aber nicht rewrite /nested/(.*)$ /nested/public/index.php?/$1 last; ?

    – X-NicON

    24. April 2019 um 14:45 Uhr


  • Es gibt keinen Unterschied zwischen den 2 Konfig

    – Sandor Marton

    27. Dezember 2019 um 23:57 Uhr

  • Das ist jetzt eine Antwort. Vielen Dank, dass Sie sich die Zeit genommen haben.

    – Paschalis

    23. April 2020 um 19:21 Uhr

  • Danke für die Lösung! Ich habe lange nach einer Lösung für dieses Problem gesucht.

    – Pawel Taschew

    3. Oktober 2020 um 11:21 Uhr

  • Ich freue mich, berichten zu können, dass ich das ausprobiert habe und es funktioniert hat. Ich verwende Homestead, das Nginx verwendet.

    – ryantxr

    8. Mai 2021 um 19:25 Uhr

Dies ist die Problemumgehung, die mein Problem gelöst hat. Mit Alias ​​sucht Nginx NICHT nach Dateien in /var/www/portal/public/portal/foo, wie es mit der Root-Direktive der Fall wäre

location /portal {
 alias /var/www/html/portal/public; #preferred over root

 # @portal is a named location
 try_files $uri $uri/ @portal;

 location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $request_filename;
 }
}

location @portal {
rewrite /portal/(.*)$ /portal/index.php last; # Remove ?/$1 since fastcgi_params adds query string
}

Weitere Referenzen finden Sie in diesem Artikel https://gist.github.com/tsolar/8d45ed05bcff8eb75404

  • Dies ist die einzige Antwort, die ich im gesamten Internet gefunden habe und darüber hinaus funktioniert. Der wichtigste Teil ist: entfernen ?/$1. Entfernen Sie es nicht und Ihre Abfragezeichenfolgen werden alle kläglich fehlschlagen. Danke vielmals!

    – Bloops

    5. April 2021 um 1:36 Uhr

  • In meinem Fall hat dies funktioniert, weil andere nginx.conf-Vorschläge verwendet werden fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;jedoch war es die Verwendung von fastcgi_param SCRIPT_FILENAME $request_filename; was endlich meinen Server repariert und mir Seelenfrieden verschafft hat.

    – Camilo Urán

    21. August 2021 um 20:52 Uhr


  • Vielen Dank für Ihren Kommentar. Entfernen Sie diese 4 Zeichen ?/$1funktioniert gut für mich. Bis zu einem Laravel 8-Update funktionierte mein System gut mit diesen Charakteren, dann fügte Laravel hinzu $request->server->get('QUERY_STRING') zur Auswertung einer signierten Route, was mein System in Probleme brachte. Jetzt gelöst.

    – LaDude

    20. Dezember 2021 um 10:30 Uhr


Aus irgendeinem Grund verursachte der Alias ​​das Problem und funktionierte nicht. Vielleicht hilft dies anderen, also habe ich Folgendes getan, damit dies funktioniert. Wie Sie sehen können, habe ich den “Alias” daraus entfernt und der Gleichung laravel/public hinzugefügt.

location ^~ /laravel/public {
            index home.php home.html home.htm index.html index.htm index.php;
            try_files $uri $uri/ @laravel;

            add_header X-Frame-Options "SAMEORIGIN";
            add_header X-XSS-Protection "1; mode=block";
            add_header X-Content-Type-Options "nosniff";
            charset utf-8;

            location ~ \.php {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php/php7.2-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
                fastcgi_buffers 16 16k;
                fastcgi_buffer_size 32k;
                include fastcgi_params;
            }
        }
        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }

    location @laravel {
       rewrite /laravel/public/(.*)$ /laravel/public/index.php?/$1 last;
    }

Benutzer-Avatar
rubens21

Bei mir hat es nicht funktioniert, also habe ich eine andere Lösung bekommen.

  1. Ich hatte eine “normale” Laravel-Domäne erstellt, zeigen Sie auf http://generic.laravel
    root /my/laravel/path/public

  2. Danach habe ich einen Ort auf einem echten Domain-Proxy zu meinem generischen Laravel erstellt:

    location /laravel {
        rewrite /laravel/?(.*)$ /$1 break;
        proxy_pass http://generic.laravel;
    

    }

  3. Leider wird Laravel die URL verwenden http://generic.laravel Verknüpfungen zu erstellen. Sie können es folgendermaßen lösen: Laravel: Basis-URL ändern?

Benutzer-Avatar
Herr Alexander Ws

Ich habe mehrere Fälle wie Fehler 403 oder 404 getroffen, und ich denke, diese Methode funktioniert. Vergessen Sie nicht, die PHP-Version basierend auf Ihrer PHP-Version auf dem Server zu ändern (php8.1-fpm.sock). Notiz your_domain www.your_domain basiert auf Ihrer Website.

   server {
    listen 80;
    listen [::]:80;
    root /var/www/html;
    index index.html index.htm index.php;
    server_name your_domain www.your_domain;
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location /yourlaravelproject {
        alias /var/www/html/yourlaravelproject/public;
        try_files $uri $uri/ /index.php$args;

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        }
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
    location ~ /\.ht {
        deny all;
    }
}

Vergessen Sie nach der Konfiguration nicht, dies Ihrem Symlink hinzuzufügen systemctl restart nginx. Ich bin mir sicher, dass Laravel 8 und 9 immer noch funktionieren, da ich erst kürzlich das Laravel 9-Projekt im Unterordner getestet habe und gut funktioniert.

Benutzer-Avatar
kusum chouhan

location /stationery { alias /var/www/html/stationery/public; try_files $uri $uri/ @stationery; location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $request_filename; } }

location @stationery{ rewrite /stationery/(.*)$ /stationery/index.php?/ last; }

  • Bitte fügen Sie der Antwort, die Sie gegeben haben, eine Beschreibung hinzu.

    – Asolanki

    6. März 2020 um 4:20 Uhr

1018540cookie-checkConfig nginx for Laravel In einem Unterordner

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy