web-dev-qa-db-ja.com

Nginx 403エラー:[フォルダ]のディレクトリインデックスは禁止されています

私は3つのドメイン名を持ち、Nginxを使って3つのサイトすべてを1つのサーバー(Digital Oceanのドロップレット)でホストしようとしています。

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はすべてのファイルに対して禁止されています しかし、それは役に立ちませんでした。

何が間違っている可能性がありますかについての任意のアイデア?

141
Ryan

これはうまくいく設定です:

server {
    server_name www.mysite2.name;
    return 301 $scheme://mysite2.name$request_uri;
}
server {
    #This config is based on https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf
    server_name mysite2.name;

     # The location of our project's public directory.
    root /usr/share/nginx/mysite2/live/public/;

     # Point index to the Laravel front controller.
    index           index.php;

    location / {
        # URLs to attempt, including pretty ones.
        try_files   $uri $uri/ /index.php?$query_string;
    }

    # Remove trailing slash to please routing system.
    if (!-d $request_filename) {
            rewrite     ^/(.+)/$ /$1 permanent;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #   # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

}

ブラウザでの唯一の出力はLaravelエラーでした。

chmod -R 777 app/storagenote )を実行しないでください。世界で書き込み可能なものにすることはセキュリティが良くありません。

chmod -R 755 app/storageは機能し、より安全です。

58
Ryan

ディレクトリのインデックス作成がオフになっていて、この問題が発生している場合は、おそらく、使用しているtry_filesにディレクトリオプションがあるためです。

location / {
  try_files $uri $uri/ /index.html index.php;
}                 ^ that is the issue

それを削除して、それは動作するはずです:

location / {
  try_files $uri /index.html index.php;
} 

私が見ることができるものから、これはnginxがディレクトリにインデックスを付けようとし、それ自身によってブロックされるために引き起こされます。 OPによって言及されたエラーを投げます。

111
JCM

単にディレクトリの内容を一覧表示しようとしているのであれば、autoindex on;を使用してください。

location /somedir {
       autoindex on;
}

server {
        listen   80;
        server_name  domain.com www.domain.com;
        access_log  /var/...........................;
        root   /path/to/root;
        location / {
                index  index.php index.html index.htm;
        }
        location /somedir {
               autoindex on;
        }
}
51
maz

私は同様のエラーが発生しました
--- Webページ内の「403禁止」
--- /var/log/nginx/error.logのエラーログの「13:Permission denied」

以下の3つのステップは私のために働きました:

1:ターミナルを開き、以下のようなものを見ました

user1@comp1:/home/www/

だから、私のユーザー名は "user1"です(上から)

2:/etc/nginx/nginx.confのユーザーを変更

# user www-data;
user user1;

3:nginxをリロードした

Sudo nginx -s reload  

また、ファイル/フォルダのアクセス許可を適用しました(3つの手順を実行する前に)
(自分のディレクトリに755、/ dir1 /と言う)&(そのディレクトリの下のファイルには644):
(この追加のステップが本当に必要な場合は、3ステップより上で十分な場合があります):

