当社はIT技術のオンライン教育を得意としたセミナー専門会社です。

ITエンジニアの技術力UPをお約束します。

Apache2.4(Ubuntu/Debian)で複合言語(メイン:php サブ:python)で組み合わせる典型的なやり方。

Apache2.4(Ubuntu/Debian)で複合言語(メイン:php サブ:python)で組み合わせる典型的なやり方。


サイトを構築する場合、1つのプログラミング言語で作る場合より複数の言語で構成するほうが多いと思う。従来WEBに非常に親和性の高い言語といえばなんといってもphpになるだろう。さらにCMSとなるとWORDPRESSをケースが非常に多いと思います。このようなケースでサイトの一般的なページはWORDPRESSで作るけど、システム的な部分はsymfonyやlaravel、cakephpのようなフレームワークで作るのではないかと思います。今回はこのシステムを組み込む部分に異なる言語pythonを使った場合はどうやって一つのサイトにまとめるか解説していきたいと思います。

PythonをApache2.4に組み込む

Apache2.4へ仮想ホストを登録する

WSGIScriptAlias,WSGIDaemonProcess,WSGIProcessGroup,WSGIApplicationGroupのパラメータ設定が肝である。特に注意しなければならないのは通常apacheのユーザ、グループはwww-dataなのだが、pythonで作るシステム部分が共通でwww-dataで良い場合もあるだろうし、異なったほうが良い場合もある。下記の例では異なるユーザでpythonプログラムを起動して動かす前提で作っています。予めuser&groupをuseraddコマンドで作っておきましょう。pythonプログラムを設置するパスは当然起動ユーザのアクセス権になっている必要があります。そのユーザのログインパスをそこに設置するというのも一つの手法です。あともう一つ注意点があるとすれば、processとthreadsの数です。apache2.4でhttp2対応させるケースが増えてきた現在ではpreforkからevent,workerタイプに移行しapacheを動作させるケースが多くなりました。メイン設定プロセス数とスレッド数に対しpythonのプログラムが独立してマルチプロセス、マルチスレッドで動作するためメインとサブで恐らく設定数の兼ね合い、バランスを取らないとApacheサーバが落ちてしまう原因を作りそうな気はしています。サブがサイト運用の中で処理メインならば、当然サブのほうがプロセス数、スレッド数が多くなければいけないだろうと思います。興味ある方は実験してみてください。Scriptで呼び出していると言ってもバックエンドで動いてる動作に近いのではないかと推測します。

下記の例ではドキュメントルートは/var/www/vhosts/flat_siteへ配置し、pythonのコンテンツは/var/www/vhosts/sideaに配置します。セキュリティ的にpythonコンテンツをドキュメントルート配下に設置しないよう気をつけましょう。

Pythonプログラム

/var/www/vhosts/sideaに下記をindex.pyとして配置します。

開発とデバッグ用に単独起動の処理を”__main__”に導入しています。通常はapache起動ではelseのapplicationに分岐します。尚WSCRIPTSで動作させる場合はpython側はシングルスレッド仕様で作成して大丈夫です。(スレッドセーフにプログラムを作ってさえいれば問題なし)マルチプロセス・マルチスレッドの部分はApache側が担当します。

接続確認を行う。

下記の例で「http://zero.serve.net/sideapp」にアクセスするとpythonのコンテンツが表示され、それ以外のフォルダーはWORDPRESS(php)で動作するようになっています。ドメインは貴方のドメインして実験してみてください。

タグ: , , , , , , ,

備忘録:古いUbuntu14環境でhttp2対応 caddy & spawn-cgi で作るPHP環境 Roundcubeの設置


指定された環境(Ubuntuだけど)がバージョンが古くphp7.xとかApache2.4.17以降がパッケージインストールできない。以前はダウンロードできたのに今は何故かレポジトリ追加してもリストされない。ということでphpソースコンパイル&spawn-fcgiで対応することにした。最終的にWEBメールのRoundcubeの設置リクエストがあったのでセットアップしましたがすんなり簡単に終わりました。めでたし!

php7.1をダウンロード&コンパイル。

最新のphpソースだとライブラリー関連で時々エラーや警告で痛い目に合うので、無難にphp7.1だといけるかな!?ってことでphp7.1をダウンロードしてコンパイルすることにしました。もっと上のバージョンでも成功するかもしれないので是非ご覧なっている方はチャレンジしてみてください。

FAST CGI環境を構築しPHPが実行できるように整える。

Caddyの設定を行う

caddyのインストールは省きます。過去の記事から参照ください。caddy設定のところのみ掲載します。またroundcubeの設定も割愛します。あくまでもroundcubteの動作確認まで。phpコンテンツの作りによってrewrite設定が必要なケースが様々あるので今後ご紹介して行こうと思います。

サーバ起動

FASTCGIでPHP処理を待機させ、caddyを起動します。

タグ: , , , , ,

無料でphpマルウェア検知の凄いソフト


今回はタイトルにある通りphpマルウェアを検出してくれるソフトを紹介します。フリー版ですがなかなか強力ですよ! 巷に出ているWORDPRESSのマルウェア検出プラグインは正直いって使い物になりません。 下手をすると、「セキュリティソフト」と謳って実はスパイウェア、マルウェアが仕込まれているケースがかなりあるため用心したほうが良いと思います。 ロシア製のソフトですが、AIエンジンを使って推測しながら検出を行います。私は3年前から時々使っていますが大変検知率が高い優れたソフトと思います。検出さえしてくれれば自力で怪しいコードを容易く見つけられる方も多いと思いますのでぜひ試してみてください。WORDPRESSの感染したコンテンツの救出に役立ちます。

