Mac에서 Nginx 에러 로그 확인하고 해결하기 (Permission denied, Operation not permitted)
2024. 08. 27. by 박하람
이전 포스팅에서 Mac에 Nginx 설치하는 방법에 대해 설명했다. 오늘은 갑자기 서버가 정전으로 꺼졌다가..🥲 다시 실행했더니 alias로 static page를 연결한 페이지가 404 error가 발생했다. 오늘 포스팅은 Nginx의 에러 로그를 기반으로 에러를 해결한 방법에 대해 설명한다. 이번 에러 해결은 ChatGPT가 큰 도움이 됐다!
Permission denied 에러
Nginx에 다음과 같이 alias
로 static page를 연결해놨는데, 이렇게 연결된 페이지는 모두 접근이 불가능했다. 원래라면 test.domain.com/test/
에 접속했을 때 해당 경로에 있는 index.html
페이지가 잘 나오는데 계속해서 404 에러가 떴다.
server {
server_name test.domain.com;
...
location /test/ {
alias /Users/harampark/Documents/test/;
try_files $uri $uri/ =404;
}
}
정확한 오류 확인을 위해 다음과 같이 에러 로그를 확인했다. 맥의 경우 다음의 경로에서 error.log
를 확인할 수 있고, 끝부분을 보여준다. 확인해보니 이 경로에 접근할 수 없다는 Permission denied
에러가 떴다.
tail -f /usr/local/var/log/nginx/error.log
# 2024/08/27 15:59:51 [error] 5886#0: *1 "/Users/harampark/Documents/test/index.html" is
# forbidden (13: Permission denied), client: 127.0.0.1, server: test.domain.com, request: "GET /test/
# HTTP/1.1", host: "test.domain.com"
이 경우는 보통 nginx가 해당 디렉토리에 접근할 수 있는 권한이 없어 생긴 결과였다. 이 포스트에서 설명한 것처럼 nginx가 해당 디렉토리에 접근할 수 있는 권한이 없어서 생기는 문제였다. 다음의 코드로 해당 디렉토리의 접근권한을 확인할 수 있다.
ls -ld /Users/harampark/Documents/test/
# drwxr--r-- 15 harampark staff 480 8 27 14:24 /Users/harampark/Documents/test/
drwxr--r--
은 접근권한을 나타내는데, 접근권한은 다음과 같이 해석하면 된다. 이 경로의 접근권한은 기타 사용자인 nginx가 실행(x)이 불가능한 권한이므로 Permission denied 에러가 발생했다. (nginx는 보통 nobody라는 이름으로 접근되어 기타 사용자에 속한다고 한다.)
-
맨 앞의
d
: 디렉토리를 의미함 -
rwxr--r--
: 권한 설정을 나타냄rwx
: 소유자(harampark)의 읽기, 쓰기, 실행 권한 부여r--
: 그룹(staff)의 읽기 권한만 부여r--
: 기타 사용자의 읽기 권한만 부여
따라서 다음의 755로 디렉토리의 접근권한을 바꿔준다. 755는 접근권한을 drwxr-xr-x
로 변경하는데, 그룹과 기타 사용자에게 읽고 실행할 수 있는 권한을 부여한다. 위의 ls -ld
코드로 접근 권한이 바뀌었는지 확인하고 웹 서버를 다시 재부팅해주면 된다.
sudo chmod -R 755 /Users/harampark/Documents/test/
sudo nginx -t
sudo brew services nginx reload
Operation not permitted
그러나 앞서 나타난 에러를 해결해도 test.domain.com/test/
에 접속되지 않았다. 에러 로그를 확인하니 이제는 새로운 Operation not permitted
란 에러가 발생했다.
# 2024/08/27 16:01:10 [crit] 6160#0: *1 open() "/Users/harampark/Documents/test/index.html"
# failed (1: Operation not permitted), client: 127.0.0.1, server: test.domain.com, request: "GET /test/
# HTTP/1.1", host: "test.domain.com"
아무리 어떤 것을 해도 해결되지 않다가... Mac의 보안기능으로 특정 디렉토리나 파일에 접근 제한될 수 있다는 것을 알게 됐다. 이 경우는 Settings(시스템 환경설정) - Privacy & Security(보안 및 개인 정보 보호) - Files & Folders(파일 및 폴더)와 Full Dist Access(전체 디스크 접근)에서 nginx에게 접근 권한을 허용해줘야 한다!
이렇게 설정해주고 nginx를 다시 실행했더니 드디어 test.domain.com/test/
에 접근이 가능해졌다! 만세!
이전 포스팅에서 Mac에 Nginx 설치하는 방법에 대해 설명했다. 오늘은 갑자기 서버가 정전으로 꺼졌다가..🥲 다시 실행했더니 alias로 static page를 연결한 페이지가 404 error가 발생했다. 오늘 포스팅은 Nginx의 에러 로그를 기반으로 에러를 해결한 방법에 대해 설명한다. 이번 에러 해결은 ChatGPT가 큰 도움이 됐다!
Permission denied 에러
Nginx에 다음과 같이 alias
로 static page를 연결해놨는데, 이렇게 연결된 페이지는 모두 접근이 불가능했다. 원래라면 test.domain.com/test/
에 접속했을 때 해당 경로에 있는 index.html
페이지가 잘 나오는데 계속해서 404 에러가 떴다.
server {
server_name test.domain.com;
...
location /test/ {
alias /Users/harampark/Documents/test/;
try_files $uri $uri/ =404;
}
}
정확한 오류 확인을 위해 다음과 같이 에러 로그를 확인했다. 맥의 경우 다음의 경로에서 error.log
를 확인할 수 있고, 끝부분을 보여준다. 확인해보니 이 경로에 접근할 수 없다는 Permission denied
에러가 떴다.
tail -f /usr/local/var/log/nginx/error.log
# 2024/08/27 15:59:51 [error] 5886#0: *1 "/Users/harampark/Documents/test/index.html" is
# forbidden (13: Permission denied), client: 127.0.0.1, server: test.domain.com, request: "GET /test/
# HTTP/1.1", host: "test.domain.com"
이 경우는 보통 nginx가 해당 디렉토리에 접근할 수 있는 권한이 없어 생긴 결과였다. 이 포스트에서 설명한 것처럼 nginx가 해당 디렉토리에 접근할 수 있는 권한이 없어서 생기는 문제였다. 다음의 코드로 해당 디렉토리의 접근권한을 확인할 수 있다.
ls -ld /Users/harampark/Documents/test/
# drwxr--r-- 15 harampark staff 480 8 27 14:24 /Users/harampark/Documents/test/
drwxr--r--
은 접근권한을 나타내는데, 접근권한은 다음과 같이 해석하면 된다. 이 경로의 접근권한은 기타 사용자인 nginx가 실행(x)이 불가능한 권한이므로 Permission denied 에러가 발생했다. (nginx는 보통 nobody라는 이름으로 접근되어 기타 사용자에 속한다고 한다.)
-
맨 앞의
d
: 디렉토리를 의미함 -
rwxr--r--
: 권한 설정을 나타냄rwx
: 소유자(harampark)의 읽기, 쓰기, 실행 권한 부여r--
: 그룹(staff)의 읽기 권한만 부여r--
: 기타 사용자의 읽기 권한만 부여
따라서 다음의 755로 디렉토리의 접근권한을 바꿔준다. 755는 접근권한을 drwxr-xr-x
로 변경하는데, 그룹과 기타 사용자에게 읽고 실행할 수 있는 권한을 부여한다. 위의 ls -ld
코드로 접근 권한이 바뀌었는지 확인하고 웹 서버를 다시 재부팅해주면 된다.
sudo chmod -R 755 /Users/harampark/Documents/test/
sudo nginx -t
sudo brew services nginx reload
Operation not permitted
그러나 앞서 나타난 에러를 해결해도 test.domain.com/test/
에 접속되지 않았다. 에러 로그를 확인하니 이제는 새로운 Operation not permitted
란 에러가 발생했다.
# 2024/08/27 16:01:10 [crit] 6160#0: *1 open() "/Users/harampark/Documents/test/index.html"
# failed (1: Operation not permitted), client: 127.0.0.1, server: test.domain.com, request: "GET /test/
# HTTP/1.1", host: "test.domain.com"
아무리 어떤 것을 해도 해결되지 않다가... Mac의 보안기능으로 특정 디렉토리나 파일에 접근 제한될 수 있다는 것을 알게 됐다. 이 경우는 Settings(시스템 환경설정) - Privacy & Security(보안 및 개인 정보 보호) - Files & Folders(파일 및 폴더)와 Full Dist Access(전체 디스크 접근)에서 nginx에게 접근 권한을 허용해줘야 한다!
이렇게 설정해주고 nginx를 다시 실행했더니 드디어 test.domain.com/test/
에 접근이 가능해졌다! 만세!