さるへい備忘録

さるへいのやったことを綴っているブログです。基本的にテクノロジーの話題です。

AWSのEC2インスタンスとRDS(MYSQL)の間の通信でSELinuxでハマった話

すごい初歩的なお話になりますが、僕が AWSのEC2インスタンスとRDSの通信で1時間くらいハマった話をします。

ec2インスタンスから直接mysqlのコマンドでhost指定して接続するのは可能なのに、
PHPから接続しようとすると接続できない。 ずっと

 Unknown MySQL server host 'host名:port番号'

みたいなエラーがでてひたすらhost名がおかしいのかな?

みたいな感じになっていました。

実はこれの原因はSELinuxでした。 あの、みんながめんどくさがって無効にするSELinuxです。

どうやら、SELinuxはhttp通信によるDB接続はデフォルトで無効にしているようです。
なので、PHPからhttp通信によるDB通信が弾かれたことになります。
でもこのエラー表示はちょっと誤解しちゃいますよね・・・・

$ setsebool -P httpd_can_network_connect_db on

とやれば、http通信でのDB接続が可能になってちゃんとRDSにつながりました。

ぐぐっても結構でてこなかったので、実際ハマるのは僕くらいかもしれませんが、備忘録的にここに残しておきます。

参考 : https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Booleans-Configuring_Booleans.html