shur1k
@shur1k

Как прикрутить простую авторизацию к сайту (nginx rewrite + htpasswd)?

Добрый день!

Никак не удается прикрутить простую авторизацию к сайту.
Что имеем: nginx+ php+fpm и простой сайт на php.

Конфиг хоста:

server {
        listen   80;
        server_name test.site.ru;
        root /var/www/test.site.ru/web;
        error_log /var/log/ispconfig/httpd/test.site.ru/error.log;
        access_log /var/log/ispconfig/httpd/test.site.ru/access.log combined;



        location / {
        index  index.php;
        auth_basic "Members Only";
        auth_basic_user_file /etc/nginx/htpasswd;
        #правила перенес из htaccess 
        rewrite ^/image /image.php last;               
        rewrite ^/web/(.*) /web/$1 last;
        rewrite ^/receiver.html /receiver.html last;
        rewrite ^/ /index.php last;
        }

        Images and static content is treated different
        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
            access_log        off;
            expires           360d;
        }
        location ~ /\.ht {
             deny  all;
         }
          location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
             fastcgi_pass 127.0.0.1:9000;
             fastcgi_index index.php;
             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         }
  }


Без директивы rewrite ^/ /index.php last; авторизация работает, но дальше по всем ссылкам 404 ошибка. С правилом не работает авторизация.

Подскажите пожалуйста в какую сторону копать, вероятно кто-то сталкивался уже.
  • Вопрос задан
  • 3484 просмотра
Решения вопроса 1
fornit1917
@fornit1917
В location ~ \.php$ пробовали добавлять auth_basic?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
shur1k
@shur1k Автор вопроса
Попробовал, заработало. Спасибо :)
Если не трудно можете в двух словах почему не работало до этого? Можно линком на документацию.
Ответ написан
@ShamblerR
вписываем в server
error_page 555 = @pass;
        location @pass {
        auth_basic "Unauthorized";
        auth_basic_user_file /var/www/dev_htpasswd;
        proxy_pass http://127.0.0.1:82;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;


и в location /
if ($http_host ~* "^(dev|old|www.old|www.dev)\..*\..{2,8}$"){

                return 555;
                }
                if ($http_host ~* "^.*\.ks03\.ru$"){
                return 555;
                }

}


Конфиг для прокси накидал, для обычного nginx сам уже доделеш.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы