[SOLVED][Layer-8 Error] nginx 'location / {...}' block overwrite

Hi,
ich bin gerade auf einem Centos8 mit ISPconfig 3.2.3 unterwegs.
Auch nach zu Gemüte führen der letzten verfügbaren Dokumentation stolpere ich über ein Problem. Ich versuche in nginx via Directory Snippet den Location Block
Code:
       location / {
                index  index.php index.html ;
                try_files $uri $uri/ /index.php?$args;
        }

durch

Code:
        location / {
                        try_files $uri $uri/ @sfc;
        }
zu ersetzen.
Laut Dokumentation sollte mein Directory Snippet, welches in den custom nginx Directives ganz oben steht, den Block ersetzen.

Ich hab auch schon versucht den originalen Block in die custom nginx Directives einzusetzen und mit ##delete## löschen zu lassen und dann meinen Block direkt hinterher geschoben.
Leider gibt es dann gar keinen location / {} block mehr.

##merge## ist leider keine Option, da try_files nicht zwei mal im gleichen Block auftauchen darf.

Hat jemand eine Idee wie ich das Problem lösen kann oder handelt es sich gar um einen Bug?

Btw. @sfc ist ein unter dem locaton / {} Block definierter Block.

Ich danke euch im Vorraus für jeden Hinweis.
 

Till

Administrator
Hast Du denn den Block:

Code:
location / {
                        try_files $uri $uri/ @sfc;
        }

In das nginx direktiven feld der website eingefügt, nachdem Du den alten Block gelöscht hast?
 
Nein, ich dachte eigentlich ich müsste ihn nicht löschen.
Vor allem da ich davon ausgegangen bin, dass die vHost Conf komplett neu geschrieben wird. Ein löschen des Block in der conf schien mir vergeben Liebesmüh.
Sollte ich das dennoch versuchen?

Was ich vergessen habe zu erwähnen, mein Block wird einfach gar nicht eingefügt, solange ich kein ##merge## mit angehänge. Aber auch nur der "location / {}" block. Alle anderen werden eingefügt.
 

matz

Active Member
Wie wäre es damit:
Code:
#Schritt 1:
location / { ##delete##
                index  index.php index.html ;
                try_files $uri $uri/ /index.php?$args;
        }

#Schritt 2:
location / {
try_files $uri $uri/ @sfc;
}

Ich wurde jetzt etwas neugierig und habe es bei mir mit location @php einfach mal ausprobiert. Ich konnte diese @php damit so umschreiben wie es mir danach war. Schritt 1 räumt den voranhdenen location / - Block weg, in Schritt 2 wird der neue geschrieben. Die @sfc sollte schon vorhanden sein, wenn Nginx wieder anlaufen soll.
 

matz

Active Member
Ergänzung...
Ich wüsste jetzt nicht welchen Einfluss die Reihenfolge der Locations sowie anderer Direktiven in der Config-Datei auf die Funktion des Nginx haben sollte. Diese Custom-Direktiven unter Website -> Optionen haben bei mir etwas Spaghetti-Code produziert aber Nachteile bemerke ich dadurch nicht. Korrigiert mich bitte falls ich hier falsch liege.
 
In deiner Lösung sah ich auch bereits Hoffnung, aber

Code:
location / {##delete##
   try_files $uri $uri/ /index.php$is_args$args;
   auth_basic "Members Only";
   auth_basic_user_file /var/www/clients/client1/web30/web/.htpasswd;

   location ~ \.php$ {
      try_files /2d37572f8ea55295bbb1e1b4ce6be077.htm @php;
   }
}


location / {
    try_files $uri $uri/ @sfc;
    auth_basic "Members Only";
    auth_basic_user_file /var/www/clients/client1/web30/web/.htpasswd;

   location ~ \.php$ {
      try_files /2d37572f8ea55295bbb1e1b4ce6be077.htm @php;
   }
}

führt leider nur dazu, dass der 'location / {}' Block gar nicht auftaucht.
 

Till

Administrator
Gerade mal getestet, ISPConfig 3.2.3 auf Debian 10 mit nginx. Folgendes in das Nginx Direktiven feld kopiert:

Code:
location / { ##delete##
}

location / {
  try_files $uri $uri/ @sfc;
}

Ergibt einen nginx vhost mit einer einzigen / location die wie folgt aussieht:

Code:
location / {
          try_files $uri $uri/ @sfc;
}

-- update --
Habe das ##delete## korigiert.
 
Zuletzt bearbeitet:

matz

Active Member
Macht es einen Unterschied ob man zwei oder drei Rauten um delete oder merge stehen hat? Mir fiel nämlich gerade auf, dass ich überall nur zwei Rauten habee aber es funktioniert erwartungsgemäß. Also ##merge## verbindet und ##delete## löscht.
 

Till

