僕の Apache 初入門(インストール)

おそらく初めて仕事をした時に JavaStruts のアプリを書いていたころから最終的には Apache/Tomcat で動いていたんだろうけど、(少しは調べたりしてたんだろうけど)、今までろくに勉強してこなかった Apache を今更入門することにした。(というか去年まで IIS の子だったというのもあるが)

環境

CentOS 6 (Vagrant で稼働させてる)

インストールなど

$ sudo yum -y install httpd
...
Complete!
$ sudo service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]

なんかいきなり怒られてる。以下に対処方法が書いてあった、が一端放置。

$ sudo chkconfig httpd on
$ sudo chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

お決まりの自動起動を ON にする。0 から 6 の数値はランレベルと呼ばれているもので、3 が通常起動を表すらしい。よって、3 が on になっているので問題無い。

$ ps ax | grep httpd
 2405 ?        Ss     0:00 /usr/sbin/httpd
 2407 ?        S      0:00 /usr/sbin/httpd
 2408 ?        S      0:00 /usr/sbin/httpd
 2409 ?        S      0:00 /usr/sbin/httpd
 2410 ?        S      0:00 /usr/sbin/httpd
 2411 ?        S      0:00 /usr/sbin/httpd
 2412 ?        S      0:00 /usr/sbin/httpd
 2413 ?        S      0:00 /usr/sbin/httpd
 2414 ?        S      0:00 /usr/sbin/httpd
 2429 pts/0    S+     0:00 grep httpd

httpd のプロセスが動作してるのが分かる。 ps のオプションの a は「全てのプロセス」、x は「他の端末に結び付けられているプロセスも表示」らしい。

待ち受けポートを調べる

lsof が無いのでいれる。

$ which lsof
/usr/bin/which: no lsof in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)
$ sudo yum -y install lsof
....
Complete!

関係ないが、lsof を入れる時にたまたまあたったサイトで以下があったが、pgrep で取得して /proc 内を探すの意味がさっぱり分からなかったが、調べてると /proc というディレクトリがあって、確かにそこにはプロセス毎のファイルやディレクトリがあってビックリ。
- lsofの使い方 - プロセスが使用中のファイルを調べる - うまいぼうblog
- /procによるLinuxチューニング [前編]- @IT

$ sudo lsof -i -n -P | grep httpd
httpd     2405    root    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)
httpd     2407  apache    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)
httpd     2408  apache    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)
httpd     2409  apache    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)
httpd     2410  apache    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)
httpd     2411  apache    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)
httpd     2412  apache    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)
httpd     2413  apache    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)
httpd     2414  apache    4u  IPv6  14312      0t0  TCP *:80 (LISTEN)

確かに 80 で待ち受けていることが分かる。

IPv6 のみの待受にみえるが、実際は IPv4 互換であるらしい。 現状 ssh の 443 で待ち受けていないのは、その設定をしていないから。

iptables の設定

正直何度見てもよく分からない。AWS の INBOUND, OUTBOUND が INPUT, OUTPUT みたいなものだろうか。

とりあえずここまでやると、403 ページまでは見れるようになる。(今回は http://192.168.33.13/)

telnet でおしゃべり

% telnet 192.168.33.13 80
Trying 192.168.33.13...
Connected to 192.168.33.13.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.1 403 Forbidden
Date: Mon, 10 Nov 2014 06:00:28 GMT
Server: Apache/2.2.15 (CentOS)
Accept-Ranges: bytes
Content-Length: 4954
Connection: close
Content-Type: text/html; charset=UTF-8

しゃべれた!

ついでに curl

% curl http://192.168.33.13/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <head>
...

% curl -I http://192.168.33.13/
HTTP/1.1 403 Forbidden
Date: Mon, 10 Nov 2014 10:46:28 GMT
Server: Apache/2.2.15 (CentOS)
Accept-Ranges: bytes
Content-Length: 4954
Connection: close
Content-Type: text/html; charset=UTF-8