chmod 755 ./dir1/
chmod 644 ./dir1/*.*

これがすばやく誰かに役立つことを願っています。頑張ってください。

19

私は同じ問題を抱えていました、ログファイルは私にこのエラーを示しました:

2016/03/30 14:35:51 [error] 11915#0: *3 directory index of "path_scripts/viewerjs/" is forbidden, client: IP.IP.IP.IP,     server: domain.com, request: "GET /scripts/viewerjs/ HTTP/1.1", Host: "domain", referrer: "domain.com/new_project/do_update"

私はcodeignitorフレームワークでPHPアプリをホストしています。アップロードしたファイルを閲覧したいときに403 Errorを受け取りました。

問題は、nginx.confが正しく定義されていないことでした。の代わりに

index index.html index.htm index.php

私は含まれています

index index.php

私は私のルートにindex.phpを持っていて、私はそれで十分だと思った、私は間違っていた;)ヒントは私にくれた NginxLibrary

7
theDrifter

実際、確認する必要があることがいくつかあります。 1. nginxの実行状態を確認してください

ps -ef|grep nginx

ps aux|grep nginx|grep -v grep

ここで、誰がnginxを実行しているのかを確認する必要があります。ユーザーとグループを覚えておいてください

  1. フォルダのアクセス状況を確認する

    ls - alt

  2. フォルダのステータスとnginxのステータスを比較します。

(1)フォルダのアクセス状況が正しくない場合

Sudo chmod 755 /your_folder_path

(2)フォルダのユーザーとグループがnginxの実行中のものと同じでない場合

Sudo chown your_user_name:your_group_name /your_folder_path

そしてnginxの実行中のユーザー名とグループを変更する

nginx -h

nginxの設定ファイルはどこにありますか

Sudo vi /your_nginx_configuration_file

//in the file change its user and group
user your_user_name your_group_name;

//restart your nginx
Sudo nginx -s reload

なぜなら、nginx default runningのユーザは誰でもなく、groupもだれでもないからです。このユーザーとグループに気付いていない場合は、403が導入されます。

6
Haimei

単にディレクトリの内容を一覧表示しようとしているのであれば、autoindex on;を使用してください。

server {
        listen   80;
        server_name  domain.com www.domain.com;
        access_log  /var/...........................;
        root   /path/to/root;
        location / {
                index  index.php index.html index.htm;
        }
        location /somedir {
               autoindex on;
        }
}
6
maz

あなたはNginxポリシー(例えば "deny")のためにこれを得るかもしれません、またはNginxの設定ミスのためにこれを得るかもしれません、またはファイルシステムの制限のためにこれを得るかもしれません。

あなたはそれが後者であるかどうかを判断することができます(そしておそらくstraceを使用することによって誤設定の証拠を見ることができます(ただし、OPはそれにアクセスできない)。

# pidof nginx
11853 11852

# strace -p 11853 -p 11852 -e trace=file -f
Process 11853 attached - interrupt to quit
Process 11852 attached - interrupt to quit
[pid 11853] stat("/var/www/html/kibanaindex.html", 0x7ffe04e93000) = -1 ENOENT (No such file or directory)
[pid 11853] stat("/var/www/html/kibana", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
^CProcess 11853 detached
Process 11852 detached

ここで私はテストの実行中にnginxによって行われたファイルシステムのアクティビティを調べています(私はあなたと同じエラーがありました)。

これは当時の私の設定の一部です

    location /kibana/3/ {
        alias /var/www/html/kibana;
        index index.html;
    }

私の場合、straceが非常に明確に示しているように、 "alias"を "index"に結合することは私が期待していたことではなかったので、ディレクトリ名に常に/を追加する習慣が必要です。私の場合は、次のように動作しました。

    location /kibana/3/ {
        alias /var/www/html/kibana/;
        index index.html;
    }
6
Cameron Kerr

いくつかの権限の問題のように見えます。

あなたがmysite1で行ったようなすべてのパーミッションを他のサイトに設定するようにしてください。

デフォルトでは、ファイルパーミッションは644、ディレクトリ755です。また、nginxを実行しているユーザにそのファイルとディレクトリの読み込み権限があるかどうかも確認します。

3
Tomahock

php-fpmを使用しているので、php-fpmユーザーがnginxユーザーと同じであることを確認する必要があります。

/etc/php-fpm.d/www.confを確認し、phpのユーザーとグループをnginxに設定します(そうでない場合)。

php-fpmユーザーには書き込み権限が必要です。

3
Ali Hashemi
location ~* \.php$ {
    ...
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;    
}

デフォルトを変更

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

私の問題を解決しました。

2
wave_1102

try_filesindex.phpパスを指すように変更してください。あなたが言っていた "Laravel"の中で、それはこのようなものであるべきです

location / {
    try_files $uri $uri/ /public/index.php$request_uri;
}

そして "codeigniter"プロジェクトではこれを試してみてください

location / {
    try_files $uri $uri/ /public_web/index.php$request_uri;
}
2

静的ファイルディレクトリに対する実行権限が必要です。また、それらはあなたのnginxユーザーとグループによって承認される必要があります。

2
Rhys
6833#0: *1 directory index of "/path/to/your/app" is forbidden, client: 127.0.0.1, server: lol.com, request: "GET / HTTP/1.1", Host: "localhost"    

Ubuntu 15.10を実行していましたが、単純な理由で403 Forbiddenエラーが発生しました。 nginx.conf(nginxの設定ファイル)では、ユーザーは 'www-data'でした。ユーザ名を[自分のユーザ名]に変更すると、必要な権限が自分のユーザ名に付与されていると仮定してもうまくいきました。私が従った手順:

chmod 755 /path/to/your/app    

私の設定ファイルは次のようになります。

**user [my username]**;#I made the change here.
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;


server {
    listen 80;

    server_name My_Server;

    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        proxy_pass         http://127.0.0.1:8000;
        proxy_redirect     off;

        proxy_set_header   Host             $Host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}
}
1
Raunaq Kochar

この問題を解決するために、私は一晩過ごしました。この物語の私の2セントはここにあります、

PHPインタープリターとしてhhvmを使用しているかどうかを確認します。次に、ポート9000でリッスンしている可能性があるため、Webサーバーの構成を変更する必要があります。

これは補足事項です。mysqlを使用していて、hhvmからmysqlへの接続が不可能になった場合は、apparmorがインストールされているかどうかを確認してください。無効にします。

0
user9869932

以下のように設定すれば問題は解決しました。

location = /login {
    index  login2.html;
}

403エラーが表示されます。

[error] 4212#2916: *2 directory index of "D:\path/to/login/" is forbidden

私はautoindex onを試しましたが、うまくいきませんでした。私がこのように設定を変更した場合、それは機能します。

location = /login/ {
    index  login2.html;
}

完全に一致すると思います。パスがディレクトリの場合はそうです。

0
robin ong

ディレクトリオプションを保持する場合は、このように$ uriの前にindex.phpを配置できます。

try_files /index.php $uri $uri/
0
xoyabc

私にとって問題は、ベースルート以外のルートが機能していることでした。この行を追加することで問題が解決しました。

index           index.php;

完全なこと:

server {

    server_name example.dev;
    root /var/www/example/public;
    index           index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
0
zeros-and-ones
location / {
root  fileLocation;
index  index.html index.htm;
expires 0;
if_modified_since off;}

ここでは、aliasの代わりにrootを使用しましたが、それが原因でエラーが発生しました。この構成は正常に機能します。

0
Credoz