Firewalld + Apache

CentOS7の環境において表題の件。Apacheで画面が表示されなくて少々はまっていたのでメモしておく。

■ 環境

  • Apache 2.2
  • firewalld
  • CentOS 7.2

■ Apache起動

単純にApacheを起動して画面を確認しようとしたのだが、画面も表示されなければApacheの`access_log`/`error_log`にも何も記載されない。プロセスは起動しているしポートも開いている、という状態である。

$ ss -nlt
State       Recv-Q Send-Q                      Local Address:Port                                     Peer Address:Port
LISTEN      0      128                                     *:22                                                  *:*
LISTEN      0      100                             127.0.0.1:25                                                  *:*
LISTEN      0      128                                    :::80                                                 :::*
LISTEN      0      128                                    :::22                                                 :::*
LISTEN      0      100                                   ::1:25                                                 :::*
$

`iptables`かと思ったが、CentOS7からは`firewalld`か、ということで確認。

$ firewall-cmd --get-active-zones
public
  interfaces: eth0 eth1
$

何も取得できない。本当にこれで良いのか?と調べてみると、やはり`http`を許可する事が必要そうである。

$ sudo firewall-cmd --add-service=http
success
$
$ firewall-cmd --get-active-zones
public
  interfaces: eth0 eth1
$

ここには表示されないようだ。

$ firewall-cmd --list-all
public (default, active)
  interfaces: eth0 eth1
  sources:
  services: dhcpv6-client http ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

$

こっちに表示されている。

以上。

AmazonLinuxでapache2.4とPHP

表題の通りの環境を構築する。単なるメモ。

■ 環境

  • PHP 5.5
  • Apache 2.4
  • Amazon Linux

■ Install

AmazonLinuxではApache 2.4のパッケージが”httpd24“で提供されている。これに合わせてPHPを入れたいのだが、通常のPHPでは”httpd-tools“のパッケージに依存しており、こちらは”Apache 2.2“である。なのでPHPもversionを指定してインストールする。

$ sudo yum install php55 httpd24

この組み合わせででインストールが可能である。

以上。

Apacheの再起動に失敗

表題の通り。下記のエラーが出ていて起動ができない。

[Thu Oct 06 19:13:27 2012] [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of "ip-10-0-0-32"

■ 環境

  • AmazonLinux

■ /etc/hosts

どうやら原因は`hostname`と`/etc/hosts`が一致しないことのようである。

$ hostname
ip-10-0-0-32
$
$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain
$

ip-10-0-0-32“を`/etc/hosts`に追加する。追加した結果は下記の通りである。

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain ip-10-0-0-32
$

これでApacheも正常に起動することができた。

以上。

ApacheのVersion確認

表題の通り、UbuntuにインストールされたApacheのVersionを確認したい。

■ 環境

  • Apache 2
  • Ubuntu 14.04

■ Apache2

下記のようにインストールされていたらしいApache2があった。

$ apt-get install apache2

正確なVersionを知りたい。`httpd`コマンドがなかったので、それっぽいコマンドを探すと下記。

$ dpkg -L apache2
  :
/usr/sbin/apache2ctl
/usr/sbin/apachectl
  :
$

`apache2`コマンドが存在しないと思ったら、パッケージとしては分かれているらしい。`apache2`の依存で`apache2-bin`がインストールされるのであろう。

$ dpkg -S /usr/sbin/apache2
apache2-bin: /usr/sbin/apache2
$

よってこれらのコマンドでVersionを確認する。

$ apache2 -v
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 15 2016 15:34:04
$
$ apachectl -v
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 15 2016 15:34:04
$
$ apache2ctl -v
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 15 2016 15:34:04
$

もちろんどのコマンドでも同じ結果が得られる。ちなみに`apachectl`は`apache2ctl`へのシンボリックリンクであるようだ。

以上。

apache2.2が起動しない

Apache 2.2を久しぶりに触った時にハマったので恥を忍んでメモとして残しておく。

■ 環境

  • Apache 2.2
  • Amazon Linux

■ はじめに

Apache自体は凄く久しぶりに触った気がする。設定とかディレクティブとかはもうあまり覚えていない。そんな時に触らねばならなくなり、、設定を入れ込んでみたもののイメージ通りに動いてくれず。一度元の状態に戻してから、整理しながらまた設定してみよう、というのが話の始まり。

■ 起動できない

設定を元に戻した(つもり)で、起動してみたところ下記のようなエラーが出て起動できなかった。

$ sudo service httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
          [ OK ]
$

いや、そんなはずない。。と思いつつ調査開始。まずは下記2つを確認した。

  1. ポート80番が開いているのか?
  2. ポート80番を使用しているプロセスはいるか?

1点目を下記コマンドで確認。

$ ss -nlt

ポート80番は出てこない。見覚えの無い他のポートは開いているが。

2点目を下記コマンドで確認。

$ sudo lsof -i :80

こちらでもポート80番を使用しているプロセスは確認できない。

さて何が原因なのか?他のプロセスが一時的に使用していたりするのか?と思い、他の見慣れないポート番号を使用しているプロセスを落としてみたが、現象は変わらず。プロセスも一通り見てみたが、ポート80番を使用していると思われるプロセスは特に見つからない。

と、しばらく悩んでふと気がついた。

Listen 80 

元に戻したつもりが、上記を追加してしまっていた様子。。設定ファイル上に2ヶ所で上記があった為に起こってしまっている現象であったようである。追加してしまっていた箇所をコメントアウトしたところ、正常に起動してくれるようになった。

ちなみに、設定ファイル内に複数の同じポート番号の”Listen“ディレクティブがあっても”configtest“は正常に通ってしまうようである。

$ sudo service httpd configtest
Syntax OK
$ 

以上。

■ 関連