参考サイトのメモ。
Itamaeの方がいいかな。
Ansible
Ansibleのインストールと、ごく簡単なplaybook
VagrantとAnsibleでCentOSの環境を用意してみる - yk5656 diary
LAMP環境を作成
AnsibleでとりあえずのLAMP環境してみる - yk5656 diary
PHPをインストール
Ansible でインストール (php 5.6) - Qiita
Itamae
Itamaeのインストール、ごく簡単なレシピ、リモートサーバへの適用
Itamae on AWS - Itamae の EC2 へのインストールとレシピ適用 - - Qiita
レシピの書き方など
Chef脱落者が、Itamaeで快適インフラ生活する話 - Qiita
itamae 入門 - Qiita
Itamaeチートシート - Qiita
vagrantとitamaeによるLAMP環境構築 - Qiita
EC2 のインスタンスを Itamae でプロビジョニングした | mizoguche.info
設定値をJSONまたはYAMLに切り出す
第3回 ノード属性で汎用的なレシピを書く:Itamaeが構成管理を仕込みます! ~新進気鋭の国産・構成管理ツール~|gihyo.jp … 技術評論社
公式ドキュメント(英語。詳細は載ってない)
Home · itamae-kitchen/itamae Wiki · GitHub
公式ドキュメントが想像よりそっけないので、詳細は他のブログ等やQiitaで調べながら...。まあシェルコマンドが使えるから汚い書き方でいいならどうにでもなるけど。
2016年7月16日土曜日
Ansibleや Itamaeで LAMP環境を作る
2016年5月21日土曜日
Qualys SSL Server Testでレートを Aプラスにする
Qualys SSL LabsのSSL Server Testで、A評価を得てみる。
環境
- OS: Amazon Linux 2016.03
- Webサーバ: Apache 2.4.18
- OpenSSL: 1.0.1k
- サーバ証明書: Let's Encrypt(certbot)
デフォルト設定
SSLProtocol all -SSLv3↓
SSLHonorCipherOrder on
B
This server accepts RC4 cipher, but only with older protocol versions. Grade capped to B.
SSLCipherSuiteも指定(コメントアウトされている推奨?設定+RC4も禁止)
SSLCipherSuite HIGH:MEDIUM:!RC4:!aNULL:!MD5↓
A
HSTSを追加
Header always set Strict-Transport-Security "max-age=15768000"↓
A+
HTTP Strict Transport Security (HSTS) with long duration deployed on this server.
さらにProtocol Supportを満点にするには、TLS1.2のみにすればOK。
Key ExchangeとCipher Strengthを満点にするには?SSLCipherSuiteをきちんと指定する??
参考
- 安全なWebサイトの構築方法(SSL編) ~Qualys SSL LABSでA評価を目指して~ - SHANON Engineer's Blog
- Generate Mozilla Security Recommended Web Server Configuration Files
certbot (Let's Encrypt)を Amazon Linuxにインストール
以前一度挫折した(古いAmazon Linuxをアップデートして使っているためだと思われる)が、certbotに改名後に試してみたら、できた。
前提
- gitはインストール済み
- WebサーバはApache
手順
- sudo easy_install pip
- sudo pip install --upgrade pip
- sudo /usr/local/bin/pip install --upgrade virtualenv
- (作業用ディレクトリで)
git clone https://github.com/certbot/certbot - cd certbot
- ./certbot-auto certonly --webroot -w /var/www/html -d ドメイン名 --agree-tos -m メールアドレス --debug
- /etc/httpd/conf.d/ssl.confの下記箇所を変更する。(Apache2.4.8より前のバージョン場合は微妙に違うので参考サイト参照。)
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem - httpdを再起動
証明書の自動更新
証明書の期限は90日なので、cronで定期更新させる。cronがメールを飛ばすように設定してあれば結果がメールで来る。
(例:月に1回更新する場合。日時は月初にすると混雑しそうなので、適当にずらした方がよいかも。)
45 3 12 * * ./certbot/certbot-auto renew && sudo service httpd reload
(2016/6/25 追記)
--debugも付けた方がよいかも?参考→Let's Encryptの cronによる実行が動かなくなった時の対策
(追記終わり)
期限まで30日以上ある場合は更新されない。それでも更新したい場合は--force-renewオプションを付ける。
上記例を試した時はまだ更新されなかったので、本当にこれでよいかはその日が来てから確認する。(--debug無しとか大丈夫か?タイミングによっては、月イチだと期限切れになるケースがあるかも?)
備考的な
- Aapcheは停止しなくても大丈夫。(webrootオプションを使う場合はいいらしい。)
- 証明書生成時にポート443は開いてなくても大丈夫。
- /var/www/htmlに.well-knownディレクトリが残る。消してもいいのかな?
さよなら自己署名!さよならオレオレ証明書!
参考
2015年2月25日水曜日
Content Security Policy
ApacheでContent Security Policyを設定したメモ。
httpd.confで設定する例。
Header set Content-Security-Policy "default-src 'self'; script-src 'self', 'unsafe-inline', www.example.com"
とりあえずレポートだけ見たい場合の例。
Header set Content-Security-Policy-Report-Only \
"default-src 'none';\
script-src 'self';\
object-src 'none';\
img-src 'self';\
media-src 'none';\
frame-src 'none';\
font-src 'none';\
connect-src 'none';\
style-src 'self';\
report-uri /csp-report.php?v=1"
レポートでどのポリシーに違反したのか見やすくするため、xxxx-srcを全部書いた。
何がエラーになるか分かるように基本厳し目に、使わなそうなのはとりあえずnoneにしている。
report-uriのパラメータ(v=1)は後述。
右辺の書き方については下記参照。
CSP policy directives - Security | MDN
はまりそうなとこだけ書くと、
- 'none'・'self'・'unsafe-inline'・'unsafe-eval'はシングルクォーテーションも含めて書く必要がある。
- データスキーム(data:)はコロンも含めて書く。
(mod_pagespeedを使っていると、気づかない間にデータスキームが使われていたりする。)
ちなみに、スキームはデータに限らず、"https:"など特定のスキーム限定を指定できるみたい。 - URLはスキームを省略可(例:www.example.com)。省略した場合、元のページと同じスキームと同じもののみ許可する。
ポートも同様。 - URLで別のスキームを許可したい場合、別途記載が必要。
例:元のページがhttpで、読み込むCSSがhttpsの場合、httpsのURLも書く必要がある。
ワイルドカードが使えるという説明もあったが、下記のどちらも駄目だった(ブラウザによる?)
- *://www.example.com
- *//www.example.com
- URLのサブドメインはワイルドカード(*)が使える。
サブドメインをワイルドカードにすると、サブサブ(...略)ドメインまでワイルドに適用される。
ただしサブドメイン無しには適用されないらしい。
レポートをログに書き出すPHPの例。
<?php
if (!$_GET || $_GET['v'] < 1) {
exit;
}
$report = json_decode(file_get_contents('php://input'), true);
$log = date('[Y-m-d H:i:s] ') . $_SERVER['HTTP_USER_AGENT'] . ' ';
$log .= var_export($report['csp-report'], true) . "\n";
error_log($log, 3, '/var/log/csp-report.log');
Content-Security-Policy-Report-Onlyの例でreport-uriにパラメータを付けたのは、このPHPの2行目で古いポリシーを無視するため。
ブラウザによってはキャッシュしてしまうようで、古いポリシーに基づき送信してくることがあり、ノイズになるので。
ポリシーを変えたら、パラメータの数字とPHPの2行目の数字を両方インクリメントする。
ログファイルはApacheが書き込めるように権限設定しておく。
(2015/3/2 追記)
logrotateも追加しておく。(phpのlogrotate設定をコピーして作成。)
/var/log/csp-report.log { missingok notifempty}
(追記終わり)
また、ModSecurityを使っている場合はレポートがModSecurityではじかれないように注意。
ログを見ていると、違反URLとして報告される"about"はabout:blankだと思うけど、"asset"って何だろう?
ちなみに、Gmailのポリシーはこんな感じだった。
script-src https://*.talkgadget.google.com 'self' 'unsafe-inline' 'unsafe-eval' https://talkgadget.google.com https://www.googleapis.com https://www-gm-opensocial.googleusercontent.com https://docs.google.com https://www.google.com https://s.ytimg.com https://www.youtube.com https://ssl.google-analytics.com https://apis.google.com https://clients1.google.com https://ssl.gstatic.com https://www.gstatic.com blob:;frame-src https://*.talkgadget.google.com https://www.gstatic.com 'self' https://accounts.google.com https://apis.google.com https://clients6.google.com https://content.googleapis.com https://mail-attachment.googleusercontent.com https://www.google.com https://docs.google.com https://drive.google.com https://*.googleusercontent.com https://feedback.googleusercontent.com https://talkgadget.google.com https://isolated.mail.google.com https://www-gm-opensocial.googleusercontent.com https://plus.google.com https://wallet.google.com https://www.youtube.com https://clients5.google.com https://ci3.googleusercontent.com;object-src https://mail-attachment.googleusercontent.com;report-uri /mail/cspreport
見やすく整形。
script-src
https://*.talkgadget.google.com
'self'
'unsafe-inline'
'unsafe-eval'
https://talkgadget.google.com
https://www.googleapis.com
https://www-gm-opensocial.googleusercontent.com
https://docs.google.com
https://www.google.com
https://s.ytimg.com
https://www.youtube.com
https://ssl.google-analytics.com
https://apis.google.com
https://clients1.google.com
https://ssl.gstatic.com
https://www.gstatic.com
blob:
frame-src
https://*.talkgadget.google.com
https://www.gstatic.com
'self'
https://accounts.google.com
https://apis.google.com
https://clients6.google.com
https://content.googleapis.com
https://mail-attachment.googleusercontent.com
https://www.google.com
https://docs.google.com
https://drive.google.com
https://*.googleusercontent.com
https://feedback.googleusercontent.com
https://talkgadget.google.com
https://isolated.mail.google.com
https://www-gm-opensocial.googleusercontent.com
https://plus.google.com
https://wallet.google.com
https://www.youtube.com
https://clients5.google.com
https://ci3.googleusercontent.com
object-src
https://mail-attachment.googleusercontent.com
report-uri
/mail/cspreport
scriptは'unsafe-inline'も'unsafe-eval'も許可してしまっているが、imgも含めて*を使っていないのは立派。
style等は(defaultも)指定していないが、不要という判断か、指定すると差し障りがあるのか、どちらだろう?
また、1バイトを削るのにもこだわるGoogleがわざわざこれだけの文字列を送信するのは、セキュリティの方が重要だからということだろう。
サブドメインをワイルドカードでまとめれば随分減りそうだが、Googleともなると使っているサブドメインも膨大なので、セキュリティが担保しづらくなるのだろう。
policy-uriを指定してポリシーをXMLでやりとりしてキャッシュを効かせれば総通信料は減りそうだが、柔軟性とのトレードオフか。
report-uriも送信料を増やすが、これ無しは運用的にきっと難しいだろう。
tags: apache, css, gmail, javascript, mod-pagespeed, mod-security, php, security, url, web 0 コメント
2015年1月25日日曜日
自己証明書の作り方 2015年版
Apache用(他でも使えると思うけど)の、自己署名のサーバ証明書(SSL証明書、改め、TLS証明書?)の作り方のメモ。
条件
- 秘密鍵はパスフレーズ無し=暗号化しない
- 2048ビット
- SHA-2
コマンド
# 秘密鍵作成(2048ビットを指定、暗号化指定は無し)
openssl genrsa -out server.key 2048
# CSR作成
openssl req -new -key server.key -out server.csr
# 証明書作成(SHA-256を指定、期間は適当に)
openssl x509 -req -in server.csr -signkey server.key -days 3650 -out server.crt -sha256
↓
手元のブラウザで、"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"になった(最強?)
参考:CentOS OpenSSLを使用したSSL用の秘密鍵と証明書の作成 | kakiro-web カキローウェブ
2014年2月1日土曜日
mod_sslの SSLCipherSuiteについての調査メモ
mod_ssl本家マニュアル(日本語版は無い)
mod_ssl - Apache HTTP Server
mod_ssl - Apache HTTP Server
CBCモードと圧縮機能の脆弱性についての経緯について
どさにっき
SSLCipherSuiteでRC4を優先するのはよろしくなさそう
ApacheのSSLCipherSuiteにRC4を設定すべきではない - Qiita [キータ]
GlobalSignのSSL脆弱性チェックツール
設定状況や信頼性がわかる!SSLチェックツール|GMOグローバルサイン
mod_sslで現在有効な暗号化方式を調べる方法
今日も明日もググったー: SSLCipherSuite
2012年4月17日火曜日
Redmineをインストールための参考サイトのメモ
CentOSにRedmine 1.4 + Passenger(mod_rails)をセットアップする際に参考にしたリンク集のメモ。
- MySQLをインストール
- mysqlとmysql-develをyumで入れる
- libyamlとRubyをインストール
- Install Ruby 1.9.3 with libyaml on CentOS // Collective Idea
- libyamlはyumのだとWarningが消えないので自分でコンパイルした
- Rubyの最新のgzのURLは本家で確認する
- Rails2.xをインストール
- RedmineがまだRails3に対応していないので
- Ruby on Rails: Rails2 系と Rails3 系の環境構築 ~ サーバー起動まで - kosuke-komiya.info/wiki
- 現時点の2系の最新は2.3.14だった(Railsの本家にでも書いといて欲しい...)
- Redmineをインストール
- Redmineのインストール | Redmine.JP
- rmagickはインストールしなかった
- PassengerでRedmineを動かす
- Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用 | Redmine.JP
- log/production.logはパーミッション755だと動かなかったので、777にした
- PassengerでRedemineをサブディレクトリに設定する方法
Redmine専用のサーバを用意できて、かつ手間を省きたいならAll in OneインストーラであるALMiniumという選択肢もある → alminium/alminium · GitHub
- 素のCentOSではyumでgitをインストールできないので、RPMForge改めrepoforgeかDAGをyumリポジトリに追加しておくこと。
- ALMiniumはCentOS 5.xにはインストールできない
2011年12月14日水曜日
Windowsで gitを使うための参考サイト
- ダウンロード
- UTF-8ファイル名対応版 Git for Windows
- Git for Windows(msysgit)を日本語のファイル名を扱えるように改良したもの
- ディレクトリ(フォルダ)も日本語OK
- Shift_JISで2バイト目がバックスラッシュに該当するような文字(漢字の「十」等)も問題なし
- TortoiseGitでログを表示すると文字化けするのが玉にキズ
- Downloads - tortoisegit - Porting TortoiseSVN to TortoiseGIT - Google Project Hosting
- インストール
- 使い方の例
- アリスとボブになりきってgitをちゃんと理解したい! - ザリガニが見ていた...。
- アリスとボブのコラボレーション、gitをちゃんと理解したい! - ザリガニが見ていた...。
- アリスとボブのサーバー、git pushをちゃんと理解したい! - ザリガニが見ていた...。
- アリスがチャレンジなコードを書く時、git branchをちゃんと理解したい! - ザリガニが見ていた...。
- リポジトリをApacheを使ってWebDAV経由でアクセス可能にする方法
2011年3月18日金曜日
AWS CloudFormationで PHP Hello World Applicationを作成してみた
AWS(Amazon Web Services)のCloudFormationの「PHP Hello World Application」に関する情報があまりないので試してみた。
まずはAWS Management Consoleから「PHP Hello World Application + SSH enabled」のstackを作成。
場所はAsia/Pacific 東京リージョンを選択できた。
インスタンスタイプはMicroインスタンス、OperatorEmailには自分のメールアドレスを記入した。
しばらくすると、こんなのが作成された。
- S3
- 空のバケットが作成された(バックアップ用?)
- EC2
- Root Device Typeがebsのインスタンスが1つ作成された
- EBSのCapacityは8GiB
- Security Groupが1つ作成された
- SSHとHTTP(ポート番号は8888)のポートで、ともにIPアドレス制限無し
- Load Balancerが起動した
- 80番ポートを待ち受けてインスタンスの8888番ポートに向ける
- Elastic IPは作成されなかった
- CloudWatch
- Alarmが3つ作成された
- RequestLatencyAlarmHigh
- CPUAlarmHigh
- TooManyUnhealthyHostsAlarm
- 閾値に達したら登録したメールアドレスにメールで知らせてくれるようだ
- CloudFormation
- stackが1つ作成された(そりゃそうだ)
- RDS
- DB Instanceが1つ作成された
- DB Engine Versionは5.1.50
- DB Instance Classはdb.m1.small
- DB Storageは5GiB
- Backup Windowは15:00~15:30(日本時間?)
- Maintenance Windowは日曜14:00~14:30(これも日本時間?)
- DB Security Groupが1つ作成された
- 上記のEC2 Security Groupが適用されている
- DB Parameter Groupのcharacter_set関連は「engine-default」になっているが、UTF-8使えるのかな?
- SNS
- CloudWatchのメール通知用のTopicが1つ作成された
EC2のLoadBalancerのドメインにHTTPでアクセスすると、Wellcomeメッセージとともにphpinfoが表示された。
phpinfoによるとバージョンは下記の通り。
- Apache : 2.2.16
- PHP : 5.3.3
SSHでアクセス(SSHのログインユーザーはrootでなく"ec2-user"なので注意。"ec2-user"はsudoができる)してみると、/var/www/html の中には index.php しかなかった。
ユーザー"ec2-user"のviはPHPのソースがハイライトされて見やすい。(少し目がチカチカするが。)
PHP拡張については主なものは入っているが、mbstringが入っていない。
yumで入れたら普通にインストールできた。
sudo yum install php-mbstring
mbstringを有効にするためにApacheを再起動。
すると、アクセスできなくなった。EC2のLoadBalancerからインスタンスが外れている。
SNSからのアラートメールもいくつも送られてきてる。
調べてみると、httpd.confでポート番号が80になっていた。
8888に変更して再起動。
これでアクセスできるようになった。mbstringも使えるようになった。
使い終わったら、AWS Management ConsoleでCloudFormationのstackを削除。
するとCloudFormationが作った一連のものをきれいに削除してくれた。
例外はS3で、S3だけはバケットが残っていた。
あとこれは今回の調査に直接関係ないが、AWS Management ConsoleのS3とEC2が重くなった気がする。(この前の改善の影響?)
結論
ささっとPHP実行環境を作りたいなら、これもありかもしれないと思った。
RDSを使いたいかどうかは状況によるけど、CloudWatchとかSNSの設定が楽なのは便利そう。
2011年1月25日火曜日
Apacheで特定のアクセスをログから除外したり、月ごとにログファイルを分けたりする
(2011/1/26変更:ログのローテーションはLinuxだったらlogratateに任せればいいかなと思ってWindows限定の書き方をしたけど、Windowsじゃなくてもrotatelogsを使いたい場面はあると思い変更した。)
Apacheのログ出力設定のメモ。
こんなことをしたい場合の例。
- SetEnvIfとenv=!を使って、任意のアクセスをログ出力対象外にする
- ログ内容のフォーマットはcombinedで (もっと詳しくログりたい場合は自分でフォーマットを作る)
(Windowsの場合、)Apacheに標準で付いてくるrotatelogsを使って任意の時間でログファイルを分割する
#ログに残さないアクセス元
SetEnvIf Remote_Addr 127.0.0.1 nolog
#前方一致でも可
SetEnvIf Remote_Addr 192.168. nolog
#月ごとにローテーションする場合は%Y%m
CustomLog "|bin/rotatelogs -l logs/access_%Y%m.log 86400" combined env=!nolog
と、思ったら3年前に自分で既にメモしていた... → floatingdays: ApacheでURIに応じてアクセスログを分ける方法
2010年11月9日火曜日
mod_pagespeedとは
Google製のApacheモジュール。インストールするだけでWebサイトを高速化できる。
Apache2.2向けに、CentOS用とUbuntu用が用意されている → Page Speed Downloads
以下は参考ページのリンク。
概要
Google、Apache モジュール「mod_pagespeed」をリリース - スラッシュドット・ジャパン
mod_pagespeed所感 - 最高のコンピューティング環境とは?
具体的な使用例
mod_pagespeed をちょっとだけ試してみた - 酒日記 はてな支店
mod_pagespeedをEC-CUBEを使って早速試してみる - なげっぱなし日誌
紀子さん@へぼぷろぐらまの日常 mod_pagespeedいれてみた。
mod_pagespeedを入れてみた - でぶろぐ
詳しい解説
続・mod_pagespeedの各Filterと設定について ハブろぐ - havelog.ayumusato.com
mod_pagespeedについての考察とか | Yet Another Geek Blog(日々の葛藤日記 Ver.2)
インストール
さくらのVPSにGoogleのmod_pagespeed入れてみた ハブろぐ - havelog.ayumusato.com
感想
けっこうドラスティックに変えちゃうみたい。
JavaScriptはMinifyするらしいけど、IE用の条件付きコンパイルは残してくれるのかな?
「Elide Attributes」がHTML5には対応してるかは要確認。
既存のサイトへのいきなりの適用は危険そう。新しいサイトなら開発段階からこれを使って作ってくのはありかも。
WordPressやRailsなどの代表的なCMSやFrameworkで「使えた」という報告が上がってくれば普及するかも?
Google App Engineでも同じようなことやればいいのに?(オプションとして提供するとか。)
tags: apache, css, google, javascript 0 コメント
2010年6月14日月曜日
PHPを mod_cache (mod_disk_cache)でキャッシュする
Apacheのmod_cacheとmod_disk_cacheを使って、PHPで生成したHTMLをキャッシュする方法のメモ。
Apacheの設定では、LoadModuleでmod_cacheとmod_disk_cacheを有効にする。
そして下記のようにキャッシュの設定をする。
CacheRoot /path/to/cache/dir
#キャッシュ方法と、キャッシュを有効にするURLの先頭部分
CacheEnable disk /test
#上記URLのうち、キャッシュを無効にするURL
CacheDisable /test/not_cache
CacheDirLevels 4
CacheDirLength 5
#クライアントの挙動に関わらずキャッシュを有効にする
CacheIgnoreCacheControl On
PHP側では下記のようにHTTP Response HeaderのLast-ModifiedとExpiresをセットする。(max-ageもセットした方がよい?)
$now = time();
$maxAge = 60;
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T', $now));
header('Expires: ' . gmdate('D, d M Y H:i:s T', $now + $maxAge));
//header("Cache-Control: max-age=$maxAge");
これで60秒間、サーバサイドでもキャッシュされる。
同一クライアントからのアクセスなら、60秒間はクライアントキャッシュが有効。それでもGETしようとしてきた場合(Firefoxで更新ボタンをクリックした場合等)はmod_cacheが304を返してくれる。
PHPでHTTP Response Headerを指定しない場合は、Apacheのキャッシュ設定に下記を追加する。
CacheIgnoreNoLastMod On
CacheDefaultExpire 86400
#キャッシュから1秒以上過ぎたら1日キャッシュを有効にする場合はこんな値で
CacheLastModifiedFactor 86400
CacheMaxExpire 86400
これでHTTP Response Headerを指定しない場合でもサーバサイドのキャッシュが有効になったが、クライアントキャッシュは有効にならないのが残念。
気を利かせて適切なHTTP Response Headerをセットしてくれればいいのに。
キャッシュファイルは定期的にhtcachecleanで掃除する。
(空のディレクトリがうまく削除されない?)
参考
システム開発で使うオンラインの日本語マニュアル
- PHP
- PHP: PHP マニュアル - Manual (本家)
- PHP マニュアル - PHP 5.3 日本語マニュアル (見やすい、Googleカスタム検索あり)
- Smarty
- Smarty (本家)
- CakePHP
- マニュアル :: 1.3 Collection :: The Cookbook (本家、バージョンには注意)
- Ruby
- Rubyリファレンスマニュアル (本家)
- 逆引きRuby (こっちの方が使いやすいことが多い気がする)
- MySQL
- MySQL :: MySQL 5.1 リファレンスマニュアル (本家、バージョンには注意)
- 5.4と5.5はまだ日本語は無いみたい
- PostgreSQL
- PostgreSQL 8.4.4文書 (by ユーザー会)
- PostgreSQL 8.4.4文書 (マニュアル検索が便利そう)
- Apache
- Apache HTTP サーバ バージョン 2.2 ドキュメント - Apache HTTP サーバ (本家、Google検索窓あり)
意外とマニュアル内検索が無かったり、あっても検索しづらかったりすることが少なくない。
また、普通にGoogle検索から探そうとすると古いマニュアルばかりヒットすることも(Postgresとか)。
素直に英語のマニュアルで調べればいいんだろうけど...
2010年4月16日金曜日
今さらPHP4の環境を作るメモ
インストールされていたApache2.2とPHP5は事前にアンインストールした。
- gccをインストール(コンパイルに必要)
yum install gcc
- OpenSSL-develをインストール(ApacheでSSLを使う場合に必要)
yum install openssl-devel
- (OpenSSL1.0が標準的なyumでインストールできるようになるのはいつだろう)
- (OpenSSL1.0が標準的なyumでインストールできるようになるのはいつだろう)
- Apache2.0をインストール
- 下記のconfigure~make installまでを参考にする
- 2010年4月現在、Apache2.0系の最新バージョンは2.0.63
- PHPを使う場合、MPMはpreforkでないといけないらしい → ウノウラボ Unoh Labs: Apache MPM の基礎をしっかりと理解しよう!
- Apache2.2系ではPHP4は動かない?(設定方法が分からなかったので2.0系にした)
- 試しに動かしてみる
/usr/local/apache2/bin/apachectl start
- /usr /local/apache2/conf/httpd.confのServerNameを設定しないと警告っぽいのが表示されるが、起動はされるみたい
- /usr /local/apache2/conf/httpd.confのServerNameを設定しないと警告っぽいのが表示されるが、起動はされるみたい
- flexをインストール(PHPのインストールに必要)
yum install flex
- PHP4をインストール
- 下記のconfigure~make installまでを参考にする
- configureのオプションは欲しい環境に合わせて変える
- PHP4.2以降では--enable-trans-sidは不要らしい
- 詳細は下記を参考に
- Apache2(with mod_deflate) + PHP4のインストール (主なオプションの説明)
- PHP: 中心となる configure オプションのリスト - Manual (全オプションのリスト)
- 試しに動かしてみる
/usr/local/php/bin/php -v
- SELinuxが有効な場合、Apache用PHPモジュールのラベル(セキュリティコンテキスト)を変更する
chcon -t textrel_shlib_t /usr/local/apache2/modules/libphp4.so
- 参考:cannot restore segment prot after reloc: Permission denied - Linuxシステム設定
- SELinuxが有効な場合、これを変更しないとApache(再)起動時に下記のようなエラーが出る
Syntax error on line 232 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/libphp4.so into server: /usr/local/apache2/modules/libphp4.so: cannot restore segment prot after reloc: Permission denied
- 参考:cannot restore segment prot after reloc: Permission denied - Linuxシステム設定
- Apacheの設定
vi /usr/local/apache2/conf/httpd.conf
- AddTypeを追加
AddType application/x-httpd-php .php
- DirectoryIndexを変更(index.phpを追加)
DirectoryIndex index.php index.html index.html.var
- Webコンテンツのディレクトリを変更(/var/www/htmlにする)
#DocumentRoot "/usr/local/apache2/htdocs"
DocumentRoot "/var/www/html" - Apacheを再起動
/usr/local/apache2/bin/apachectl restart
- AddTypeを追加
2010年4月5日月曜日
サーバサイドJavaScript用ライブラリ
Webサーバ等のサーバサイドの処理をJavaScriptでやるならnode.js
- node.js
- GoogleのV8をエンジンとして使っている
- 参考:MOONGIFT: » v8エンジンによるJavaScriptのWebサーバ「node.js」:オープンソースを毎日紹介
- node-mysql
- node.js用のMySQLドライバ
- 作ったのはよく見ればmasuidriveさん(たぶん)
- 参考:MOONGIFT: » node.js用MySQLドライバ「node-mysql」:オープンソースを毎日紹介
- Express
- node.js用の簡易Webフレームワーク
- 参考:MOONGIFT: » node.jsを使ったSinatra風Webフレームワーク「Express」:オープンソースを毎日紹介
Apacheのモジュールとして使うならv8cgi
- v8cgi
- これも(その名の通り)V8を使っている
- MySQL接続、テンプレート、GDなどいろいろ揃っている
- 作者はWWW SQL Designerなどを作ったondrej.zaraさん
- Windows版も(一応)用意されている(現在はproblemeticだそうだ)
2009年7月28日火曜日
PHPを5.3にバージョンアップしたら動かなくなった場合の対処法
Windows上のPHPを5.2から5.3にバージョンアップしたら動かなくなった時にやったこと。
(自分の環境での解決策のメモ)
トラブル1:Apacheを起動する時に下記のようなエラーが出て起動できない
ローカル コンピュータ の Apache2 サービスを開始できません。原因は存在しないextensionをロードする設定になっていることだった。
エラー 1067: プロセスを途中で強制終了しました。
自分の場合、php_pdo.dllとphp_zip.dllをコメントアウトしたらApacheを起動できるようになった。
(以前、PHP 5.3 RC2に無いエクステンションを書いたことを思い出してやったら動いた。)
トラブル2:PHPのページを呼んでも帰ってこない OR 真っ白のページが表示される
Apacheのアクセスログにもエラーログにも何も記録されていない。PHPのエラーログにも何も書かれない。
ということはPHPのエラーログにエラーを書き出す前にこけてる?そしてApacheはPHPからの処理の戻りを待ち続けてる?
原因は、タイムゾーンの設定をしていないことだった。
date.timezone = Asia/Tokyo上記設定をしてあげたら無事動くようになった。
これは仕様か?
2009年3月5日木曜日
Apacheで特定の User-Agentだけアクセス拒否する設定
メモ。
SetEnvIf User-Agent "^DoCoMo/2.0 P90liS" deny_agent
<Location />
Order allow,deny
Allow from all
Deny from env=deny_agent
</Location>
参考:
mod_setenvif - Apache HTTP サーバ
mod_authz_host - Apache HTTP サーバ
tags: apache, config, user-agent 0 コメント
2009年2月16日月曜日
Apacheモジュール版の v8cgiがリリースされていた
v8cgiのバージョン0.3.0がリリースされ、Apacheモジュールとして動作させられるようになった。
httpd.conf設定例(Windowsの場合)
LoadModule v8cgi_module C:/test/v8cgi/mod_v8cgi.dll
AddHandler v8cgi-script .ssjs
Apacheモジュールとして動作させる場合、ssjsファイルの方の1行目に"#!/test/v8cgi/v8cgi"を書かなくてもよい。
ただし手元の環境では、Apache(再)起動後に最初に読み込んだssjsファイルが毎回実行される。
つまり、最初に/test/example.ssjsを表示させたら、/test/example2.ssjsでも/test/not-exist.ssjsにアクセスしてもexample.ssjsが実行される。
Zend Frameworkライクな(M)VCパターンにするならよいかもしれない。
参考:floatingdays: v8cgiのインストールと簡単なサンプル
tags: apache, config, extensions, javascript, v8, v8cgi 0 コメント
2009年1月26日月曜日
.htaccessでPHPのエラーログ設定をする方法
例えばこんな感じで。
flagとvalueを使い分ける。
php_flag display_errors On
php_flag log_errors On
php_value error_log /var/www/log/php_error.log
参考:PHPのエラーログについて PEAR::Logでエラーログを取りたいです(中略)人力検索はてな
v8cgiのインストールと簡単なサンプル
v8cgiはWWW SQL Designerを作ったondrej.zara氏が作ったサーバサイドJavaScript実行環境&ライブラリ。
CGI感覚で手軽にJavaScriptでWebプログラムが書ける。(さらに、テンプレート機能を使えばPHP感覚で書ける。)
ソースとWindows用のバイナリが配布されている。
メールライブラリや画像ライブラリ(GD)、テンプレートライブラリなどが付属している。
Windowsへのインストール
(参考:Installation - v8cgi - How to install v8cgi - Google Code)
- v8cgi - Google CodeからZIPをダウンロード。展開して適当なフォルダに置く。(例:C:\test\v8cgi)
- v8cgi.confをCドライブの直下(コンパイル時に指定された場所)に移動する。
- v8cgi.confの中身を編集。(パスを環境に合わせる。)
(例)// put default .js and .dll files here
Config["libraryPath"] = "c:/test/v8cgi/lib"; - コマンドプロンプトからv8cgi.exeを実行してみる。エラーが無ければOK。
C:\test\v8cgi>v8cgi.exe
Nothing to do. - Apacheの設定ファイルhttpd.confにCGI実行の設定を追加。
(例)<Location /v8cgi>
※mod_cgiが有効になっていなかったら有効にしておく。
Options +ExecCGI
AddHandler cgi-script .ssjs
</Location>LoadModule cgi_module modules/mod_cgi.so
- Apacheを再起動。
- Webのディレクトリにテスト用のScriptを作る。(例:htdosc\v8cgi\exaple.ssjs)
(例 1)#!/test/v8cgi/v8cgi.exe
※responseオブジェクトはデフォルトでインスタンスが生成されている。(参考:API_HTTP - v8cgi - Library "http.js" - Google Code)
response.write("Hello v8cgi!");
(例 2)#!/test/v8cgi/v8cgi.exe
※response.writeを使わない場合、Content-typeを出力しないと500 Internal Server Error(Premature end of script headers: example.ssjs)になる。
System.stdout("Content-type: text/plain\n\n");
System.stdout("Hello v8cgi!"); - 上記のファイルにアクセスしてみる。エラーが無ければOK。
DBを使う例
#!/test/v8cgi/v8cgi
library("mysql.dll");
library("query.js");
Query.setDB(new MySQL().connect("localhost", "db_user", "db_password", "schema"));
var result = new Query(Query.SELECT)
.field("id").field("name") //SELECT
.table("members") //FROM
.where("%f = %s", "name", "TARO") //WHERE
.execute();
response.write(result.numRows() + "<br>");
var rows = result.fetchObjects();
for (var i = 0; i < rows.length; i++) {
response.write(rows[i]["id"] + ":" + rows[i]["name"] + "<br>");
}
テンプレートを使う例
テンプレートを呼び出すファイルの記述
#!/test/v8cgi/v8cgi
library("template.js");
var t = new Template({suffix: "tpl.html"}); //現行バージョン(0.2.0)にはバグがあるのでsuffixを指定しないとエラーになる
var var1 = "abc"; //動的なデータは変数に入れておけばテンプレート内から参照できる
var var2 = 123;
response.write(t.process("example")); //現行バージョン(0.2.0)ではdataを渡しても無視される
テンプレートの記述(example.tpl.html)
<html>
<head><title>TEST</title></head>
<body>
This is a random number: $(Math.random())
$code( for(var i = 0; i < 10; i++) { )
<li>$(i)</li>
$code( } )
$(var1) $(var2)
</body>
</html>
REQUEST情報を取り出す方法
"HTTP_"で始まる情報はrequest.header()で取り出せるが、それ以外は直接_headersの中から取り出すしか無さそう。
#!/test/v8cgi/v8cgi
response.write(request._headers["SCRIPT_URL"]);
感想
- シンプルでよい。ソース追って理解できる。
- DBアクセス、テンプレートエンジン、メール送信と揃っていて、即戦力っぽい。
- DAOがORマッパーでなくSQLヘルパーなのが好き。さすがERDを描くためにツールを作ってしまった人だけある。
- DBアクセスがプレースホルダーでないのが残念。escapeはしているようだがPreparedでないと何かと嫌。
response.writeってのがASPみたいでちょっと嫌。echo()とかでラップすればよいが。- 実際に使うとしたらmod_rewriteを絡めたオレームワーク(オレオレ・フレームワーク)を被せることになりそう。
参考:Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ
tags
- php (176)
- javascript (82)
- apache (54)
- windows (53)
- google (47)
- mysql (41)
- linux (39)
- security (39)
- css (38)
- network (37)
- api (36)
- web (35)
- ruby (34)
- install (31)
- mobile (31)
- firefox (30)
- html (27)
- ie (27)
- config (26)
- postgres (26)
- image (25)
- library (25)
- search (25)
- mail (23)
- db (22)
- feed (22)
- rails (22)
- amazon (19)
- cakephp (19)
- map (19)
- tool (19)
- url (19)
- video (19)
- service (18)
- ec2 (17)
- encoding (17)
- error (17)
- jquery (17)
- server (17)
- flash (16)
- hatena (16)
- setting (16)
- chrome (15)
- blogger (14)
- java (14)
- android (13)
- yahoo (13)
- yui (13)
- del.icio.us (12)
- extensions (12)
- http (12)
- sql (12)
- aws (11)
- compare (11)
- framework (11)
- microsoft (10)
- centos (9)
- date (9)
- free (9)
- google-maps (9)
- php5.3 (9)
- rss (9)
- safari (9)
- yum (9)
- https (8)
- office (8)
- python (8)
- smart-phone (8)
- trouble (8)
- version-up (8)
- web-browser (8)
- adsense (7)
- calendar (7)
- cdn (7)
- jquery-ui (7)
- rakuten (7)
- twitter (7)
- android-apps (6)
- backup (6)
- command (6)
- gmail (6)
- google-app-engine (6)
- pear (6)
- reference (6)
- test (6)
- tuning (6)
- ui (6)
- validation (6)
- xmail (6)
- xml (6)
- zip (6)
- amazon-linux (5)
- atom (5)
- excel (5)
- gem (5)
- ip-adress (5)
- opera (5)
- systemdesign (5)
- titanium (5)
- array (4)
- bookmarklet (4)
- bootstrap (4)
- cache (4)
- color (4)
- cron (4)
- crypt (4)
- customize-google (4)
- feedcreator (4)
- flickr (4)
- font (4)
- form (4)
- function (4)
- gettext (4)
- google-analytics (4)
- google-code (4)
- greasemonkey (4)
- helper (4)
- html5 (4)
- iphone (4)
- jquery-mobile (4)
- laravel (4)
- mac (4)
- password (4)
- perl (4)
- regexp (4)
- rspec (4)
- sbm (4)
- sitemaps (4)
- subversion (4)
- template (4)
- tls (4)
- trac (4)
- utf-8 (4)
- version (4)
- web-service (4)
- active-record (3)
- analytics (3)
- au (3)
- cloud (3)
- date-picker (3)
- dns (3)
- docomo (3)
- domain (3)
- firewall (3)
- ftp (3)
- git (3)
- google-calendar (3)
- google-docs (3)
- hardware (3)
- hatena-bookmark (3)
- hosting (3)
- i18n (3)
- ie8 (3)
- itamae (3)
- json (3)
- log (3)
- openssl (3)
- pdo (3)
- photo (3)
- png (3)
- post (3)
- postgis (3)
- price (3)
- prototype.js (3)
- s3 (3)
- selinux (3)
- seo (3)
- shift-jis (3)
- smarty (3)
- ssh (3)
- ssl (3)
- strage (3)
- string (3)
- tab (3)
- tortoise-git (3)
- url-shortener (3)
- user-agent (3)
- windows-update (3)
- xhtml (3)
- zend-framework (3)
- about-config (2)
- active-resource (2)
- aide (2)
- android-studio (2)
- anti-virus (2)
- auth (2)
- bing (2)
- bitly (2)
- blog (2)
- books (2)
- bootstrap-cdn (2)
- bot (2)
- browser (2)
- bug (2)
- capture (2)
- cdnjs (2)
- centos7 (2)
- cert (2)
- certbot (2)
- class (2)
- convert (2)
- cookie (2)
- csv (2)
- datetime (2)
- debug (2)
- django (2)
- dojo (2)
- download (2)
- dropbox (2)
- ebs (2)
- eclipse (2)
- editor (2)
- feedly (2)
- google-reader (2)
- google-search (2)
- grids (2)
- hash (2)
- highslide (2)
- ipad (2)
- japanese (2)
- jpeg (2)
- language (2)
- lets-encrypt (2)
- link (2)
- mcrypt (2)
- memory (2)
- mod-security (2)
- moible (2)
- mouse (2)
- music (2)
- node-js (2)
- oauth (2)
- paas (2)
- pdf (2)
- permission (2)
- pocket (2)
- rds (2)
- referer (2)
- rest (2)
- rewrite (2)
- rfc (2)
- sample (2)
- scraping (2)
- session (2)
- simplexml (2)
- sjis (2)
- smtp (2)
- snoopy (2)
- softbank (2)
- tag-cloud (2)
- task (2)
- tips (2)
- todo (2)
- tomcat (2)
- travel (2)
- update (2)
- upload (2)
- v8 (2)
- v8cgi (2)
- vmware (2)
- vue-js (2)
- webBrowser (2)
- wordpress (2)
- youtube (2)
- ab (1)
- actionscript (1)
- addon (1)
- adminer (1)
- aes (1)
- affiliate (1)
- ajax (1)
- analyze (1)
- android-market (1)
- apple (1)
- aurora (1)
- avast (1)
- bake (1)
- behavior (1)
- blowfish (1)
- bookmarks (1)
- bootswatch (1)
- bread-crumb (1)
- button (1)
- c (1)
- cakphp (1)
- camel-case (1)
- casio (1)
- chalice (1)
- circle-ci (1)
- clam-av (1)
- cloudformation (1)
- cloudfrare (1)
- cloudn (1)
- cloudwatch (1)
- cman (1)
- codec (1)
- codeigniter (1)
- counter (1)
- crawler (1)
- cucumber (1)
- dao (1)
- database (1)
- datastore (1)
- delete (1)
- dena (1)
- deploy (1)
- deprecated (1)
- design (1)
- django2 (1)
- dokuwiki (1)
- dump (1)
- ecoder (1)
- emacs (1)
- encrypt (1)
- english (1)
- erd (1)
- ethna (1)
- exception (1)
- f-route (1)
- file (1)
- filter (1)
- firebug (1)
- float (1)
- flv (1)
- font-awesome (1)
- font-family (1)
- fontawesome (1)
- format (1)
- formula (1)
- fulephp (1)
- gd (1)
- gdmail (1)
- gears (1)
- geo (1)
- geo-coding (1)
- geolocation-api (1)
- get (1)
- gis (1)
- github (1)
- go-lang (1)
- golang (1)
- goo (1)
- google-apps (1)
- google-checkout (1)
- google-labs (1)
- google-libraries-api (1)
- google-play (1)
- google-plus (1)
- google-trends (1)
- gpl (1)
- gps (1)
- gradle (1)
- grep (1)
- grid.css (1)
- grids.css (1)
- group-ware (1)
- hmac (1)
- hotel (1)
- html-escape (1)
- htmlsql (1)
- http-status (1)
- httpd (1)
- iaas (1)
- ids (1)
- ie6 (1)
- iftt (1)
- igoogle (1)
- iis (1)
- import (1)
- include (1)
- index (1)
- infra (1)
- innodb (1)
- insert (1)
- integer (1)
- ios (1)
- ipad-mini (1)
- ipod (1)
- itunes (1)
- j-phone (1)
- japan (1)
- jetty (1)
- jmeter (1)
- jruby (1)
- jsdelivr (1)
- kohana (1)
- labs (1)
- lambda (1)
- lamp (1)
- layout (1)
- lift (1)
- livedoor (1)
- load-balance (1)
- locale (1)
- logo (1)
- logwatch (1)
- lsync (1)
- magic-method (1)
- maintenance (1)
- math (1)
- maven (1)
- mbstring (1)
- md5 (1)
- menu (1)
- merb (1)
- migration (1)
- mime-type (1)
- minify (1)
- mock (1)
- mod-pagespeed (1)
- mod_cache (1)
- modernizr (1)
- module (1)
- monit (1)
- mootools (1)
- myisam (1)
- myrt-mobile (1)
- mysqldump (1)
- nec (1)
- neta (1)
- nginx (1)
- normalize (1)
- null (1)
- objective-c (1)
- on2 (1)
- onload (1)
- oo (1)
- openid (1)
- or-mapper (1)
- passenger (1)
- pc (1)
- pecl (1)
- photoshop (1)
- phpexcel (1)
- phpmailer (1)
- pipes (1)
- plugin (1)
- podcast (1)
- poderosa (1)
- port (1)
- postal (1)
- postfix (1)
- powerset (1)
- print (1)
- pure (1)
- python3 (1)
- qdmail (1)
- qr-code (1)
- query-string (1)
- quota (1)
- radio (1)
- rating (1)
- rbenv (1)
- reader (1)
- realtime-search (1)
- redhat (1)
- redmine (1)
- remi (1)
- replace (1)
- replication (1)
- request (1)
- require (1)
- reserve (1)
- reset (1)
- restore (1)
- return (1)
- reverse-proxy (1)
- rgb (1)
- rijndael (1)
- rkhunter (1)
- robots.txt (1)
- rootkit (1)
- round (1)
- rpm (1)
- rpmforge (1)
- rt (1)
- saas (1)
- safri (1)
- samba (1)
- scala (1)
- schedule (1)
- screen-shot (1)
- script.aculo.us (1)
- search-wiki (1)
- seasar (1)
- serverless (1)
- sever-side (1)
- sha-2 (1)
- sha-256 (1)
- sha-512 (1)
- share (1)
- shell (1)
- shopping (1)
- simpletest (1)
- simulator (1)
- sinatra (1)
- skype (1)
- sns (1)
- sort (1)
- sqlite (1)
- struts (1)
- sum (1)
- symantec (1)
- symfony (1)
- table (1)
- tag (1)
- tiips (1)
- timezone (1)
- title (1)
- toolbar (1)
- topic-path (1)
- tripwire (1)
- twango (1)
- uninstall (1)
- unit-test (1)
- url-encode (1)
- user-script (1)
- vacuum (1)
- virtual (1)
- voderfone (1)
- web-flavor (1)
- web-fonts (1)
- webdav (1)
- widjet (1)
- willcom (1)
- windows-10 (1)
- windows-7 (1)
- word (1)
- xen (1)
- xinetd (1)
- xmlrpc (1)
- xpath (1)
- xss (1)
- yaml (1)
- yii (1)
- zend (1)