前回の続き。
Nextcloud
しかし、次の
Nextcloudでどうしても上手くいかず、数日かかった。
NGINX configuration — Nextcloud latest Administration Manual latest documentationの Nextcloud in a subdir of the NGINX webroot どおりにやっているのに!?location ^~ /.well-known
ブロック以降を追記するイメージだ。
2021/10/09 10:41:48 [error] 1374#1374: *5 rewrite or internal redirection cycle while processing "/nextcloud/index.php/nextcloud/index.php/login", client: 192.168.0.241, server: _, request: "GET /nextcloud/index.php/login HTTP/2.0", host: "example.f5.si"
なエラーが出てしまう。/nextcloud/index.php/login
となるべきが/nextcloud/index.php/nextcloud/index.php/login
となっている時点でおかしい。公式マニュアルに載っているのをコピペしただけなのに、Airsonicの設定などを削除しても上手く行かない。ググるも、簡略されて記述されてことが多く、参考にならない。
rewrite
のところがおかしいのかと、試しにコメントアウトしても、次は単純にファイルが見つかないエラーになるだけだった。
結果から言うと
server {
listen 443 default_server;
listen [::]:443 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
追記したlocation ^~ /.well-known
ブロックの前部分、root /var/www/html;
がまずかった。これをroot /var/www;
とすれば解決した。
アプリ | URL | ディレクトリ |
---|---|---|
Welcome | https://example.f5.si | /var/www/html |
Airsonic | https://example.f5.si/airsonic | /var/airsonic |
Nextcloud | https://example.f5.si/nextcloud | /var/www/nextcloud |
再度、構成を確認する。上記のとおり。Welcome画面を表示させるためroot /var/www/html;
とすることで成功したことが、ここの設定はこれで正しいと思い込んでしまったのが、解決を大きく遠ざけてしまった。
location ^~ /nextcloud
ブロック内でroot /var/www/nextcloud;
としても駄目だった。
The root of the domain is mapped to /var/www rather than /var/www/nextcloud, so that the URI /nextcloud is mapped to the server directory /var/www/nextcloud.
ドメインのルートは/var/www/nextcloudではなく/var/wwwにマップされるため、URI /nextcloudはサーバーディレクト/var/www/nextcloudにマップされます。
と注意書き?があったのだが、意味が分かっていなかった。 勿論、こうするとhttps://example.f5.si
のとき、インデックスファイルを見付けられず、エラーになる。なので
location / {
root /var/www/html;
index index.nginx-debian.html index.html index.htm;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
とlocation /
ブロックにroot
とindex
の設定項目を追記した。
ただ、root
を直しただけでは、rewrite or internal redirection cycle while processing
なエラーは解決したが、FastCGI
の部分でエラーにはなっていた。
2021/10/14 23:17:27 [error] 17463#17463: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.241, server: example.f5.si, request: "GET /nextcloud/status.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "example.f5.si"
とは言え、大したエラーではない。以下のサイトなどを参考にしつつ、
- nginxで、connect() failed (111: Connection refused) while connecting to upstreamってエラーにハマった。 - Qiita
- nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する - Qiita
- Ubuntu20.04 Server + nginx + php-fpm 7.4 の動作環境を構築する - Symfoware
upstream php-handler {
- server 127.0.0.1:9000;
+ server unix:/run/php/php7.4-fpm.sock;
}
とすれば直った。
/etc/php/7.4/fpm/php-fpm.conf からinclude=/etc/php/7.4/fpm/pool.d/*.conf
と取り込んでいるファイルを確認する。
取り込んでいる /etc/php/7.4/fpm/pool.d/www.conf から
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php7.4-fpm.sock
とリッスンしているパスを確認していて、そのとおりnginxの設定ファイルも修正すれば良いというわけだ。分かっている人から見れば、下らないところで躓いたりしたが、とりあえず動くようになったので良し!