開発ブログ

a-blog cms をnginx環境にインストールする

この記事の概要

a-blog cmsの動作条件を眺めて、Apacheでもnginxでも動作するというところだけ見て、軽い気持ちでnginx環境にインストールしてみたところ見事につまづいた話。

a-blogは基本的にApacheの環境を前提にしていたようで、公式ドキュメントのインストール手順でも「nginxの場合は~」とか書かれていないので、何も考えずに手順通りに進めただけでは正常に動作しませんでした。

動作条件の注釈として書かれていましたが、「インストール時に使用する.htaccessはnginxでは動かないから同等の設定をnginxで行いなさい」とのこと。

ということでちゃんとnginxに設定を反映してインストール完了までの手順です。

作業環境

dockerコンテナ(nginx + php-fpm + mariadb)

インストール場所:/blog/配下

普通はドキュメントルート直下にインストールするものですが、今回はサイトの一部だけをCMS化したかったので、インストールディレクトリを/blog/とします。

ゲーム置き場のページをCMSに組み込むのはきっと面倒だと思ったから…

インストール作業

ファイルダウンロード

ダウンロード、アップロードの手間が簡単になるということだったので、簡単セットアップで進めます。

ここからダウンロードする。 簡単セットアップを利用したインストール手順

セットアップ画面を開く

ダウンロードしたzipファイルを解凍し、setup.phpをwebサーバにアップロード。

アップロード場所は通常ならドキュメントルートに、今回はサイトの一部のみCMS化するため、/blog/以下に置く。

/DocumentRoot/blog/setup.php

https://<ドメイン>/blog/setup.php にブラウザでアクセスする。

インストール

「セットアップ開始」をクリックすると、エラーが出たりなんだリしたので都度対応。

phpの拡張モジュールが足りない

さっそくエラーが出た。

  **Fatal error**: Uncaught Error: Class "ZipArchive" not found in ...

php-zipを入れてあげて、再度「セットアップ開始」をクリックすれば進める。※手順は環境ごとにまちまちだろうから割愛。

「インストーラーへ移動」ボタンで次に進む

事前準備 画面では特にすることが無く、簡単セットアップではスルーしていいと書いてある。

特に何もせずに「動作環境のチェック を実行します。」に進む

※本当はこの辺りで.htaccess に相当する設定をnginx側にしておく必要がある。自分の場合は気付かずに進めてしまったので、最後にやっている。

phpの拡張モジュールが足りない(2回目)

### 必須モジュールが足りません(GD)

ご利用の PHP が a-blog cms の動作に必要なモジュールを利用できないため、インストールすることができません。

GD を利用できる環境でインストールしてください。

GDを入れて再チャレンジ

phpの拡張モジュールが足りない(3回目)

GDはOKになったけど警告が増えた

