로컬에서 만든 웹을 서버에 올려야 했다. 서버에 올린다는 것이 무슨 뜻인지도 몰랐다. 파일을 복사하면 되는 줄 알았다.
Table of contents
Open Table of contents
증상 — 파일은 올렸는데 안 보인다
파일을 서버에 복사하고 브라우저에서 주소를 쳤다. 아무것도 안 나왔다. 파일이 있는지 확인해 보니 있었다.
여기서 처음 알았다. 파일이 있다고 웹으로 보이는 것이 아니다. Apache 가 돌고 있어야 하고 httpd.conf 의 DocumentRoot 가 어느 폴더를 보여 줄지 정한다.
CentOS 기본값이 /var/www/html 이었다. 내가 복사한 곳은 거기가 아니었다.
안에서는 되고 밖에서는 안 됐다
웹 서버를 띄우고 나서도 접속이 안 됐다.
# 서버 안에서
curl http://localhost # 잘 된다
# 내 PC에서
curl http://서버주소 # 응답 없음
이 차이를 이해하는 데 반나절이 걸렸다. iptables 가 막고 있었다. 웹은 80번 포트를 쓰는데 그 포트가 닫혀 있었다. 열었더니 됐다.
여기서 배운 것이 하나 더 있다. 서버 안에서 되는지와 밖에서 되는지를 나눠서 확인해야 한다. 둘 다 안 되면 프로그램 문제이고 안에서만 되면 길이 막힌 것이다. 이 구분을 알고 나서 어디를 볼지가 빨리 정해졌다.
권한에서 또 하루가 갔다
접속은 되는데 이번에는 403 화면이 떴다. /var/log/httpd/error_log 를 봤다.
Permission denied
내 계정으로 올린 파일을 웹 서버 프로그램이 못 읽고 있었다. Apache 는 httpd.conf 의 User apache 로 돈다. 내가 올린 파일은 내 계정 소유라 apache 가 못 읽을 수 있다는 것을 그때 알았다.
여기서 부끄러운 짓을 했다. 검색해서 나온 대로 권한을 다 열어 버렸다.
chmod -R 777 /var/www/html
되기는 됐다. 그런데 이 숫자가 무슨 뜻인지 찾아보니 누구나 읽고 쓰고 실행할 수 있게 만든 것이었다. 지금은 사내에서만 닿는 시험 서버라 넘어갔다. 밖에 열 서버에 이렇게 하면 안 될 것 같다.
디렉터리 755 와 파일 644 로 두고 소유자를 apache 로 바꾸는 방법을 봤는데 맞는지는 더 알아봐야 한다.
환경마다 다른 것
로컬에서 되던 것이 서버에서 안 되는 것이 또 있었다. 이미지 업로드인데 Windows 경로가 Java 코드에 박혀 있었다.
경로를 고쳤는데도 안 됐다. 그 폴더가 아예 없었기 때문이다. 코드는 폴더를 만들어 주지 않고 없으면 없는 대로 실패한다.
마지막으로 겪은 것은 재부팅이었다. 서버를 재시작하니 웹이 안 떴다. service httpd start 로 손수 띄워 놔서였다. chkconfig httpd on 을 해야 부팅할 때 뜬다.
지금 돌고 있다는 것과 다시 켜도 돈다는 것은 다른 얘기였다. 이 몇 가지를 겪고 나서 환경마다 다른 것을 따로 적어 두기 시작했다. 경로와 포트와 권한은 내 자리와 서버가 다르다.
정리
- 파일이 있다고 웹으로 보이는 것이 아니다
- Apache 의
DocumentRoot가 어느 폴더를 보여 줄지 정한다 - 안에서 되는지와 밖에서 되는지를 나눠서 확인한다
- 둘 다 안 되면 프로그램 문제이고 안에서만 되면 길이 막힌 것이다
- Apache 는
User apache로 돌아서 내가 올린 파일을 못 읽을 수 있다 chmod -R 777로 해결하지 않는다. 무슨 뜻인지부터 알아봐야겠다- 코드는 폴더를 만들어 주지 않는다. 없으면 없는 대로 실패한다
chkconfig를 안 걸면 지금 돌아도 재부팅 뒤에는 안 뜬다- 환경마다 다른 것을 적어 둔다. 잊으면 매번 같은 데서 막힌다