[configuration] Nginx 403 오류 : [폴더]의 디렉토리 색인이 금지되어 있습니다.

나는 3 개의 도메인 이름을 가지고 있으며 Nginx를 사용하여 하나의 서버 (Digital Ocean droplet)에서 3 개의 사이트를 모두 호스팅하려고합니다.

mysite1.name mysite2.name mysite3.name

그들 중 하나만 작동합니다. 다른 두 결과는 같은 방법으로 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이 모든 파일에 대해 금지되어있는 것을 보았지만 도움이되지 않았습니다.

무엇이 잘못되었을 지에 대한 아이디어가 있습니까?



답변

디렉토리 색인이 해제되어 있고이 문제점이 발생하는 경우, 사용중인 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 오류 : 디렉토리 폴더의 [폴더] 금지되어 있습니다. “

디렉토리 색인 생성은 https://nginx.org/en/docs/http/ngx_http_autoindex_module.htmlautoindex 옵션으로 제어됩니다 .


답변

작동하는 구성은 다음과 같습니다.

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/storage( 참고 ). 세상에 쓸 수있는 무언가를 만드는 것은 안보가 좋지 않습니다.

chmod -R 755 app/storage 작동하고 더 안전합니다.


답변

단순히 디렉토리 내용을 나열하려는 경우 다음 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;
        }
}


답변

/var/log/nginx/error.log의 오류 로그에서 비슷한 오류가 발생했습니다.
— 웹 페이지에서 “403 Forbidden”
— “13 : 권한이 거부되었습니다”

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/*.*

이것이 빠른 누군가를 돕기를 바랍니다. 행운을 빕니다.


답변

실제로 몇 가지 확인해야 할 사항이 있습니다. 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 기본 실행 사용자는 nobody이고 group은 nobody이기 때문입니다. 이 사용자와 그룹을 모르면 403이 도입됩니다.


답변

나는 같은 문제가 있었고 로그 파일은이 오류를 보여주었습니다.

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를 주었다.


답변

Nginx 정책 (예 : “거부”)으로 인해이 오류가 발생하거나 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;
    }