V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
kyonn
V2EX  ›  NGINX

问个 nginx 配置问题

  •  
  •   kyonn · 4 天前 · 1139 次点击

    抄来的 nginx 配置,第 1 个 location 的正则表达式不太确定是否正确。按照 AI 的解答,用于匹配下面这几种路径。实测下来,http git clone 也是失败的,未匹配第 1 个 location 。有几个疑点:

    1. 类似这种多行的正则,每一行之间是什么关系?按照 AI 的解答看上去是或的关系,但是没找到正则规则的依据。
    2. 每一行正则结尾是 空格 + 单引号,这个不知道又是什么规则?
    • /git/xxx/HEAD (获取仓库的 HEAD 文件)
    • /git/xxx/info/refs (获取仓库引用信息)
    • /git/xxx/objects/...(处理 Git 对象)
    • /git/xxx/git-upload-pack
    
    location ~ "(?x)^/git(?<path>/.*/(?:HEAD '
                                 info/refs '
                                 objects/(?:info/[^/]+ '
                                            [0-9a-f]{2}/[0-9a-f]{38} '
                                            pack/pack-[0-9a-f]{40}\.(?:pack '
                                                                       idx)) '
                                 git-upload-pack))$" {
            error_page 491 = @auth;
            if ($query_string = service=git-receive-pack) {
                    return 491;
            }
            client_max_body_size                    0;
    
            fastcgi_param   SCRIPT_FILENAME         /usr/lib/git-core/git-http-backend;
            include         fastcgi_params;
            fastcgi_param   GIT_HTTP_EXPORT_ALL     "";
            fastcgi_param   GIT_PROJECT_ROOT        /srv/git;
            fastcgi_param   PATH_INFO               $path;
    
            fastcgi_param   REMOTE_USER             $remote_user;
            fastcgi_pass    unix:/var/run/fcgiwrap.socket;
    }
    location ~ "^/git(?<path>/.*/git-receive-pack)$" {
            error_page 491 = @auth;
            return 491;
    }
    location @auth {
            auth_basic            "Git write access";
            auth_basic_user_file  /srv/git/.htpasswd;
    
            client_max_body_size                    0;
    
            fastcgi_param   SCRIPT_FILENAME         /usr/lib/git-core/git-http-backend;
            include         fastcgi_params;
            fastcgi_param   GIT_HTTP_EXPORT_ALL     "";
            fastcgi_param   GIT_PROJECT_ROOT        /srv/git;
            fastcgi_param   PATH_INFO               $path;
    
            fastcgi_param   REMOTE_USER             $remote_user;
            fastcgi_pass    unix:/var/run/fcgiwrap.socket;
    }
    location ~ ^/git(?<path>/.*)$ {
            alias /usr/share/cgit;
            try_files $1 @cgit;
    }
    location @cgit {
            include         fastcgi_params;
            fastcgi_param   SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
            fastcgi_param   PATH_INFO       $path;
            fastcgi_param   QUERY_STRING    $args;
            fastcgi_param   HTTP_HOST       $server_name;
    
            fastcgi_param   CGIT_CONFIG     /srv/git/.cgitrc;
    
            fastcgi_pass    unix:/var/run/fcgiwrap.socket;
    }
    
    3 条回复    2025-08-01 17:37:31 +08:00
    feedcode
        1
    feedcode  
       4 天前
    (?x) 这个表示 Free-Spacing , 后面的空格和换行会 ignore
    https://www.regular-expressions.info/freespacing.html
    kyonn
        2
    kyonn  
    OP
       4 天前
    @feedcode AI 也是这么说的,还是不太理解,假设没有空格和换行,多行拼在一起,还是看不出来这几个路径捕获是或的关系。
    feedcode
        3
    feedcode  
       3 天前
    你如果认为这里应该是或的关系,那改成|就行了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5184 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 09:05 · PVG 17:05 · LAX 02:05 · JFK 05:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.