Nginx+PHP+SQLiteでURIごとにアクセス制御した掲示板を作成

NginxではURIごとにアクセス制御が可能。
アクセスされたくないページには404を返したりするのに使うと良い。
今回は、前回(https://shiro-secret-base.com/?p=468)から一気に飛躍して簡易掲示板を作ってみた。

 

作業環境

OS Ubuntu 18.04.3 LTS
nginx -v 1.14.0 (Ubuntu)
phpfpm -v PHP 7.3.9 (fpm-fcgi) (built: Sep 17 2019 09:26:12)
sqlite3 –version 3.22.0

今回は投稿内容をSQLiteで保存するようにします。(DB作るのも面倒いし、インサートとセレクトできればいいので)

ソースコード(GitHub)

今回のソースはこちら(https://github.com/smithshiro/nginx-neko-neko)でも確認できます。

今回作るもの

今回作るページはこちらです。

 

名前とコメントを入力して保存する。ザ・フツーの掲示板です。猫は特に関係ないです。

ディレクトリ構成

 

 

DBにはSQLiteを使うので、src/sqlite配下にdatabase.sqlite3を作成します。

また、PHPでsqliteを実行できるようにphp.iniを編集します。多分以下をコメントアウトすれば、いけるはず。

その後、initializeDatabase.phpを実行すればテーブルが作成されます。

 

Nginx設定

 

 

API用のlocationディレクティブを作成

投稿を取得したり、投稿を追加するのはAPIで行います。

そのため、Webページから叩くAPIのURIを”/api”スタートしてます。

25~33行目のlocationディレクティブでは/apiからアクセスされた場合は、プロジェクトソースの/srcを参照するようになっています。

 

srcから直接アクセスはできないように制御

ただ、sample-site:888/src/… てアクセスしたときにソースファイルに直接されてしまうのはまずいので

34~36行目では404(500系ではファイルがあると思わせるので)を返すようにしています。

ソース等はGitに上がっているので、そちらからどうぞ。説明に関しては省きます。

 

まとめ

  • locationディレクティブをネストすることで、ページ用のURIとAPI用のURIにアクセスするルートディレクトリを分けることができる。
  • アクセスされたくないURIなどもlocationディレクティブで制御することが可能。

 

参考&宣伝

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です