預設 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 用於一些內部伺服器——所有伺服器都在 VM 中執行良好。這些是使用 vagrant / puppet 設置的,我現在想創建一個 git 伺服器。所以我想保持簡單,而不是修改預設腳本文件。我是否錯過了一些明顯的配置選項,讓 fcgiwrap 和 nginx 可以很好地協同工作?
這是一個小小的猜測……
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 上安裝了它,並且它在 Alpine 上
fcgiwrap
的配置文件是(在此處提到)。 你沒有在你的問題中提到你是如何開始 fcgiwrap 的,所以我想這就是你開始它的方式。/etc/conf.d/spawn-fcgi
所以編輯這個文件並找到註釋掉的行:
# 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
記錄。