nginxでホームディレクトリを公開ディレクトリに設定するふ

## やったこと
表題の通りですが、nginxを使って、デフォルトの公開用ディレクトリでなく、
下記のようなホームディレクトリに用意した、publicディレクトリを公開ディレクトリにすること
※ハマッたので、記載


## 前提
+ nginxインスト済み

## nginx側の設定

```lang:/etc/nginx/conf.d/hogehoe.conf
server {
    listen 80;
    server_name hogehoge;
    charset utf8;
    root /var/www/hoge; # シンボリックリンク済み　-> /home/hoge/project/public
    #root /home/hoge/project/public;
    index index.php;
    client_max_body_size 128M;


    location / {
            if (!-e $request_filename) {
                    rewrite ^/(.*)$ /index.php/$1 last;
                    break;
            }
    }
    location ~* \.(gif|jpg|png)$ {
      expires 30d;
    }
    location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            if (!-f $document_root$fastcgi_script_name) {
                    return 404;
            }
            include fastcgi_params;
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index index.php;
            fastcgi_buffers 4 256k;
            fastcgi_busy_buffers_size 256k;
            fastcgi_temp_file_write_size 256k;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param REQUEST_FILENAME $request_filename;
    }
    error_page   500 502 503 504  /error.html;
    location = /error.html {
            root /usr/share/nginx/html;
    }
}
```

で、nginx起動
```
$ sudo service nginx start
```
とすると、

```
2015/08/16 22:27:27 [crit] 1917#0: *4 stat() "/home/hoge/project/public" failed (13: Permission denied), client: 192.168.33.1, server: hogehoge, request: "GET / HTTP/1.1", host: "hogehoge"
```
え、パーミッションエラーだと・・・
確かに、

```
/home/hoge
```
にnginxユーザーでアクセスするわけだし・・・
ということで、パーミッション変更…

```
# chmod o+x -R /home/hoge 
# service nginx restart
```

が、

```
2015/08/16 22:27:27 [crit] 1917#0: *4 stat() "/home/hoge/project/public" failed (13: Permission denied), client: 192.168.33.1, server: hogehoge, request: "GET / HTTP/1.1", host: "hogehoge"
```

変わらず・・・
ホームディレクトリの所有グループにnginxユーザーを追加もやってみたが、変わらず…
で、もう少し調べてみると・・・[SELinux might be blocking](http://stackoverflow.com/questions/29775259/nginx-stat-failed-13-permission-denied-when-browsing)なんじゃないかと・・・

まずは、

```
# 状態確認
$ getenforce
Enforcing
```

以下のようにして、確認してもよいかも。
```
$ setenforce 0 #selinuxをオフにする
```
で、ブラウザからアクセスできるか。できたら、selinuxの設定漏れ。


で、自分のケースに話を戻すと、確かに、selinuxが有効になっていて、パーミッションエラーになった・・・
てことは、ポリシー設定がないから？

で、さっそく確認。

```
$ sudo cat /var/log/audit/audit.log | grep nginx | audit2allow -m nginx
module nginx 1.0;
require {
type httpd_t;
type user_home_t;
type usr_t;
class file { write open };
class dir { search open getattr };
}
#============= httpd_t ==============
#!!!! This avc can be allowed using one of the these booleans:
#     httpd_read_user_content, httpd_enable_homedirs
allow httpd_t user_home_t:dir { search open getattr };
#!!!! This avc can be allowed using the boolean 'httpd_read_user_content'
allow httpd_t user_home_t:file open;
allow httpd_t user_home_t:file { write open };
allow httpd_t usr_t:file write;
```

ポリシーファイルを作成

```
$ sudo cat /var/log/audit/audit.log | audit2allow -M nginx
******************** IMPORTANT ***********************
To make this policy package active, execute:
 
semodule -i nginx.pp
```

して、適用

```
$ sudo semodule -i nginx.pp
```

完了後、再度サイトにアクセスすると今度はサイトが表示されました！

が、SELinuxがどうだったから何が起きていて、アクセスができていなかったのか、理解ができていない・・・まずは、備忘録にしときます。

追記…
やはり、selinuxが有効なのに、アクセス許可するポリシー設定がなかったため、アクセス制御に引っかかってしまっていたとうことでした。


今回は上記のように対応しましたが、そもそも、selinuxのモードは下記の通り。

* enforce
* pemissive
* disabled

無効にするならdisabled、selinuxは有効にするがアクセス許可し、ログ出力のみにするなら、pemissive、アクセス不許可ならenforce

ってことで、pemissiveモードにしても解決でした。

## 参考
+ [SELINUX + NGINX ポリシー設定](http://blog.higty.xyz/archives/242)
+ [Nginx: stat() failed (13: permission denied)](http://stackoverflow.com/questions/25774999/nginx-stat-failed-13-permission-denied)
+ [selinuxとは](http://itpro.nikkeibp.co.jp/article/COLUMN/20060718/243512/?s2p)