Nginx

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ディレクティブで制御することが可能。

 

nginx実践入門
nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。
nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。

-Nginx
-, ,

© 2023 Shiro's secret base