どうも中田です。
AWS上でAPIサーバを構築してて、
* Webサーバ:nginx
* APサーバ:unicorn
で動かしてたんですが、EC2を再起動してアクセスすると、、、
*11 connect() to unix:/var/sockets/XXXXX.sock failed (13: Permission denied) while connecting to upstream, client: X.X.X.X, server: XXXXX.com, request: "GET /masters HTTP/1.1", upstream: "http://unix:/var/sockets/XXXXX.sock:/500.html", host: "XXXXX.com"
って言われました。
やったこと(失敗例)
権限ないなら権限つけてやろう!
そもそもどんな権限で動いてるのか確認。。。
$ ps -ef | grep nginx
root 839 1 0 04:00 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 842 839 0 04:00 ? 00:00:00 nginx: worker process nginx 943 794 0 04:00 ? 00:00:00 php-fpm: pool www nginx 944 794 0 04:00 ? 00:00:00 php-fpm: pool www nginx 945 794 0 04:00 ? 00:00:00 php-fpm: pool www
nginxさんで動いてるのね。
では問題のソケット権限を確認してみようかな
$ ls -l /var/sockets/XXXXX.sock
srwxrwxrwx 1 centos centos 0 9月 20 04:01 /var/sockets/XXXXX.sock
あ、あれ?どんな権限でもオッケーだ。。おかしいな。
一応、nginxをcentosさんで動かしてみるか。。
$ sudo vi /etc/nginx/nginx.conf
#user nginx; user centos; worker_processes 1;
nginx再起動してGo!!
。。。ダメでした。
これではないらしい。
解決!!原因!
SELinuxでした。。
まずは状態確認
$ getenforce
Enforcing
おぉ、ゴリゴリに効いてますね。
今回SELinuxは特にいらないので停止してしまいます。
$ sudo vi /etc/sysconfig/selinux
#SELINUX=enforcing SELINUX=disabled
EC2再起動してGo!!
デキマシタ!
ふぃ〜はまった(軽く2時間。。。)
ちなみに動的にSELinuxを無効にする方法
$ setenforce 0 $ getenforce Permissive
感謝サイト:http://server-setting.info/centos/socket-permission-denied-resolve.html