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

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

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

備忘録:古い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を起動します。

タグ: , , , , ,

Python3 Bottleフレームワーク入門(その13)- HTTP/2対応hproxで ReverseProxy SSL対応 & Bottle連携


最近は何かと話題のhttp/2対応のWEB接続がかなり増えてきました。オリジナルアプリケーションをフレームワークで作ったものをhttp2対応させる事もフレームワークのライブラリーに既に実装されているのもあり手軽になってきているとはいえ、まだまだ敷居が高いかもしれません。

今回は、非http2対応のウェブアプリをリバースプロキシーで簡単に対応させるサーバを紹介します。haskellベースのプロキシーですが簡単に構築できます。もちろん、Apache,nginx,h2o,Caddyでもできますができるだけ設定が単純なもので行きたいのでこれを使用しました。但しバーストのメモリ消費は多いみたいだ。

ソフトのダウンロード

hproxをgithubから取得します。

作成するとデフォルトで~/.local/bin/hproxにバイナリーが設置されます。.bashrcに環境変数PATHで追加登録しておきましょう。

使い方

Proxyサーバは8000番ポートでリッスン状態にします。http/2接続の場合は証明書は当然ですが必須です。h2オプションスイッチはありませんがSSL仕様にすると標準でhttp/2対応になるようになっています。証明書がなければ自動でhttp/1.1接続になります。後は末端にあるリバースプロキシー先のアプリサーバ設定を- -revで指定します。

ソースコード(test.py)

毎度のお決まりのソースコードですが。。。。python bottleのサーバで実験してみます。下記はシングルスレッドですが、実運用ではマルチスレッド対応のWSGIにしてpythonアプリサーバを動作させてください。

ブラウザーで確認するか、curlコマンドで確認してみましょう。

hproxの使えるオプション

このサーバはwebsocket接続のproxyにも対応しておりますので、- -wsで後方にあるwebsocketのサーバを指定すれば利用できます。



Python Bottle Framework入門 全13回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続
13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応

合わせて読みたいPython MySQL操作関連

タグ: , , , , , ,

HTTP2対応 CaddyWEBサーバで仮想サーバ作る場合のやり方


caddy Webサーバで仮想サーバを作る場合は、/etc/caddy/配下にvhostsフォルダを作成し大元の設定ファイルをコピーしてドメインに該当する箇所とSSLの在り処、Pushする箇所のみ書き換えれば良い。
仮想サーバ設定はimportのある最下行だけ削除しましょう。仮想サーバ設定ファイルは名前は何でも良い。拡張子が.confであるならすべてそのフォルダーにあるファイルを読み込んでくれる。 仮想サーバは大元設定ファイル(Caddifile)の一番最下行にあるimport文で仮想ホストのインクルードを行う。ワイルドカードが使えるのでこの一行でvhostsに配置する仮想サーバ設定は終わりだ。 今回はWEBメールのRoundcubeとPhpMyadminを以下の設定を修正してやってみたがあっさり動いた。caddyは設定が簡単でいいね。

※設定ファイルの編集前に事前にフォルダー/etc/caddy/vhostsは作る必要があります。

タグ: , , ,

Caddy 高速WEB サーバ(http2 quic対応) on CentOS7


http2対応の高速サーバを今回扱ってみる。このサーバはGo言語で開発されたWEBサーバです。導入にはコンパイルから行う場合はGo言語開発環境が必要ですが
バイナリーから入れるのであれば、特にGo言語開発環境は必要ありません。導入方法は幾つかやり方があります。一番簡なのはCentOS7の場合ならepelレポジトリー
から導入するのが簡単です。今回はこのサーバを理解するため少し手間がかかるバイナリーダウンロードから導入する方法を紹介します。
尚、今回は既存のサイトをcaddyで設置するやり方ですが、新規サイトであればSSL接続の鍵の取得などを無償のLet’s Encryptから自動取得してくれます。通信スレッドはマルチスレッドタイプです。わかりやすい。

バイナリーパッケージのダウンロード

バイナリーパッケージを配置し実行環境を作る。

caddy起動をsystemdに登録する

caddyサーバの15,16行目の実行ユーザとグループを指定します。
22行目を編集します。-quic追加とcaddyプロセスログファイルの出力先を変更します。

caddy設定ファイルを作成する

www.testserv.netでhttps接続のListenや設定情報は以下のように行います。下記はWORDPRESSの場合の記述例になります。
予め、selinuxはOFFにしておきましょう。caddyは比較的デバッグ情報が寡黙の傾向にあるのでくだらないことで悩まず最初は「setenforce 0」で無効。 きちんとWEBサーバとして動いたら、「setenforce 1」で影響がないか確認すると良いと思います。 尚、この設定でQualisのSSLテスト評価で「A+」取得できました。

php-fpmの設定

caddyを起動する

トラブルシューティング

うまくcaddyが起動できていない場合は、おおよそlogのディレクトリパーミッション、SSL鍵のディレクトリパーミッションが原因のケースが多い。caddyユーザに設定してサーバを起動することは、ログディレクトリがデフォルトでrootユーザ、rootディレクトリならば、パーミッションやグループの検討の余地が必要。本格的にやるならばログを開放するのは危険なので/caddy/logディレクトリ等を作った方が良いのかもしれないと思います。 あるいはログファイルなら予め0サイズのログファイル名をtouchコマンドで作っておくことをお勧めする。 「journalctl -xe」を実行して調べてみると良い。また、firewalldやiptablesでportが開放されているかチェックし、開放されてなければ該当portをオープンにしましょう。

※まだまだ発展途上なところがありますが、個人的には大変気に入りました。設定がシンプルで少ない設定で動かせるところが良いと思います。当社でもApache2.4からこのサーバに切り替えて使っています。

最新yumパッケージインストール for CentOS7/RHEL7

最新yumパッケージインストール for CentOS8/RHEL8

タグ: , , , ,

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を仮想サーバディレクトリで作成して連携させてください。

タグ: , , , , , ,

1 2