Я размещаю частный git сервер, используя Nginx. Я бы хотел, чтобы кто-нибудь клонировал в мои репозитории (без авторизации), но требует авторизации, если он попытается создать sh коммит.
Моя Nginx конфигурация выглядит следующим образом:
server {
listen 443 ssl;
server_name git.example.com;
ssl_certificate /fullchain.pem;
ssl_certificate_key /privkey.pem;
location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|recieve)-pack) {
root /usr/share/nginx/git;
# --- incorrect solution ---
# if ($1 = git-upload-pack) {
# auth_basic "Restricted";
# auth_basic_user_file /usr/share/nginx/htpasswd;
# }
client_max_body_size 0;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT $realpath_root;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param PATH_INFO $uri;
fastcgi_param unix:/var/fcgiwrap.socket;
}
Насколько я понимаю, запрос git push
отправляет git-receive-pack
на мой сервер. Моим простым решением было захватить этот суффикс с помощью $1
и использовать оператор if, но я быстро обнаружил, что это неправильное использование для ifs ( ifisevil ).
Есть ли более подходящее решение для того, что я пытаюсь сделать sh?