Nginx和auth_basic与cgit

Nginx和auth_basic与cgit,nginx,cgit,Nginx,Cgit,在运行Nginx的Arch-Linux服务器上,我正确地设置了cgit。我想用基本的身份验证密码保护cgit,除了一个目录/pub/。如前所述,我考虑在服务器上下文中设置一个身份验证,并在/pub/目录的位置上下文中获得一个异常。我试图找到正确的路径 这里是对应部件的nginx配置文件 server { listen 80; server_name git.nicosphere.net; index cgit.cgi; gzip off;

在运行Nginx的Arch-Linux服务器上,我正确地设置了cgit。我想用基本的身份验证密码保护cgit,除了一个目录
/pub/
。如前所述,我考虑在
服务器
上下文中设置一个身份验证,并在
/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/
中使用身份验证。在这种情况下,它根本不要求输入密码。到目前为止,我设法保护了一切,或者什么都没有


谢谢你的帮助,我为我的近似英语道歉。

我想你想要这样的东西:

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;
    }
}

谢谢,这样更好,但是有一个奇怪的行为,当我进入
/pub/
,它会要求我输入密码,当我按下“取消”时,它会显示页面(没有CSS和.PNG)。当我尝试根目录时,它确实会显示未经授权的页面。如果我的身份验证正确,一切都很好(使用CSS/PNG)。所以,我想我仍然有一个问题,但它更好。