WEB/システム/IT技術ブログ

SSLサーバ証明書を取得したので、これまでの「http://」へのアクセスを強制的に「https://」へリダイレクトするようにサーバを設定します。

今回は、.htaccessファイルを使用してリダイレクトを設定します。
ドキュメントルートに設置してあるファイル「.htaccess」をテキストエディタで開き、以下の内容をのテキストの先頭部分に追記します。

<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteCond %{HTTPS} off
	RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

{HTTPS}がoffの場合、つまり、アクセスが「https://」でない場合に、リダイレクトを実行します。
301は恒久的、つまり、今後ずっとを意味します。302は一時的なリダイレクトとなるので、目的に応じて設定します。

ここでGoogleなどのアクセス解析は、「http://」と「https://」を別サイトとして識別します。
これまでのサイトへの評価をどう引き継ぐかも意味するので、301と302は慎重に決定したほうがよいと思います。

以上、小ネタですがメモまで。

巷では、少し前からWordPressのxmlrpc.phpへの攻撃というのが流行りだしたようです。
今回、私もその被害に合うことになり、経緯と対策をまとめておきたいと思います。

問題の発端

ある日突然、当ブログへのアクセスが悪くなりました。
ブラウザでアクセスしようとすると、8割ぐらいの頻度で503エラーになってしまいます。

503 Service Temporarily Unavailable

共有サーバで複数サイトを運用しているので、試しに他のサイトにアクセスしてみると同じ症状です。
ページのほとんど503エラーが返され、サイトにアクセスすることができません。

503エラーなので、サーバにアクセスが集中して高負荷状態になり、繋がりにくくなっていることが考えられます。

「爆発的に人気が急上昇したページでも?」と淡い思いを抱きながらも、アクセス解析サイトを確認してみました。
しかし、解析結果に特に目立った変化はありません。
それもそのはず、503はそもそもサイトにアクセスできていないエラーなので、Google Analyticsなどの解析結果には反映されません。

リモートリポジトリにHTTP経由でアクセスするための、Gitサーバの設定ついてのメモです。

今回はUbuntuにApacheがインストール済みであることが前提です。
確認環境は以下のとおりです。

Ubuntu 16.04
Apache2 2.4.18
Git 2.7.4

リポジトリを用意する

まずはじめにGitサーバを用意します。
Gitがない場合、以下のコマンドでインストールします。

$ sudo apt-get install git

次に「/home/user/git/project.git/」にリモートリポジトリを作成します。

$ mkdir git
$ cd git
$ git init --bare --shared project.git

作成したリポジトリ全体について、Apacheユーザのアクセス権を与えます。Apacheユーザはデフォルトでは「www-data」です。

$ sudo chown -R www-data:www-data project.git

リポジトリの準備は以上です。

FuelPHPのmigration機能は、コマンドラインやプログラムから簡単にDBのテーブルを操作、管理できます。
ドキュメントは少なく、その概念を理解するのには少々苦労しますが、使いこなせば非常に便利です。

そこで、私がこれまでに実行したmigrateコマンドを、ここに随時、メモとして書き留めておきたいと思います。

migrateの実行

テーブルの追加、削除、カラム追加、削除や変更などの設定を、oilコマンドを使ってmigrationファイルを生成することができます。
例えばテーブル「sample」を作成する場合は、以下のコマンドを実行します。

php oil generate migrate sample (...カラムの設定などは略)

するとフォルダ「/fuel/app/migrations/」に「001_create_sample.php」というファイルが生成されます。
このファイルの中にはテーブルの定義が記述されており、以下のmigrateコマンドを実行することで、実際にDBに反映されます。

php oil refine migrate

generateコマンドを実装する度に「002_」、「003_」と連番でmigrationファイルが生成されていきます。
これはDBの状態をバージョン管理するためであり、以下のようにコマンドを実行することで、いつでもDBの状態を変更できます。

php oil refine migrate:current	(最新の状態にする)
php oil refine migrate:up	(バージョンを一つ新しくする)
php oil refine migrate:down	(バージョンを一つ古くする)
php oil refine migrate --version=10	(指定したバージョンに更新する)

つまり、migrationファイルを適切に管理することで、本番環境、ステージング環境や開発環境など各環境でDB設定を同期できます。

それでは、具体的にさまざまなDB操作に関するmigrateコマンドを記していきます。

FuelPHPはMVC(Model、View、Controller)フレームワークとして知られていますが、『ビューモデル(ViewModel)』というオプションが存在します。

その名の通り、ViewとModelの中間の担うクラスなのですが、今回はその利用方法を勉強したいと思います。
※実際のイメージではControllerとViewの間?

「ビューモデル」とは?

「ビューモデルとは?」ですが、
例えばMVCで構築する場合、任意のテーブルの情報を取得し画面に一覧として表示する処理を考えます。

Controller内でModelからデータを取り出し、HTMLコードで整形し、Viewに渡して表示させます。
それに対して以下のような意見が出ることがあるでしょう。
「HTMLの整形はビューでやるべきでコントローラの中でHTMLタグを扱うべきではない」

