1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めてサーバーにDB接続ツールをデプロイして、configの置き場所で迷った話

Last updated at Posted at 2026-01-10

今回、初めてサーバー上に PHP + MySQL のDB接続を行うツールをデプロイしました。
ローカル(XAMPP)では問題なく動いていたものの、本番に上げる段階でこんな疑問にぶつかりました。

  • DB接続情報(config)はどこに置くのが正解?
  • www配下に置いていいの?
  • URLから直接見えてしまったりしない?

正直、Webサーバーの公開範囲や仕組みをよくわかっておらず、「接続情報は隠さなきゃ」と思いつつ、はっきりとした判断ができませんでした。
この記事は、そのときに学んだ内容を整理したものです。

※本記事では、www / public_html のような 公開ディレクトリ(ドキュメントルート)を持つ一般的なWebサーバー構成を前提にしています。


そもそも、どこまでがURLでアクセスできるの?

configの置き場所を考える中で、まず分かっていなかったのが、

ブラウザからURLでアクセスできるのは、サーバー上のどこまでなのか?

という点でした。

一般的には、Webサーバーは 「ドキュメントルート」と呼ばれるディレクトリ配下だけを、ブラウザからアクセスできるように公開します。
多くの環境では wwwpublic_html がドキュメントルートとして使われることが多いです。

/home/username/
├─ www/              ← ブラウザからアクセスできる範囲(公開ディレクトリ)
│   └─ index.php
└─ config/           ← URLでは到達できない範囲(ドキュメントルート外)

この構成だと、

  • www 配下 → URLでアクセスできる
  • www の外 → URLではアクセスできない

となります。

一方で、PHPの require / includeURLではなくファイルシステム上のパスを読み込む仕組みなので、www の外にあるファイルでも読み込めます。


configはwww外に置ける(公開面から切り離せる)

ここまで整理できて、ようやく次のように考えられました。

  • URLでアクセスできない場所に
  • DB接続情報を置いて
  • PHPからだけ読み込めばよいのでは?

つまり、configをドキュメントルート(www)の外に置くと、HTTP公開面から切り離せてより安全、という考え方です。


例えばこんな構成(www外にconfigを置く)

/home/username/
├─ config/db.php
└─ www/index.php
require_once __DIR__ . '/../config/db.php';

この構成のメリットとしては、

  • URLで直接アクセスできない(ドキュメントルート外)
  • .htaccess に依存しない
  • 公開事故のリスクを下げやすい

といった点が挙げられます。


今回採用した構成(www配下 + .htaccess)

一方で、今回の環境では、

  • www外に置く構成を自分の言葉でまだ説明しきれなかった
  • まずは「URLで叩けないこと」を目で確認できる形にしたかった

という理由から、www配下に置き、.htaccess でアクセス拒否する方法を採用しました。

/www/config/db.php
/www/config/.htaccess

.htaccess

Require all denied

Deny from allというのも見かけましたが、現在は上記が一般的なようです。

アプリ側では通常どおり require します。

require_once __DIR__ . '/../config/db.php';

この状態で、

  • https://(ドメイン)/config/db.php をURLで直接叩く
  • Forbiddenになることを確認

というチェックを行いました。


補足:今回の構成について(local / 本番の切り替え)

今回の環境では、DB接続情報は db.php にまとめ、ローカル(XAMPP)と本番(サーバー)で定義を切り替える形にしています。
切り替えは HTTP_HOST を使って行い、db.php には接続情報の定義のみを持たせています。

実際のDB接続処理は共通関数ファイル(functions.php)にまとめ、そこから db.php を読み込む構成にしています。

※環境変数(.env)やサーバー側設定で切り替える方法も今後勉強したいと思います。


今回の学び

  • 一般的には、URLでアクセスできる範囲はドキュメントルート配下に限定される
  • PHPの require はURLではなくファイルパスを見る
  • configをwww外に置くと、HTTP公開面から切り離せてより安全
  • www配下 + .htaccess で守る方法もある
  • 最後は「URLで叩いてForbiddenになるか」を自分で確認すると安心できる

まとめ

今回は 「初めてのDB接続デプロイ」 だったため、まずは「自分が理解できる範囲で安全を確保する」方法を選びました。
今後は、www外にconfigを置く構成にも挑戦してみたいと思っています。

同じように「configどこに置けばいいの?」で止まった人の整理のヒントになれば嬉しいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?