我想使用 nginx 和 fcgiwrap 在 Alpine Linux 中运行 git-daemon (git-http-backend)。但是,默认安装 nginx 和 fcgiwrap 会导致 502 Bad Gateway 错误。显然,组访问权限似乎错过了 fcgiwrap 套接字的写入权限。
当我向 fcgiwrap 套接字上的组授予写访问权限时,一切都运行良好。使其发挥作用的正确方法是什么?套接字文件是在 fcgiwrap 启动时创建的,因此我无法在运行之前调整权限。
细节:
我使用的是 Alpine Linux 3.10。其中我安装了 nginx、fcgiwrap 和 git-daemon 等软件包。对于简单的 fcgiwrap 测试,我添加了 perl 和测试脚本f.pl
。
这些是服务启动后fcgiwrap套接字的权限:
gitsrv-dev:~# ls -la /run/fcgi*
total 0
drwxrwsr-x 2 fcgiwrap www-data 60 Feb 21 08:52 .
drwxr-xr-x 7 root root 320 Feb 17 19:03 ..
srwxr-xr-x 1 fcgiwrap www-data 0 Feb 21 08:52 fcgiwrap.sock
这些服务以以下用户身份运行:
gitsrv-dev:~# ps axu | grep -E '(nginx|fcgiwrap)'
3436 root 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
3443 nginx 0:00 nginx: worker process
3490 fcgiwrap 0:00 /usr/bin/fcgiwrap -f -c 1 -s unix:/run/fcgiwrap/fcgiwrap.sock
3554 root 0:00 grep -E (nginx|fcgiwrap)
我的测试 perl 脚本由 fcgiwrap 运行:
gitsrv-dev:~# cat /repos/f/f.pl
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "<h1>f.pl is working</h1>";
在 nginx 中运行 f.pl 脚本的配置:
gitsrv-dev:~# vi /etc/nginx/conf.d/f.conf
server {
listen *:82;
location ~ /f(/.*) {
gzip off;
root /repos/f;
client_max_body_size 0;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /repos/f/f.pl;
fastcgi_param PATH_INFO $1;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_pass unix:/run/fcgiwrap/fcgiwrap.sock;
}
}
如前所述,此默认配置会导致 502 Bad Gateway 错误 (URL http://192.168.1.221:82/f/
)。
当我授予g+w
权限时,它会起作用:
gitsrv-dev:~# chmod g+w /run/fcgiwrap/fcgiwrap.sock
gitsrv-dev:~# ls -la /run/fcgi*
total 0
drwxrwsr-x 2 fcgiwrap www-data 60 Feb 21 08:52 .
drwxr-xr-x 7 root root 320 Feb 17 19:03 ..
srwxrwxr-x 1 fcgiwrap www-data 0 Feb 21 08:52 fcgiwrap.sock
现在重新加载浏览器就会看到输出f.pl is working
。
我在一些内部服务器上使用 Alpine Linux - 所有服务器都在虚拟机中运行良好。这些是使用 vagrant / puppet 设置的,我现在想创建一个 git 服务器。所以我想让事情变得简单,而不是修改默认的脚本文件。我是否错过了一些明显的配置选项来让 fcgiwrap 和 nginx 很好地协同工作?
答案1
这只是一点点猜测......
这fcgiwrap 手册提到了这一点:
您很可能希望使用spawn-fcgi使用如下配置来启动fcgiwrap:
FCGI_SOCKET=/var/run/fcgiwrap.sock FCGI_PROGRAM=/usr/sbin/fcgiwrap FCGI_USER=nginx FCGI_GROUP=www FCGI_EXTRA_OPTIONS="-M 0700" ALLOWED_ENV="PATH"
环顾四周,您似乎已经在 alpine 上安装了fcgiwrap
它的配置文件在阿尔卑斯山是/etc/conf.d/spawn-fcgi
(提到这里)。 您在问题中没有提到如何启动 fcgiwrap,所以我想这就是您启动它的方式。
因此,编辑此文件并找到注释掉的行:
# Additional options you might want to pass to spawn-fcgi
#
#FCGI_EXTRA_OPTIONS=
将其更改为:
# Additional options you might want to pass to spawn-fcgi
#
FCGI_EXTRA_OPTIONS="-M 0770"
这应该更改套接字上的权限(模式)。该选项-m
已记录这里。