有馬総一郎のブログ

(彼氏の事情)

2021年11月03日 00:45:52 JST - 4 minute read - Linux

Airsonic、Nextcloudを動作させるWEBサーバーをApacheからNginxに乗り換える Nextcloud編

前回の続き。

Nextcloud

しかし、次の Nextcloudでどうしても上手くいかず、数日かかった。 NGINX configuration — Nextcloud latest Administration Manual latest documentationNextcloud 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 /ブロックにrootindexの設定項目を追記した。

ただ、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"

とは言え、大したエラーではない。以下のサイトなどを参考にしつつ、

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の設定ファイルも修正すれば良いというわけだ。分かっている人から見れば、下らないところで躓いたりしたが、とりあえず動くようになったので良し!