저는 매우 간단한 파일 서버 시스템을 설정하고 있습니다. 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