一方で、ModelのデータをViewに渡して、View内でループさせたり値のフォーマットを調整したりしてHTMLを整形させます。
そうすると以下のような意見もあります。
「View内では表示処理のみで、あれこれロジックを組むべきではない」

はたまたこんな事言う人も。
「Modelはそれ自身の役割があるからController内(またはView内)で呼び出すべきじゃない」

。。。決めの問題で、どっちでもいい気がします。

そんな時、そんな処理はViewModelに記述しましょう!

WAF(Web Application Firewall)はWebサイトを改ざん、情報流出やウイルス感染などから守るツールです。
最近ではレンタルサーバなどにデフォルトの機能として備わっていることもあり、導入コストが低くなってきました。

但し、このWAFを有効することにより、これまで動作していたWebアプリケーションなどが動作しなくなることもあります。
WAFの一部機能をOFFにするなど設定を調整することで、アプリケーションの不具合を回避することもできますが、それがセキュリティに穴をあける要因になることもあります。

そこで本記事は、WAFの機能はそのままで、Webアプリケーションへの弊害と対策をケースバイケースでまとめます。

ちなみに本内容は、主にさくらレンタルサーバのWAF、JP-Secure製の「SiteGuard」上での事例ですが、別の環境でも有効な場合がありますので、ご参考にしていただければと思います。

PHPでクッキーにアクセスできない

以下のようにして、PHPではクッキーにアクセスできない場合があります。

setcookie('sample', 100);
$val = $_COOKIE['sample'];	// 取得できない

このような場合にはSESSION管理で一時データを保存するるようにしましょう。

前回、Windows上で「Node.js」と「gulp.js」をインストールして、「gulp.js」を使用できる環境を用意しました。
WindowsでNode.js、gulp.jsをインストールして効率よい開発環境を目指す(準備編)

繰り返しになりますが「gulp.js」は本体のみでは機能せず、必要は機能をプラグインとしてインストールする必要があります。
今回はHTML、CSS、JavaScriptを含む静的Webページコーディングの、快適な開発環境構築を目指して便利そうなプラグインをいくつか紹介したいと思います。

まずは任意のプロジェクトフォルダのルートに移動し、「gulp.js」を利用する準備をします。

> npm init
> npm install --save-dev gulp

新規で「gulpfile.js」を用意し、「gulp.js」をロードしておきます。

var gulp = require('gulp');

このファイルを編集することで、機能を追加していきます。

最近「Node.js」や「gulp.js」といったキーワードをよく耳にします。
プログラミングやコーディングの作業効率を改善する環境を構築できるようなので、モノは試し、まずはベースとなる環境を整えてみます。
この技術は基本的にCUI環境で操作するで、LinuxベースのMacなどの環境に関するドキュメントが多いですが、今回はWindowsでの環境構築を目指します。

以下、今回導入したバージョン情報です。

OS Windows 7 Professional 64bit
Node.js 5.4.0
npm 3.6.0
gulp.js 3.9.1

今回「gulp.js」のプラグインを使用することが目的ですが、そのためにはnpmコマンドが必要で、npmを使用するために「Node.js」をインストールするといった流れです。

FuelPHPの機能を活用して、良い感じで他言語対応サイトを構築できないか、考えてみました。

そこで、クラスAgent、Cookie、Langを活用したサイト構築にトライしてみました。
今回は、日本語ユーザがブラウザでアクセスした際は日本語表示で、そうでない場合は英語表示でサイトを切り替えることを目指します。

言語ファイルの用意

まず、言語を切り替える文言について、言語ファイルを「/fuel/app/lang/」に用意します。
ファイル名は任意ですが、各言語はフォーマットを含めて統一させます。
例えば以下のファイルを用意します。

WordPress 4.4にアップデートしてから、記事に投稿した画像の出力まわりがおかしくなりました。
Firefoxでサイトを確認してみると、それまで画像が表示されていたところが表示されなくなっている。。。

ソースをチェックすると、画像メディアを追加してサムネイルを表示していた部分が以下のようになっていました。

<img src="/images/sample-300x250.jpg" alt="サンプル" width="300" height="250" class="size-medium wp-image-3114" srcset="/images/sample-300x250.jpg 300w, /images/sample.jpg 525w" sizes="(max-width: 300px) 100vw, 300px" />

「srcset」や「sizes」など見慣れない属性が追加されています。

どうやら、レスポンシブに対応するべく追加された新しい機能のようです。
ブラウザサイズに応じて画像を切り替えたり、Retinaディスプレイなど解像度の高いデバイスに対応したりと、
レスポンシブサイトにおいて、あらゆるデバイスに対して最適な画像を動的に出力してくれるようです。
つまり、画像が荒れたり、必要もないのに全てのサイズの画像を読み込んだりといったリスクを避けることができるようです。
※この技術の詳細についてはまた次回の宿題とします。。。

Monthly Archives