기본 fcgiwrap 소켓 액세스 권한 및 nginx(Alpine Linux) 관련 문제

기본 fcgiwrap 소켓 액세스 권한 및 nginx(Alpine Linux) 관련 문제

nginx와 fcgiwrap을 사용하여 Alpine Linux에서 git-daemon(git-http-backend)을 실행하고 싶습니다. 그러나 nginx 및 fcgiwrap의 기본 설치로 인해 502 잘못된 게이트웨이 오류가 발생합니다. 분명히 그룹 액세스에는 fcgiwrap 소켓에 대한 쓰기 권한이 누락된 것 같습니다.

fcgiwrap 소켓의 그룹에 쓰기 액세스 권한을 부여하면 모든 것이 잘 작동합니다. 작동시키는 올바른 방법은 무엇입니까? fcgiwrap이 시작될 때 소켓 파일이 생성되므로 실행하기 전에 권한을 조정할 수 없습니다.

세부 사항:

저는 알파인 리눅스 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 잘못된 게이트웨이 오류(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 매뉴얼이것은 언급되었습니다 :

다음과 같은 구성으로 fcgiwrap을 시작하려면 generate-fcgi를 사용하는 것이 가장 좋습니다.

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"

주위를 둘러보면 이미 알파인에 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문서화되어 있습니다.여기.

관련 정보