Administrator
Das sollte egal sein. Ich glaube 2 sind in der Tat richtig, nutze die Funktion eher selten und hab es nicht im Handbuch nachgeschaut.
 

matz

Active Member
Zwei sind richtig. Mit drei wird der Eintrag in der Config durch den merge-Eintrag einfach ersetzt. Eben getestet, böse Falle ;)

@EureGraueKompetenz, hast du 1:1 das übernommen was ich da vorschlug? Bei mir geht das nämlich. Debian 10 und ISPC 3.2.3... Ich finde es jetzt etwas seltsam. Hatte noch nie mit CentOS zu tun aber so wahnsinnig unterschiedlich sind sie nicht.
 

Till

Administrator
Habe mal meinen Post oben korrigiert, falls das mal jemand später findet der nicht den ganzen Thread liest :)
 
Allem voran, vielen Dank für eure Hilfe und euren regen Einsatz.

Es scheint verhext zu sein.
Ich habe 1:1 deinen Code Block und nur deinen Code Block aus Post #7 eingefügt.
Heraus kommt eine vHost conf mit folgenden Location Blocks:
Code:
server {
        listen *:80;
        listen [::]:80;
        listen *:443 ssl http2;

        ssl_protocols TLSv1.3 TLSv1.2;
        listen [::]:443 ssl http2;
        ssl_certificate /var/www/clients/client1/web30/ssl/vhost.test.com-le.crt;
        ssl_certificate_key /var/www/clients/client1/web30/ssl/vhost.test.com-le.key;

        server_name vhost.test.com www.vhost.test.com;

        root   /var/www/vhost.test.com/web/;
                disable_symlinks if_not_owner from=$document_root;

        if ($scheme != "https") {
            rewrite ^(?!/\.well-known/acme-challenge)/ https://$http_host$request_uri? permanent;
        }

        index index.html index.htm index.php index.cgi index.pl index.xhtml standard_index.html;


        error_page 400 /error/400.html;
        error_page 401 /error/401.html;
        error_page 403 /error/403.html;
        error_page 404 /error/404.html;
        error_page 405 /error/405.html;
        error_page 500 /error/500.html;
        error_page 502 /error/502.html;
        error_page 503 /error/503.html;
        recursive_error_pages on;
        location = /error/400.html {

            internal;
            auth_basic off;
        }
        location = /error/401.html {

            internal;
            auth_basic off;
        }
        location = /error/403.html {

            internal;
            auth_basic off;
        }
        location = /error/404.html {

            internal;
            auth_basic off;
        }
        location = /error/405.html {

            internal;
            auth_basic off;
        }
        location = /error/500.html {

            internal;
            auth_basic off;
        }
        location = /error/502.html {

            internal;
            auth_basic off;
        }
        location = /error/503.html {

            internal;
            auth_basic off;
        }

        error_log /var/log/ispconfig/httpd/vhost.test.com/error.log;
        access_log /var/log/ispconfig/httpd/vhost.test.com/access.log combined;

        location ~ /\. {
                        deny all;
        }

        location ^~ /.well-known/acme-challenge/ {
                        access_log off;
                        log_not_found off;
                        auth_basic off;
                        root /usr/local/ispconfig/interface/acme/;
                        autoindex off;
                        index index.html;
                        try_files $uri $uri/ =404;
        }

        location = /favicon.ico {
            log_not_found off;
            access_log off;
            expires max;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location /stats/ {

            index index.html index.php;
            auth_basic "Members Only";
            auth_basic_user_file /var/www/clients/client1/web30/web//stats/.htpasswd_stats;
            add_header Content-Security-Policy "default-src * 'self' 'unsafe-inline' 'unsafe-eval' data:;";
        }

        location ^~ /awstats-icon {
            alias /usr/share/awstats/icon;
        }

        location ~ \.php$ {
            try_files /f4738d8c72bad11aa76606d886cefb58.htm @php;
        }

        location @php {
            try_files $uri =404;
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/lib/php-fpm/web30.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_intercept_errors on;
        }

}


Gibt es einen Debug Switch um die erstellung der Conf zu loggen?
 
Oh damn.
Okay, case closed. Und es tut mir so unendlich leid eure Zeit verschwendet zu haben.
Als ich nur
Code:
location / {
          try_files $uri $uri/ @sfc;
}
einfüge funktioniert es.
Ich hatte in einem weiteren Snippet ein Leerzeichen zu viel, das führte zum Fehler im location / Block

Es funktioniert also ohne ##delete##, sondern ganz so wie es auch in der Dokumentation steht.
Ich bitte euch nochmals um Entschuldigung und danke euch nochmal für eure Beteiligung.
 

matz

Active Member
Gelöst oder nicht, ich werde mich damit noch etwas befassen und teile sehr zeitnah meine Erfahrungen mit. Das ist nämlich tatsächlich etwas verhext. "Nackte" Seiten zum Spielen habe ich.
 

Werbung

Top