Přepis bloku z Apache do Nginx

Přepis bloku z Apache do Nginx
« kdy: 19. 10. 2017, 13:33:57 »
Ahoj,
prepisujem config z apacha pre nginx a dostal som sa do problému s týmto blokom:
Kód: [Vybrat]
<Directory "/var/www/html/d">
   AllowOverride All
   AuthUserFile  /etc/httpd/.htpasswd
   AuthType Basic
   AuthName "dockdrop"
   Require valid-user
   #Options None +Indexes
   Options All +Indexes

      <Files ?*>
         Order allow,deny
          Allow from all
          Satisfy any
       </Files>
</Directory>

Systém sa chová tak, že obsluhuje requesty na existujúce súbory, pokus o 'prehliadanie' sa musí najpv authentifikovať.
Čiže
Kód: [Vybrat]
www.example.com/ [AUTH]
www.example.com/file.txt  [OK]
www.example.com/obrazky  [AUTH]
www.example.com/obrazky/obrazok1.jpg  [OK]
www.example.com/obrazky/subfolder [AUTH]

Zatiaľ som sa dopracoval k niečomu takému, ale nefunguje to podľa predstáv...
Kód: [Vybrat]
location / {
   try_files $uri $uri/ =404;
   auth_basic "Restricted Content";
   auth_basic_user_file /etc/nginx/.htpasswd;
   autoindex on;

   location ~* /(.+) {
      auth_basic off;
   }
}

« Poslední změna: 19. 10. 2017, 20:41:15 od Petr Krčmář »


bukva

Re:Přepis bloku z Apache do Nginx
« Odpověď #1 kdy: 19. 10. 2017, 21:15:39 »
zkusil bych (nezkouseno)
try_files $uri $uri/ /auth; (misto 404)

a nasledne udelal internal location:

location /auth {
  internal;
  autoindex on; (z te hlavni location vyhodit autoindex)
  # tvoje dalsi definice
}

Nevyhoda toho bude, ze kdyz se nekdo trefi do existujiciho souboru tak to auth nebude chtit (?to chces?)

Jak jsem psal - nezkousel jsem to, ale internal redirect jsem vyuzival casto na podobne kravinky. Limit je max 10 internich redirectu v ramci jednoho requestu. Treba to nebude nakonec fungovat, ale podival bych se timhle smerem...

Re:Přepis bloku z Apache do Nginx
« Odpověď #2 kdy: 20. 10. 2017, 13:06:04 »
Áno, ide mi presne o to. Linky priamo na súbory sú obsluhované, akonáhle ale niekde chce prezerať obsah adresára, musí sa autorizovať. Nakoniec som to vyriešil takto:

Kód: [Vybrat]
        location / {
                try_files $uri @auth;
        }

        location @auth {
                internal;
                auth_basic "Administrator Login";
                auth_basic_user_file /etc/nginx/.htpasswd;
                autoindex on;
        }