Nginx и auth_basic с cgit
На сервере Arch Linux с Nginx я правильно настроил cgit. Я хочу защитить cgit паролем базовой аутентификации, за исключением одного каталога /pub/
, Как видно из документации, я подумал о том, чтобы поставить на server
контекст аутентификации, и получить исключение с location
контекст для /pub/
каталог. Я попробовал эту ссылку, чтобы получить путь правильно.
Вот файл конфигурации nginx соответствующей части.
server {
listen 80;
server_name git.nicosphere.net;
index cgit.cgi;
gzip off;
auth_basic "Restricted";
auth_basic_user_file /srv/gitosis/.htpasswd;
location / {
root /usr/share/webapps/cgit/;
}
location ^~ /pub/ {
auth_basic off;
}
if (!-f $request_filename) {
rewrite ^/([^?/]+/[^?]*)?(?:\?(.*))?$ /cgit.cgi?url=$1&$2 last;
}
location ~ \.cgi$ {
gzip off;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index cgit.cgi;
fastcgi_param SCRIPT_FILENAME /usr/share/webapps/cgit/cgit.cgi;
fastcgi_param DOCUMENT_ROOT /usr/share/webapps/cgit/;
}
}
Это попросит у меня аутентификацию для любого URL. Для более простых тестов я попытался оставить root без аутентификации, и только /pub/
с аутентификацией. В этом случае он вообще не запрашивает пароль. Пока мне удалось защитить либо все, либо ничего.
Спасибо за вашу помощь и мои извинения за мой приблизительный английский.
1 ответ
Я думаю, что вы хотите что-то вроде этого:
server {
listen 80;
server_name git.nicosphere.net;
index cgit.cgi;
gzip off;
root /usr/share/webapps/cgit;
# $document_root is now set properly, and you don't need to override it
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi;
location / {
try_files $uri @cgit;
}
# Require auth for requests sent to cgit that originated in location /
location @cgit {
auth_basic "Restricted";
auth_basic_user_file /srv/gitosis/.htpasswd;
gzip off;
# rewrites in nginx don't match the query string
rewrite ^/([^/]+/.*)?$ /cgit.cgi?url=$1 break;
fastcgi_pass 127.0.0.1:9001;
}
location ^~ /pub/ {
gzip off;
rewrite ^/([^/]+/.*)?$ /cgit.cgi?url=$1 break;
fastcgi_pass 127.0.0.1:9001;
}
}