nginx를 설치하고 실행해보는 작업을 진행하는 중에 발생한 오류이다.
🤔 문제 상황
서버 내 특정 경로에 있는 이미지를 가져올 수 있도록 nginx에서 루트 경로 설정을 한 뒤 브라우저에서 해당 이미지를 조회하니, 아래와 같이 403 에러가 발생하였다.

✍🏻 접근 방식
nginx의 error.log 파일을 확인해보니 아래와 같이 Permission Denied 가 출력되어있다.
[error] 7781#0: *18 open() "/nas/error.html" failed (13: Permission denied), client: {접근 IP}, server: {접근 Host}, request: "GET /favicon.ico HTTP/1.1", host: "{서버 IP}", referrer: "https://{서버 IP}/3907131079.png"
로그에서는 /nas/error.html 파일을 열려고 했는데, Permission denied 이슈로 이 파일을 여는데 실패했다고 말하고 있다.
사용자가 요청한 3907131079.png 를 조회하려했는데, 해당 디렉토리에 파일이 없어서 nginx 설정 파일에서 설정한 에러 파일 error.html 을 로드하려고 그 에러 파일에 접근하니 시스템에서 권한 이슈로 거부를 한것으로 최종 파악하였다.
Permission Denied 이니, 디렉토리 혹은 파일의 권한 문제로 유추하였다.
접근하려한 파일과 디렉토리를 확인하다보니
해당 파일의 루트 디렉토리의 소유자가 root 임을 확인하였다.
그런데 Nginx는 user1 라는 계정으로 동작 중이었다.
**Nginx 실행 유저는 nginx 설정 파일에서 확인할 수 있다. (파일명 : nginx.conf)
$ cat nginx.conf
user user1; # user1로 설정해둔 것 확인.
worker_processes 4;
...생략
디렉토리/파일의 소유자는 'll' 명령어만으로도 확인 가능하다.
⭐️ 해결
루트 디렉토리의 소유자를 nginx가 실행되는 계정으로 변경하였다.
그리고 파일 소유자에 대해 쓰기, 읽기, 실행할 수 있도록 권한을 설정하였다.
$ chmod user1:user1 -R {루트 경로}
$ chown 755 -R {루트 경로}
다시 존재하지 않는 경로를 호출해보니 error.html 파일이 정상 로드되는 것을 확인하였다.
💭 결과
원인은 nginx에서 루트로 설정한 디렉토리들의 권한은 root:root로 부여되어 있는데 nginx 실행 유저는 user1로 설정해두었기 때문에
루트 디렉토리 하위에 있는 파일에 접근하려하여 문제가 된 것이다.
루트 디렉토리의 파일 소유자를 nginx 실행 계정과 동일하게 지정하고,
파일 소유자에 대해 파일 쓰기/읽기/실행 권한을 부여하여 해결하였다.