私は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
文書化されています。ここ。