月別アーカイブ: 2015年1月

Azure Web Site で CakePHPを使用していてBasic認証をかける方法

目的:開発時に全ページに認証をかけたい

CakePHPはコンポーネントやAction単位に認証を付けられる機能があります。

しかし、この機能は特定の管理ページだけに認証を付ける場合には便利ですが、

今回は全ページに認証を付けたかったので、少し目的が違います。

Azure Web SiteはApacheでないので、htaccessとか使えない

全ページに認証をつけるのだから、何も考えずにhtaccessで行うと思っていました。

ぐぐって調べてもCakePHPでもトップディレクトリのhttaccessをごにょごにょ書き換えれば良さそうでした。

しかし、うまくいかない。

….

すこしはまりましたが、原因はAzureはApacheではないのでhtaccess使えないってことでした。

まあ、確かにそうですね。気づかなかったのがお恥ずかしいです。

手順:HttpAuthModuleを使う

下記ページを参考にしました。

  • http://azure-recipe.kc-cloud.jp/2015/01/website-basic-auth/

手順は次のようになります

HttpAuthModuleを下記からダウンロードします。

  • https://github.com/nabehiro/HttpAuthModule

今回は全ページに認証を付けたいので、トップディレクトリに「bin」ディレクトリを作成し、

その中に「HttpAuthModules.dll」を配置します。

次に、「Web.config」の修正です。

AzureでのCakePHPのトップディレクリにはすでにWeb.configが存在するはずです。

修正前は次のような形だと思います。

<?xml version=”1.0″ encoding=”UTF-8″?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=”Redirect static resources” stopProcessing=”true”>
<match url=”^(ico|img|css|files|js)(.*)$” />
<action type=”Rewrite” url=”app/webroot/{R:1}{R:2}” appendQueryString=”false” />
</rule>
<rule name=”Imported Rule 1″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
<rule name=”Imported Rule 2″ stopProcessing=”true”>
<match url=”^$” ignoreCase=”false” />
<action type=”Rewrite” url=”/” />
</rule>
<rule name=”Imported Rule 3″ stopProcessing=”true”>
<match url=”(.*)” ignoreCase=”false” />
<action type=”Rewrite” url=”/{R:1}” />
</rule>
<rule name=”Imported Rule 4″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

これを次のように修正します。下記例ではユーザ名「user」パスワード「passwd」を設定した例です。

<?xml version=”1.0″ encoding=”UTF-8″?>
<configuration>
<!– Modification START –>
<configSections>
<section name=”httpAuthModule” type=”System.Configuration.NameValueFileSectionHandler” />
</configSections>
<httpAuthModule>
<add key=”AuthMode” value=”Digest”/>
<add key=”Realm” value=”SecureZone”/>
<add key=”Credentials” value=”user:passwd;”/>
<add key=”DigestNonceValidDuration” value=”120″/>
<add key=”DigestNonceSalt” value=”uht9adfafewbSAX” />
</httpAuthModule>
<!– Modification END–>
<system.webServer>
<!– Modification START –>
<modules>
<add type=”HttpAuthModule.HttpAuthModule” name=”HttpAuthModule” />
</modules>
<!– Modification END–>
<rewrite>
<rules>
<rule name=”Redirect static resources” stopProcessing=”true”>
<match url=”^(ico|img|css|files|js)(.*)$” />
<action type=”Rewrite” url=”app/webroot/{R:1}{R:2}” appendQueryString=”false” />
</rule>
<rule name=”Imported Rule 1″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
<rule name=”Imported Rule 2″ stopProcessing=”true”>
<match url=”^$” ignoreCase=”false” />
<action type=”Rewrite” url=”/” />
</rule>
<rule name=”Imported Rule 3″ stopProcessing=”true”>
<match url=”(.*)” ignoreCase=”false” />
<action type=”Rewrite” url=”/{R:1}” />
</rule>
<rule name=”Imported Rule 4″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

以上でアクセスするとBasic認証が現れるはずです。

外部ホストからMySQLへ接続する

これまで、開発用にはphpmyadminなどを利用していましたが、

本番環境へは、コマンドラインから直接管理を行っていました。

今回、外部ホストから直接MySQLに接続して管理できるツールが存在することを知ったので、方法をまとめます。

MySQL管理ソフトを導入

まず、MySQL管理ソフトをインストールします。

自分は、Macを利用しているので、「Sequel Pro」というツールを導入しました。

ツールのインストールは特に特筆すべき点はないので割愛します。

MySQLで外部ホストからの接続を許可する

上記ツールを導入して、MySQLへ接続しようとすると、

MySQLへの接続中にエラーが発生しました。

調べてみると、下記サイトに記載されているように、MySQLへデフォルトで外部ホストからの接続が許可されていないようです。

外部ホストからのMySQLへの接続許可設定を行います。

// MySQLへ接続
mysql -u root -p
// パスワード入力
Enter password: 
// 一覧表示
mysql> select user,host from mysql.user;
+--------+-------------------------+
| user | host |
+--------+-------------------------+
| root   | 127.0.0.1               |
| apache | localhost               |
| root   | localhost               |
| root   | hogehoge.jp             |
+--------+-------------------------+

// 上記はすべてローカル接続しか許可していないので、外部からの接続許可をする。
// ※データベースの一覧確認をし、外部接続を許可するDBをきめる。
mysql> show databases; 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| hoge_db            |
+--------------------+
// ユーザ名”apache″、接続する外部ホストは”127.0.0.1”、利用するDBは”hoge_db”で設定する場合次のようになる。
mysql> grant all privileges on hoge_db.* to apache@"127.0.0.1" identified by 'your password' with grant option;

すべてのDBへの接続を許可する場合は[hoge_db.*]の箇所を[*.*]とする。

以上で、接続できるようになるので、MySQLの接続管理ツールで接続を試します。