私は 3 つのドメイン名を持っており、Nginx を使用して 1 つのサーバー (Digital Ocean ドロップレット) で 3 つのサイトすべてをホストしようとしています。
mysite1.name mysite2.name mysite3.name
そのうち 1 つだけが機能します。他の 2 つは (同様に) 403 エラーになります。
nginx エラー ログに次のように表示されます: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
。
私のサイト対応構成は次のとおりです:
server {
server_name www.mysite2.name;
return 301 $scheme://mysite2.name$request_uri;
}
server {
server_name mysite2.name;
root /usr/share/nginx/mysite2.name/live/;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.html index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
3 つのサイトはすべてほぼ同じ構成ファイルを持っています。
各サイトのファイルは /usr/share/nginx/mysite1.name/someFolder のようなフォルダーにあり、/usr/share/nginx/mysite1.name/live はそのフォルダーへのシンボリックリンクです。(mysite2 と mysite3 も同様です。)
私は見てきましたNginx 403 すべてのファイルに対して禁止しかしそれは役に立ちませんでした。
何が間違っているのか、何か考えはありますか?
ベストアンサー1
ディレクトリのインデックス作成をオフにしていて、この問題が発生する場合は、使用している try_files にディレクトリ オプションがあることが原因と考えられます。
location / {
try_files $uri $uri/ /index.html index.php;
} ^ that is the issue
削除すると動作するはずです:
location / {
try_files $uri /index.html index.php;
}
なぜこのようなことが起こるのか
TL;DR: これは、nginx がディレクトリのインデックスを作成しようとして、それ自体がブロックされるために発生します。OP が言及したエラーがスローされます。
try_files $uri $uri/
は、ルート ディレクトリから、 で指定されたファイルを試行しuri
、それが存在しない場合は、代わりにディレクトリを試行することを意味します ( /
)。nginx がディレクトリにアクセスすると、ディレクトリをインデックス化し、その中のファイルのリストをブラウザー/クライアントに返そうとしますが、デフォルトではディレクトリのインデックス化は無効になっているため、「Nginx 403 エラー: [フォルダー] のディレクトリ インデックスは禁止されています」というエラーが返されます。
ディレクトリのインデックス作成は、以下のオプションによって制御されますautoindex
。nginx.org/ja/docs/http/ngx_http_autoindex_module.html を参照してください。