如何才能通过http 访问远程git仓库,但仅用于克隆?
也许在nginx(已经运行)和git-http-backend
(git-http-fetch
?)的帮助下。
答案 0 :(得分:4)
也许这就是您要找的git daemon
:Git serve: I would like it that simple
该页面上有许多有趣的答案,但没有专门针对nginx。
然后您可以在nginx中添加代理传递,如下所示:
location / {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:9418; # Port 9418 is the default git daemon port
}
我不知道只允许克隆的方法......但git daemon
command已经是只读的。所以它应该做它的工作。
我希望这有帮助!
答案 1 :(得分:4)
在他的answer,Jakub Narębski建议:
对于" smart" HTTP遵循匿名读取访问的指示,但是 git-http-backend联机帮助页中经过身份验证的写访问,进行翻译 从Apache到nginx,稍微修改。
根据他的建议,我使用git-http-backend
,if
的组合配置了nginx和$arg
以启用匿名读取访问权限但经过身份验证的写入权限 rewrite
在调用git-http-backend
之前区分Git读取和写入操作:
# /etc/nginx/sites-available/git
server {
listen 80;
server_name myhostname;
access_log /var/log/nginx/git.access.log;
error_log /var/log/nginx/git.error.log;
gzip off;
location ~ /git(/.*) {
if ($arg_service = git-receive-pack) {
rewrite /git(/.*) /git_write$1 last;
}
if ($uri ~ ^/git/.*/git-receive-pack$) {
rewrite /git(/.*) /git_write$1 last;
}
if ($arg_service = git-upload-pack) {
rewrite /git(/.*) /git_read$1 last;
}
if ($uri ~ ^/git/.*/git-upload-pack$) {
rewrite /git(/.*) /git_read$1 last;
}
}
location ~ /git_read(/.*) {
include git-http-backend.conf;
}
location ~ /git_write(/.*) {
auth_basic "Pushing to Git repositories is restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include git-http-backend.conf;
}
}
配置文件/etc/nginx/git-http-backend.conf
包含通用fastcgi
指令,为fastcgi
调用git-http-backend
准备环境:
# /etc/nginx/git-http-backend.conf
fastcgi_pass unix:/var/run/fcgiwrap.socket;
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 /data/git;
fastcgi_param PATH_INFO $1;
fastcgi_param REMOTE_USER $remote_user;
答案 2 :(得分:3)
注意:我认为您的意思是匿名只读访问;我认为没有办法区分git中的clone和fetch。
您想设置“智能”HTTP(推荐)或“哑”HTTP吗?
对于“哑”的HTTP来说,禁止(或者只是不设置)WebDAV就足够了 - 这就是推送“哑”的HTTP(服务器端没有git)。
对于“智能”HTTP,请遵循git-http-backend联机帮助页中匿名读取访问权限但经过身份验证的写入权限的指示,将其从Apache转换为nginx,并稍加修改。请注意,匿名读取但经过身份验证的写入文档可能不完整,但您不必担心真正的写入(推送)访问成功,不是吗?