Skip to content
isdnetworks
Go back

처음 세운 리눅스 웹 서버

로컬에서 만든 웹을 서버에 올려야 했다. 서버에 올린다는 것이 무슨 뜻인지도 몰랐다. 파일을 복사하면 되는 줄 알았다.

Table of contents

Open Table of contents

증상 — 파일은 올렸는데 안 보인다

파일을 서버에 복사하고 브라우저에서 주소를 쳤다. 아무것도 안 나왔다. 파일이 있는지 확인해 보니 있었다.

여기서 처음 알았다. 파일이 있다고 웹으로 보이는 것이 아니다. Apache 가 돌고 있어야 하고 httpd.confDocumentRoot 가 어느 폴더를 보여 줄지 정한다.

CentOS 기본값이 /var/www/html 이었다. 내가 복사한 곳은 거기가 아니었다.

안에서는 되고 밖에서는 안 됐다

웹 서버를 띄우고 나서도 접속이 안 됐다.

# 서버 안에서
curl http://localhost     # 잘 된다

# 내 PC에서
curl http://서버주소       # 응답 없음

이 차이를 이해하는 데 반나절이 걸렸다. iptables 가 막고 있었다. 웹은 80번 포트를 쓰는데 그 포트가 닫혀 있었다. 열었더니 됐다.

여기서 배운 것이 하나 더 있다. 서버 안에서 되는지와 밖에서 되는지를 나눠서 확인해야 한다. 둘 다 안 되면 프로그램 문제이고 안에서만 되면 길이 막힌 것이다. 이 구분을 알고 나서 어디를 볼지가 빨리 정해졌다.

권한에서 또 하루가 갔다

접속은 되는데 이번에는 403 화면이 떴다. /var/log/httpd/error_log 를 봤다.

Permission denied

내 계정으로 올린 파일을 웹 서버 프로그램이 못 읽고 있었다. Apache 는 httpd.confUser apache 로 돈다. 내가 올린 파일은 내 계정 소유라 apache 가 못 읽을 수 있다는 것을 그때 알았다.

여기서 부끄러운 짓을 했다. 검색해서 나온 대로 권한을 다 열어 버렸다.

chmod -R 777 /var/www/html

되기는 됐다. 그런데 이 숫자가 무슨 뜻인지 찾아보니 누구나 읽고 쓰고 실행할 수 있게 만든 것이었다. 지금은 사내에서만 닿는 시험 서버라 넘어갔다. 밖에 열 서버에 이렇게 하면 안 될 것 같다.

디렉터리 755 와 파일 644 로 두고 소유자를 apache 로 바꾸는 방법을 봤는데 맞는지는 더 알아봐야 한다.

환경마다 다른 것

로컬에서 되던 것이 서버에서 안 되는 것이 또 있었다. 이미지 업로드인데 Windows 경로가 Java 코드에 박혀 있었다.

경로를 고쳤는데도 안 됐다. 그 폴더가 아예 없었기 때문이다. 코드는 폴더를 만들어 주지 않고 없으면 없는 대로 실패한다.

마지막으로 겪은 것은 재부팅이었다. 서버를 재시작하니 웹이 안 떴다. service httpd start 로 손수 띄워 놔서였다. chkconfig httpd on 을 해야 부팅할 때 뜬다.

지금 돌고 있다는 것과 다시 켜도 돈다는 것은 다른 얘기였다. 이 몇 가지를 겪고 나서 환경마다 다른 것을 따로 적어 두기 시작했다. 경로와 포트와 권한은 내 자리와 서버가 다르다.

정리


Share this post on:

Previous Post
보낼 때와 받을 때가 달랐다
Next Post
한 줄에 너무 많이 담겨 있었다