Apache「.htaccess」→ Nginx

WebサーバNginx

「.htaccess」の代わりをどう実装するの? という問題

 状態:-  閲覧数:489  投稿日:2018-04-09  更新日:2019-08-14

Apacheでは簡単に実装できていたこと


A.指定ディレクトリ以下アクセス拒否
・指定ディレクトリ以下は、指定IPアドレスのみアクセス可能にする

B.指定ディレクトリ以下のinclude_pathを一括設定
php_value include_path



Apacheのように: .htaccess | NGINX 日本語訳

A.指定ディレクトリ以下アクセス拒否。指定ディレクトリ以下は、指定IPアドレスのみアクセス可能にする

 閲覧数:136 投稿日:2018-04-08 更新日:2018-04-09 

悩み


指定ディレクトリ以下アクセス拒否 
・Nginxは面倒

IPアドレスは頻繁に変更される
・その度毎にconfファイル修正してNginx再起動とか有り得ない
Nginxで特定のディレクトリにアクセス制限をかける
locationディレクティブ
nginx で特定のドメインや特定のディレクトリへの IP アドレスによるアクセス制限をする方法

2択


案A.指定ディレクトリ以下アクセス拒否
・Nginxで実装
・IPアドレスが変更される度、対象サイトそれぞれのconfファイル変更&Nginx再起動が必要

案B.指定ファイルを通る処理をアクセス拒否
・PHPで実装
・IPアドレスが変更される度、対象1ファイルのみを修正すれば良い
・但し、この方法では「指定ディレクトリ以下アクセス拒否」という設定は出来ない
「.htaccess」ではなく「phpファイル」でアクセス拒否(指定IPアドレスからのみアクセス可)

aguse.jp

案B採用


「指定ディレクトリ以下アクセス拒否」機能を実装したいが、「IPアドレスが変更される度、対象サイトそれぞれのconfファイル変更」という処理が大変過ぎる
・大半のサイトでフロントコントローラ導入しているため、案Bでも何とかなると思われ
・若干不本意だけど、他に手段がないため、しょうがない

B.指定ディレクトリ以下のinclude_pathを一括設定

 閲覧数:133 投稿日:2018-04-09 更新日:2018-04-13 

指定ディレクトリ以下のinclude_pathを一括設定


対象サイトそれぞれのconfファイル変更&Nginx再起動が必要
・件数が多い場合は現実的ではない

spl_autoload_register


autoload
PHP spl_autoload_registerでautoloadを自前で実装

要件にはオーバースペック


名前空間使用
spl_autoload_register()を使ったクラスファイルの自動読み込みと名前空間(namespace)

まともな実装
spl_autoload_registerでオートロード
spl_autoload_register 使おうぜ
PHP で、spl_autoload_register を使って、require_once 地獄を脱出しよう
spl_autoload_register( )の引数のarray( )の意味が分からなかったので調べてみました

2択


案A
・「.htaccess」で「php_value include_path」を使用して設定する前のやり方に戻す

既存の include_path の最後に includeディレクトリ を追加
▼set_include_path.php
<?php
 $path = '/var/www/html/include';
 set_include_path(get_include_path() . PATH_SEPARATOR . $path);
?>


既存の include_path の最後に includeディレクトリ を二箇所追加
・(:)コロンを利用
$path = '/var/www/html/include:/○○/lib';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

set_include_path

案B
spl_autoload_register(function ($class) {
   include 'classes/' . $class . '.class.php';
});
$a = new A();
$a->m();


案B問題点


クラス使用が前提
・異なる場合は一旦クラス化しないといけない
・テンプレートの場合は表示したい場所でincludeすればよいが、クラス化するので、対象エリアをプロパティ化なりメソッド化しなければならない
・面倒

最終的に


置換前
<?php include("common_siteheader.php"); ?>


置換後
  <?php include_once('/var/www/html/w4c.work/php-demo.w4c.work/demo/include/set_include_path.php'); ?>
<?php include_once('common_siteheader.php'); ?>



Nginx 設定等変更履歴

Nginx ( x CentOS 7) 目次



週間人気ページランキング / 9-14 → 9-20
順位 ページタイトル抜粋 アクセス数
1 PHPのmb_send_mail関数でメール送信できない | メール処理システム 29
2 Nginx設定。エラーログレベル | Nginx(Webサーバ) 21
3 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 11
4 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 10
5 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 9
6 PHP Version 7.1.2 php-mecabエクステンション対応 / PHP 7.0.14 からのアップグレード  | MeCab(形態素解析) 8
6 ソースからビルドしたPython 2.7.3 アンインストール失敗 | Python(プログラミング言語) 8
7 touch コマンド / viコマンド。新規ファイル作成時の違い | Linuxコマンド 7
7 さくらVPS0 7
8 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 6
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 6
9 PHPファイルでchmodエラー | PHP(プログラミング言語) 5
9 設定 2019/1/22 / 一般ユーザがmailコマンドでメール送信 / 管理者がmailコマンドでメール送信 5
10 Postfix | メール処理システム 4
10 CentOSでcpコマンド動作確認するためには、Control + T ではなく、 -v オプションを使用 | cp(Linuxコマンド) 4
10 499 (Request has been forbidden by antivirus) | HTTP(通信プロトコル) 4
10 tar | Linuxコマンド 4
10 Python 3.6 インストール / make altinstall | Python(プログラミング言語) 4
10 「CentOS6」から「CentOS7」への移行 | CentOS 7 (CentOS) 4
10 echo と cat の違い 4
2021/9/21 1:01 更新