AWS 서버에 nginx 설정 후 403 forbidden 에러 대처하기

일단 AWS EC2 서버를 생성하고 nginx를 설치해보기로 맘먹고 검색을 해봤다. 이미 누군가 매우 잘 정리해놔서 일단 그대로 아무생각 없이 따라 치기 시작!!

http://blog.jidolstar.com/919

내가 위 링크와 다르게 설정한거라곤 php extension 밖에 없다. 나는 많은 extension이 필요 없어서 php54-devel php54-mysql php54-dg 정도만 설치했다.

그리고 실행!! 하지만 뚜둥!!

403 forbidden

아 이거 머지?… 하라는대로 했는데 왜 안되는거야? 했다가 403 forbidden 에러는 사실 권한 설정과 매우 밀접하게 관련되어 있기 때문에 폴더 권한 설정을 한번 점검해봤다. 이전에도 이와 관련된 글을 하나 쓴적이 있다.

곰곰히 생각해보니 내가 다른 설정을 추가한게 있다. 바로 nginx의 문서 root의 위치다! AWS에서 EC2 서버를 생성하면 기본으로 ec2-user 계정을 하나 생성해주는데, 여기에 자신의 계정을 따로 만들어주지 않는이상 대부분 ec2-user 라는 계정을 그대로 사용한다. 나도 귀찮아서 그냥 사용했다. 그래서 nginx의 루트 경로를 /home/ec2-user/www/nginx-root 위치에 생성했다.

여기서 잠깐! 자식에서 부모 폴더까지 권한 정보를 한번에 보자!

403 forbidden 에러가 발생 했을때 분명 www 폴더와 그 하위 폴더 권한이 제대로 됐는데 왜 안되지? 라고 고민하지말고 부모 권한도 점검해야한다. 이때 사용하는 명령이 namei 다.

$> namei -vl nginx-root
f: /home/ec2-user/www/nginx-root
dr-xr-xr-x root     root     /
drwxr-xr-x root     root     home
drwx------ ec2-user ec2-user ec2-user
drwxrwxr-x ec2-user ec2-user app
drwxrwxr-x ec2-user ec2-user www
drwxrwxr-x ec2-user ec2-user nginx-root

위에서 보면 ~/www/nginx-root 경로가 있음을 알 수 있다. EC2로 생성된 계정의 홈 디렉토리의 권한이 700로 되어 있기 때문에 그 하위 자식 폴더가 아무리 755 권한으로 되어 있다한들 접근할수 없다. 그래서 ec2-user 계정의 권한을 바꿀까도 생각했는데 그러면 보안의 구멍이 하나 뚫리는거라.. 그냥 755 권한으로 열려있는 var/www/ 위치로 루트 위치를 변경했다.

요건 그냥 참고

또 하나 알아둬야 할게 있는데 바로 파일 권한이다. 파일 권한은 644 이상이 되어야 forbidden 에러를 피할수있다