× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
httpd.confをいろいろ書いた。
ScriptAlias 実行スクリプトを置く場所を指定。普通DocumentRoot(/var/www/htmlとか)以下には置かないので。 実行設定はいらないが、アクセス設定は書く必要あり。
実際のファイルの実行権限がついているかを確認。そのファイルに至るまでのディレクトリすべてにも実行権限がついている必要あり。 ベーシック認証 認証をかけたいディレクトリごとに指定する
こんな感じで書く。 auth_basic_moduleがロードされているかも確認すること。 (なければLoadModule auth_basic_module modules/mod_auth_basic.soを追記) で、パスワードファイルは htpasswdコマンドで作る。 $ htpasswd -c /path/to/passwordfile user_name # ファイルを初めて作るとき $ htpasswd /path/to/passwordfile user_name # 二回目以降 作られたファイルはそのまま覗ける。 消すときは $ htpasswd -D /path/to/passwordfile user_name ダイジェスト認証 ダイジェスト認証の場合は
となる。 auth_digest_moduleがロードされているか確認。 (LoadModule auth_digest_module modules/mod_auth_digest.soとか) パスワードファイルを作るには $ htdigest -c /path/to/passwordfile XXXX user_name とする。領域名(XXXX)を指定することに注意 ログ出力 ログフォーマットはだいたいそのままでもいいと思うので、ログローテートだけ。 ErrorLog "| /path/to/rotatelogs /path/to/error_log.%Y%m%d 86400" CustomLog "| /path/to/rotatelogs /path/to/error_log.%Y%m%d 86400" format_name という感じ。 DirectoryIndex まあ DirectoryIndex index.html index.htm index.fcgi みたいな感じでいいでしょう 参考 http://www.adminweb.jp/apache/ PR |
mysqlでのAUTO_INCREMENTの使い方。
これでidがAUTO_INCREMENTになった。 INSERT時にidの値をNULLにしておけば、自動採番してくれる。 初期値を設定したいときは mysql> ALTER TABLE table AUTO_INCREMENT=100; あるいはCREATE TABLEの末尾に付加してもいい。 ちゃんと設定されたか確認したいときは、 mysql> show table status like 'table'; として、Auto_incrementの値を確認する。 もう少し手っ取り早く知るには mysql> select last_insert_id(); とする手もあるが、これはテーブル指定ができず、無条件に最後にinsertされたauto_increment付きテーブルのidが返ってくるようになっている。 http://dev.mysql.com/doc/refman/5.1-olh/ja/example-auto-increment.html |
cronを使って定時APIたたかせる。
crontab -e で書くわけだが、間違って -r を打つと吹き飛んでしまうのはご承知の通り。 で、どこか適当なファイルに書いておく(.crontabとか)。それを $ crontab .crontab とすればクーロンにそのまま入る。便利で安全。 クーロンで記述した各個処理のログは吐いた方がいいと思うので、 >> 適当なファイルへのフルパス とかしたほうがいい。 エラー発生ならメールも来るけれど。 クーロン自体のログは /var/log/cron の中に入っている。そもそも実行されたのかどうかはここを見ると分かる。 クーロンが動いているか確認するには $ /etc/rc.d/init.d/crond status でcrondが実行中であり、 $ chkconfig --list crond で2~5がonになっていること。 ちなみにcrontab -e で書き換えているファイルは sudo ls /var/spool/cron/ec2-user で見られる。rootしか読み書きできない あと、crontabの大元?は /etc/crontab にある。(しかし何も書いていなかった) その隣に /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/ がある。それぞれ中にファイルが置いてある。 crontab から毎時hourlyが、毎日dailyが、毎週weeklyが、毎月monthlyが実行されていれば、 各ディレクトリ下に実行権限を与えたスクリプトを置いておけば実行されるようだ。 crontabに書くのも同じって気もするが。 |
文字コードを調べるコマンド
nkf -g filename nkfはデフォで入ってないのでインストール。 cd /usr/local/src/ wget http://osdn.dl.sourceforge.jp/nkf/20770/nkf207.tar.gz tar zxf nkf207.tar.gz cd nkf207 make cp nkf /usr/bin/ これだけ。 |
httpuse LWP::Simple; my $data = get('http://www.xxx.com'); なんとこの2行だけで取れてしまう。簡単過ぎ。 POSTで取りたいとか、タイムアウト設定したいとかなら use LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->agent('xxx'); $ua->timeout(5); my $data = $ua->post('http://www.xxx.com'); if ($data->is_success) { print $data->content; } となる 文字コードuse utf8; と書くと、plファイル内がutf8と仮定されるらしい。 文字列をutf8にエンコードしたいなら、 use Encode (encode_utf8); $utf8_str = encode_utf8(src_str); とする。 日付use Time::Piece; 日付文字列の解析 $t = Time::Piece->strptime($date_str, '%Y-%m-%dT%H:%M:%S+09:00'); みたいにすると取れる。あとは $t->year $t->mon $t->epoch(1970年1月1日からの秒数) とかご自由に。 |
mysql入れてみる。
参考にしたページhttp://thinkit.co.jp/free/article/0707/5/1/ ストレージエンジンが選べる。確かに MyISAM(トランザクション非サポート) InnoDB(トランザクション機能サポート) MEMORY(オンメモリデータベース) NDB(クラスタ機能) ページにはいろいろ書いてあるけど、よくわかんないのでとりあえずyum % sudo yum install mysql 成功したっぽいメッセージがプロンプトに出る。 % mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) …エラーが出た。どうやら、mysqlサーバに接続できないとか。 どういうこっちゃ。 調べてみたけど古い情報多い。yum mysqlで調べてみると見つけたコマンド % yum -y install mysql-server というのがある。別なのか。sudoつけてやってみた。 これまた成功したっぽい。 もう一度試してみる % mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.29 MySQL Community Server (GPL) Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> おお、見慣れたいつものプロンプト。 結局 % sudo yum install mysql % sudo yum -y install mysql-server これだけで使えるようになった。 で、もう普段のように書ける。 mysql> create table ...なんちゃら しかし、CREATE DATABASE ができない。権限の設定をちゃんとしていないせいか ひとまずおいといて、最初からあったtestデータベース内で作業してみる とりあえずcreate table. CREATE TABLE user( id int unsigned not null PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; とか。 打つのは面倒だし、一度書いた物が喪われるのは大変なので、ファイルに書いておく。 (実は mysql> show create table table_name; でCREATE文が出力されるけど) 適当なddlファイルを作って
と書いて、 $ mysql < XXX.ddl でOK. でも、show create table文でいつでも取り出せるんだから、ddlを手書きする必要はないよね。 変更したいときも直接DBでalter文書いて、その度にshow create tableでddlに出力、の形の方がいい。 次は、perlから使ってみる。 有名だからとりあえずDBIを使う。 参考にしたページhttp://tech.bayashi.net/pdmemo/perl_dbi_mysql.html $ sudo perl -MCPAN -e 'install DBI'
と書いて実行してみると… おお、確かにtestデータベース内にbookテーブルができている! |
CAPNからFCGIを取って来ておく。
/var/www/cgi-bin/ 以下のファイル.fcgiに以下のような感じで書く
と、ブラウザに「hello world」と表示される。 Content-type のprintは必須で、これがないと何も表示されない。これの前にprintしたものも表示されない。 当たり前だが、Content-typeをtext/htmlにしたら、html的に正しく書こう。htmlをtext/plainで表示したらタグとかもそのまま表示される。 URLの引数はどうやって取得する? のかというと、 $ENV{REQUEST_URI} $ENV{QUERY_STRING} あたりに入っている。 Xslateも動かしてみた。 割と簡単。 あと、開発用のフォルダを/var/www/とは別の場所に持つようにした。 |
ファイルの中身をダンプ
$ od -tx1c ファイル名 odはOctal Dump の略 -t の後ろにオプションをいろいろ。 c 文字で表示 x1 1バイトずつ16進数で表示 d4 4バイトずる10進数で表示 類似のコマンド $ hexdump -C ファイル名 |
fcgi動かさないとね。
使うのはmod_fcgid 参考にしたのはhttp://www.movabletype.jp/documentation/developer/server/fastcgi.html ちなみにmod_fastcgiというものもあるが、これは長時間運用で不安定になるとか書いてある まずCPANモジュール $ cpan FCGI $ cpan CGI 次にCGIライブラリ。基本的に書いてあった通り $ wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz $ tar zxvf fcgi-2.4.0.tar.gz -C /usr/local/src $ cd /usr/local/src/fcgi-2.4.0 $ ./configure $ make $ make install 次にmod_fcgid。yumを使ってみた $ yum install mod_fcgid これで普通にできた…のかな? モジュールは /usr/lib64/httpd/module に置かれる 設定ファイルは /etc/httpd/conf/ /etc/httpd/conf.d/ conf/httpd.confには、ロードするモジュールの設定とかがたくさん書いてある。 その中にmod_fcgid.soが追加されていることを確認する。なければ自分で書く また、他のconfをインクルードしている Include conf.d/*.conf ついでに記述 ScriptAlias /fcgi/ /home/XXX/conf # なんか効かないっぽい conf.d/fcgid.conf にfcgidの設定(タイムアウトとか)を書く(コピペ)。 あるいは、conf.d/fcgid.conf.rpmnew が自動的に作られているので、そっちを読み込むようにする。 conf/httpd.conf の中に Include conf.d/*.conf.rpmnew とでも追記しておく。 設定を反映してapache再起動 $ service httpd restart =========================== 結局、必要な設定のつながりは fcgidモジュールのロード LoadModule fcgid_module modules_mod_fcgid.so 特定の拡張子をfcgidに紐付け AddHandler fcgid_script fcg fcgi fpl # cgiも入れた方が? conf/httpd.conf conf.d/mod_fcgid.conf conf.d/mod_fcgid.conf.rpmnew どこに書いてもいいけど。httpd.confに直接書かないなら、インクルード文を代わりに書くこと Include conf.d/*.conf とか fcgiスクリプトは、 /var/www/cgi-bin/ 以下に置くこと。これで、ブラウザから XXXX/fcgi-bin/*.fcgi で実行できる。 ScriptAlias /fcgi/ /home/XXX/conf を書いたら、その場所のfcgiを見るはずなんだが、なぜかそうならない 404Forbiddenが出る。 <Directory>タグ内でOptionsとか書いたんだけどできない。やっぱり cgi-bin/以下のファイルをcgi-bin以下のURLで表示しちゃう。他にも設定が必要なのか DocumentRootも変わる? ========================= もしうまく行かないときはこの辺を参照 http://www.umin.ac.jp/hp-coordinator/man/err_cgi.html http://www.jitaku-server.net/apache_cgi_trouble.html |
今回はOSはLinux。
その上で動かすWebサーバはApache。まあ定番だからね。httpdと言ったら大抵これのことらしい。 最近はlighttpdが流行っているとも聞くが…。fcgiを標準でサポートしているのが便利とか。 CGI=CommonGatewayInterface Webサーバ(Apacheとか)と外部プログラム(PerlやCで書いたプログラム。掲示板機能とかゲームロジックとか)のインタフェース仕様のこと。 参考になったページhttp://www.scollabo.com/banban/cgi/index.html /etc/services というファイルに、サービスごとにデフォルトのポート番号が全部書いてある。 sshは22,httpは80などなど…。 1. 昨日入れたapacheのバージョンは Server version: Apache/2.2.23 (Unix) Server built: Oct 21 2012 20:35:32 apacheのトップディレクトリは /usr/lib64/httpd らしい。(findして見つけた…) 2. fcgiは当然必要だから、Apacheでmod_fastcgiを入れる 参考にしたページhttp://kotaroito.hatenablog.com/entry/20101019/1287502443 適当に/usr/local/にfcgiというフォルダを作り、その下にmod_fastcgiをインストールした。 コンパイルして以下のモジュールが作られた。 /usr/lib64/httpd/module/mod_fastcgi.so この作業の最中、makeをするためにgccが必要になったので % sudo yum install gcc とコマンド。 インストールしたディレクトリの中にある README INSTALL とかファイルを読むのが大事。 |