默认 fcgiwrap 套接字访问权限和 nginx 的问题(Alpine Linux)

默认 fcgiwrap 套接字访问权限和 nginx 的问题(Alpine Linux)

我想使用 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已记录这里

相关内容