検出したファイルは、最終的にHTMLファイルでレポートしてくれます。

ダウンロード先のページ

https://revisium.com/aibo/ 下記のピンクで囲ったボタンを押すとダウンロードが始まります。ZIPファイルで提供されます。

適当なフォルダーへ保存したら下記のように作業を進めてください。

インストールとスキャン

フリー版では650.00 Kb以上のファイルは検出がパススルーされます。警告として表示されるのでそれは検知対象から外れたと思ってください。

検索対象:
php,js,json,htaccess,html,htm,tpl,inc,css,txt,sql,ico,,susp,suspected,zip,tar,cgi,pl,o,so,py,sh,
phtml,php3,php4,php5,php6,php7,pht,shtml

タグ: , , , , ,

CentOS6/CentOS7 Apache2.4.17以降へアップグレードかつHTTP2対応 SSL&phpも考慮


CentOSはバージョン6,7ともレポジトリーISUを追加してhttp2対応が必要。CentOS7はApache2.4ではあるがマイナーバージョンがhttp2に対応していない。
尚更、CentOS6は対応できていない。Ubuntu/Debian系のLinuxなら比較的簡単に入れられるのでそこがCentOSの場合面倒なところ。ちなみに秋頃にリリースされたCentOS8はデフォルトでApache+php-fpmの組み合わせでhttp2仕様になっています。特にhttp2に対応するための特別な設定は不要です。

まず最初に現在使っているhttpd2.2.xのWEBサーバとphpを外す必要があるだろう。標準のものを使っている場合はremiの進んだバージョンのphpを使っている
場合もあるだろうが概ね下記のような感じで依存関係もチェックしながら外してゆく。その後にISUのレポジトリーを追加してhttp2対応のhttpd2.4を導入する。
このバージョンではmod_phpが古いhttpdでなければ動かないようなのでphpはfastCGIを使った方法に変更する。

現行環境の削除、レポジトリー追加とapache2.4(http2対応バージョン)+fastCGI導入

※httpd2対応のモジュールロード設定は/etc/httpd/conf.modules.d/00-base.confに追加されています。

プロセスをevent型に切り替える

httpd2対応にはhttpdプロセスのprefork型の動作では駄目です。event型に切り替える必要があります。

fastCGIの設定修正

mod_phpが使えないのでfastCGI経由でphpを動作させます。それにあたり基本設定の動作ユーザをapacheに切り替えます。

仮想サーバ設定にhttp2動作のためのデイレクティブ追加

eventモジュールのパラメータ設定

Apache2.4ではMaxClientsがMaxRequestWorkersに変わっています。

/etc/httpd/conf.dの配下にmpm_event.confのような名前で配置します

fastcgiのプロキシー設定

fastcgiとapacheをつなぐ設定です。これがないとphpが動きません。

proxyfcgi.confのような名前で/etc/httpd/conf.dに配置してください

サーバの起動

http2になっているかチェックする。

http2に対応していることがブラウザの検証ツールで確認できます。 またレスポンスヘッダーを見て確認する事もできます。

h2プロトコルの結果検証

PHPが使えなかったりhttp/1.1のままになっている方は何が原因?

それはopensslが古いままだからです。openssl1.0.2以降を使いましょう。あるいはapacheとphp-fpmの連携が噛み合っていない場合もありえます。phpのバージョンとphp-fpmのバージョンがマッチしてなかったりすることもあるので確認してみましょう。Apacheではfastcgiの連携にproxyを経由します。その設定が適切に行えてなければ連携できていません。なければ自分でproxyfcgi.confを仮想サーバディレクトリで作成して連携させてください。

タグ: , , , , , ,

PHP Laravel framework入門(3) – テンプレートエンジンを理解する。


Laravelのテンプレートエンジンは標準でBladeというエンジンを使用しています。このテンプレートエンジンは比較的よくあるテンプレートエンジンの記法に近いのですんなり覚える事ができると思います。bladeもまたよくあるテンプレートエンジン同様にマスターレイアウトがあって、その上にパーツ&ブロック単位のテンプレートがある仕組みになっています。ヘッダとフッタはよくある共通部分ですから簡単振り分けて構築できそうです。

◯ resources/views/layout/master.blade.php

ちょっと見た感じでは他のテンプレートよりも見たことがないインクルードする幾つもの記法があることがわかりますね。マスターレイアウトはアウトラインを作るものです。

  • @yield  @yieldは継承ができませんが変数のデフォルト値が使えます。
  • @section  @sectionは最も使い勝手が良い変数等を継承できるのが特徴です。尚、記法に親テンプレと小テンプレでブロックの終わり方が異なるので注意しましょう。親の方では終了が@showで終わります。小テンプレは@stopや@endsectionを使用します。
  • @include @includeは最もシンプルなものでベーシックな変数の渡しのみ可能でその他はできません。

それでは次にHTMLのBODY部分を形成するテンプレートを見てみましょう。

◯ resources/views/page.blade.php

タグ: , , ,

1 2