하위 디렉터리에서 파일을 제공하도록 nginx 설정

하위 디렉터리에서 파일을 제공하도록 nginx 설정

저는 매우 간단한 파일 서버 시스템을 설정하고 있습니다. nginx를 설치하고 /home사용자의 홈 디렉터리에 있는 파일을 제공하도록 루트 디렉터리를 설정했습니다 .

http://12.34.56.78/user1/testfile.bin그런데 브라우저를 사용하여 파일을 다운로드하려고 하면 "403 Forbidden"이라고 표시됩니다. 하지만 브라우저를 사용하여 연결하면 http://12.34.56.78/내가 넣은 기본 색인 페이지가 표시됩니다 /home/.

nginx가 사용자 디렉토리에 파일을 제공하도록 하는 방법은 무엇입니까? 예를 들어

/home/user1

/home/user2

또한 루트 디렉터리를 제외하고 싶다면

/home

및 시스템 파일

.bash_history .bash_profile .bashrc (예: 이름이 점으로 시작하는 모든 파일)

제공되는 파일에서?

답변1

Nginx에는 사용자 파일을 읽을 수 있는 권한이 없습니다. 모든 사용자 파일을 네트워크에 저장하는 것은 매우 나쁜 생각입니다.

더 나은 아이디어는전용 카탈로그 제공사용자의 홈 디렉토리에 있습니다.

www액세스 시 각 사용자의 폴더에 있는 폴더를 사용할 수 있도록 하려면 /<USER>다음 위치를 사용하십시오.

location ~ ^/(.+?)(/.*)?$ {
  alias /home/$1/www$2;
  index  index.html index.htm;
  autoindex on;
}

또한 Nginx가 이 디렉터리에 액세스하도록 허용해야 합니다.

$ chmod 0755 /home/$USER/www

답변2

403 오류는 권한 문제로 인해 발생하는 경우가 많습니다. 웹 디렉터리의 파일은 누구나 읽을 수 있어야 하며(chmod 644 또는 664), 디렉터리는 누구나 읽고 실행할 수 있어야 합니다(chmod 755 또는 775).

답변3

위의 모든 답변은 유효한 설명을 제공합니다. 지금까지 언급되지 않은 것은 error 403캐시 설정에 따라 올바른 권한을 설정한 후에도 캐싱으로 인해 이것이 지속될 수 있다는 것입니다.

이런 일이 발생하지 않도록 하려면 캐시를 재설정하세요.

rm -r /path/to/nginx/cache/*
systemctl restart nginx

관련 정보