基本的なfcgiwrapソケットアクセスとnginx(Alpine Linux)に関する問題

基本的なfcgiwrapソケットアクセスとnginx(Alpine Linux)に関する問題

私はnginxとfcgiwrapを使ってAlpine Linuxでgit-daemon(git-http-backend)を実行したいと思います。ただし、nginxとfcgiwrapのデフォルトのインストールにより、502の無効なゲートウェイエラーが発生します。明らかに、グループアクセスには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無効なゲートウェイエラー(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文書化されています。ここ

おすすめ記事