![](https://naganosky.com/blog/setup/img/checkIcon.gif) この環境では、ImageMagick拡張を利用できない為、ImageMagickを使用した画像処理を利用できません。 (CMSのインストールは可能です)

![](https://naganosky.com/blog/setup/img/checkIcon.gif) この環境では、OPcache拡張を利用できない為、PHPファイル キャッシュドライバーを使用できません。 (CMSのインストールは可能です)

![](https://naganosky.com/blog/setup/img/checkIcon.gif) この環境では、APCu拡張を利用できない為、APCuキャッシュドライバーを使用できません。 (CMSのインストールは可能です)

![](https://naganosky.com/blog/setup/img/checkIcon.gif) この環境では、Redis拡張を利用できない為、Redisキャッシュドライバーを使用できません。 (CMSのインストールは可能です)

![](https://naganosky.com/blog/setup/img/checkIcon.gif) この環境では、Gettext拡張を利用できない為、管理画面の言語を変更できません。 (CMSのインストールは可能です)

AIと対話の結果、「お前の規模ならRedisはなくてもいいだろう」ということなので、それ以外(apcu、imagick、gettext、opcache)を入れる。

ただし自分の環境ではOPcacheだけはインストールしても警告がきえない。

# php -m コマンドでチェックしてもZend OPcacheと出てくるので大丈夫そうなものなのに。

仕方ないのでこのまま無視して進めることに。

各種設定

ドメイン→データベース→テーブル→ブログとユーザー と案内に従って設定する。

この辺りは特につまづくことなくスムーズ。

セットアップ完了

「インストールを完了する」をクリックすると、ログインURL(https://<ドメイン名>/blog/login/)に自動遷移する。

結果、 404 Not Found 。はい、残念。

.htaccess の設定をnginxに設定する

ここでそういえば、とhtaccessの設定を無視していたことに思い至りました。

htaccess ファイルの設定をもとにnginx用の設定ファイルに書き換えます。 (さらっと書き換えるほどの知識はないのでAIに頼んで書き換えてもらいます。いい時代だ)

a-blogに関連する設定は以下のようになりました。たぶん大事そうな設定は全部移行できているはず。

これをnginxのconfに追記してnginxを再起動。

    # /blog → /blog/
    location = /blog {
        return 301 /blog/;
    }
    
    # ルーティング
    location /blog/ {
        try_files $uri $uri/ /blog/index.php?$query_string;
    }
    
    # index.php のみ実行許可
    location ~ ^/blog/index\.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # blog配下の他PHPは禁止
    location ~ ^/blog/.*\.php$ {
        deny all;
    }

    # config.server.php 禁止
    location = /blog/config.server.php {
        deny all;
    }

    # config保護
    location ~ ^/blog/config/ {
        deny all;
    }

    # 機密ファイル保護
    location ~ ^/blog/(composer\.json|composer\.lock|package.*\.json|yarn\.lock|pnpm-lock\.yaml)$ {
        deny all;
    }

    location ~ ^/blog/.*\.config\.(js|mjs|cjs|ts|mts|cts|json)$ {
        deny all;
    }

    location ~ ^/blog/(webpack\..*|vite\..*)\.(js|mjs|cjs|ts|mts|cts)$ {
        deny all;
    }

    location ~ ^/blog/tsconfig\.jsonc?$ {
        deny all;
    }

    # ドットファイル拒否
    location ~ ^/blog/\.(.*)$ {
        deny all;
    }

    # 静的ファイルセキュリティ + キャッシュ
    location ~* ^/blog/.*\.(js|css|jpg|jpeg|png|gif|webp|svg|woff|woff2|ttf|eot|ico)$ {

        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header Referrer-Policy "strict-origin-when-cross-origin" always;
        add_header X-XSS-Protection "1; mode=block" always;
        add_header Content-Security-Policy "default-src 'self';" always;

        expires 365d;
        add_header Cache-Control "public, max-age=31536000, immutable";
        access_log off;
    }

※環境によっても記述は変わるので、万が一参考にする場合は .htaccess ファイルをAIにぶん投げて書き換えてもらうといいです。
※webpに関する設定は入っていません。

ここまでやってようやく管理画面にアクセスできるようになりました。

分かっていればなんてことない設定でしたが最初だとこんなもんよね。

参考資料

参考にしたインストール手順 簡単セットアップを利用したインストール手順

大事なことはここに書いてあった 動作条件

archive, media, storage, cache, private, themes ディレクトリやルートディレクトリには、Apache 用の .htaccess によるアクセス制限 が含まれています。 これらの設定は Apache 専用であり、nginx などのサーバーでは無効です。

重要:これらのディレクトリにはバックアップファイルや一時ファイルなど、第三者に知られてはならない情報が含まれる可能性があります。 Apache 以外の環境で .htaccess の内容を適切に反映しないと、認証不要で機密ファイルがダウンロード可能となるなどの重大なセキュリティリスクが発生します。

Apache以外の環境の場合、必ず .htaccess のアクセス制限に相当する設定をで手動で行ってください。

ブログ一覧へ