忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/25 05:02 】 |
httpd.conf
httpd.confをいろいろ書いた。

ScriptAlias

実行スクリプトを置く場所を指定。普通DocumentRoot(/var/www/htmlとか)以下には置かないので。
実行設定はいらないが、アクセス設定は書く必要あり。


ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

実際のファイルの実行権限がついているかを確認。そのファイルに至るまでのディレクトリすべてにも実行権限がついている必要あり。


ベーシック認証

認証をかけたいディレクトリごとに指定する

<Directory "/path/to/target">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all

AuthType Basic
AuthName "enter your name and password"
AuthUserFile /path/to/passwordfile
Require valid-user
</Directory>


こんな感じで書く。
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


ダイジェスト認証

ダイジェスト認証の場合は

<Directory "/path/to/target">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all

AuthType Digest
AuthName XXXX
AuthUserFile /path/to/passwordfile
Require user admin
</Directory>

となる。
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
【2013/03/30 20:23 】 | サーバ | 有り難いご意見(0)
mysqlのauto_increment
mysqlでのAUTO_INCREMENTの使い方。


CREATE TABLE table(
id int unsigned not null 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

【2013/02/09 18:54 】 | サーバ | 有り難いご意見(0)
クーロン
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に書くのも同じって気もするが。

【2013/02/03 22:51 】 | サーバ | 有り難いご意見(0)
文字コード
文字コードを調べるコマンド

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/

これだけ。
【2013/02/03 16:18 】 | サーバ | 有り難いご意見(0)
サーバプログラムで使ったperl技

http



use 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日からの秒数)
とかご自由に。



【2013/02/02 19:50 】 | サーバ | 有り難いご意見(0)
DB使う
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ファイルを作って

use test;
DROP TABLE IF EXISTS user;
CREATE TABLE user ...

と書いて、
$ 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'


#! /usr/bin/perl
use strict;
use DBI;

my $data_source = "DBI:mysql:test";
my $dbh = DBI->connect($data_source);

my $create_table = <<"SQL";
create table book(
id int unsigned not null,
author varchar(64) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL
$dbh->do($create_table);

$dbh->disconnect();

と書いて実行してみると…
おお、確かにtestデータベース内にbookテーブルができている!


【2013/02/02 15:36 】 | サーバ | 有り難いご意見(0)
fcgiプログラム
CAPNからFCGIを取って来ておく。

/var/www/cgi-bin/ 以下のファイル.fcgiに以下のような感じで書く


my $request = FCGI::Request;

while ($request->Accept() >= 0) {
print "Content-type: text/plain; charset=utf8¥n¥n";
print "hello world";
}


と、ブラウザに「hello world」と表示される。
Content-type のprintは必須で、これがないと何も表示されない。これの前にprintしたものも表示されない。

当たり前だが、Content-typeをtext/htmlにしたら、html的に正しく書こう。htmlをtext/plainで表示したらタグとかもそのまま表示される。



URLの引数はどうやって取得する?
のかというと、
$ENV{REQUEST_URI}
$ENV{QUERY_STRING}
あたりに入っている。


Xslateも動かしてみた。
割と簡単。


あと、開発用のフォルダを/var/www/とは別の場所に持つようにした。

【2013/01/14 16:18 】 | サーバ | 有り難いご意見(0)
コマンドいろいろ
ファイルの中身をダンプ

$ od -tx1c ファイル名

odはOctal Dump の略
-t の後ろにオプションをいろいろ。
c 文字で表示
x1 1バイトずつ16進数で表示
d4 4バイトずる10進数で表示


類似のコマンド
$ hexdump -C ファイル名





【2013/01/13 14:29 】 | 未選択 | 有り難いご意見(0)
fcgid設定
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には、ロードするモジュールの設定とかがたくさん書いてある。

LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
その中に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


【2013/01/12 14:56 】 | サーバ | 有り難いご意見(0)
apacheとfcgi
今回は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
とかファイルを読むのが大事。



【2013/01/04 17:57 】 | サーバ | 有り難いご意見(0)
<<前ページ | ホーム | 次ページ>>