서버가 서비스가 원할하게 되지 않을 경우
먼저 저장공간을 확인# df -ThFilesystem Type Size Used Avail Use% Mounted ondevtmpfs devtmpfs 4.0M 0 4.0M 0% /devtmpfs tmpfs 1.8G 0 1.8G 0% /dev/shmtmpfs tmpfs 732M 75M 657M 11% /run/dev/vda5 xfs 49G 4.7G 45G 10% //d
먼저 저장공간을 확인
# df -ThFilesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 732M 75M 657M 11% /run
/dev/vda5 xfs 49G 4.7G 45G 10% /
/dev/vda2 xfs 936M 416M 521M 45% /boot
/dev/vda1 vfat 99M 7.1M 92M 8% /boot/efi
tmpfs tmpfs 366M 4.0K 366M 1% /run/user/1001
tmpfs tmpfs 366M 4.0K 366M 1% /run/user/0
저장공간이 충분하지 않을 경우
오래된 로그 파일을 삭제하거나 필요없는 백업 본을 삭제
# top -c명령어를 통해 cpu mem의 사용률과 사용 중인 프로세스를 확인할 수 있음
만약 특정 프로세스의 cpu나 mem의 사용률이 높을 때 외부의 공격 의심
예를 들어 mysql과 nginx를 사용하고 있는 서버에 부하가 왔을 때
nginx를 이용해 웹서비스를 하고 있기 때문에 외부에서 들어오려면 nginx를 타고 DB 쪽으로 이동할 수 있는 가능성이 있음
(부하도도 nginx와 mysql이 높았음)
# grep "page=" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10명령어를 통해 웹 서비스에 접속한 IP를 확인
grep "page=" /var/log/nginx/access.log
-> nginx 접근 로그에서 URL 쿼리 스트링에 "page="가 포함된 요청만 불러오기
awk '{print $1}'
-> 로그 한 줄에서 첫 번째 필드만 출력(IP만 출력하게 설정)
sort
-> 사전순 정렬
uniq -c
-> 동일한 IP가 몇 번 나왔는지 숫자로 출력
ex) 532 123.45.67.89
uniq IP
sort -nr
-> 숫자로 정렬 및 내림차순 정렬
head -n 10
-> 상위 10개만 출력
위 명령어는 과거 로그를 집계해서 보여주는 명령어
# tail -F /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr위 명령어처럼 -F 옵션을 넣어 실시간을 볼 수 있음
부하를 줄 정도로 많은 접속 내역이 있는 IP를 직접 차단하거나 해외에 서비스를 하지 않을 경우 해외 접속을 차단하는 방법도 있음
오래된 OS를 쓰는 서버에서 apache가 실행이 안되는 경우(CentOS 5 or CentOS 6)
원격 접속을 할 때 ssh 인증 방식이 달라 접속이 안될 경우가 있음
# ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa root@IP위 명령어를 통해 오래된 ssh 방식을 사용해 접속할 수 있음
먼저 데몬이 잘 실행되고 있는지 확인
보통 # systemctl status httpd
를 입력하여 상태 확인을 할 수 있지만
# service httpd status를 입력하여 상태 확인을 할 수 있음
만약 데몬이 잘 실행되고 있을 경우
서버의 저장공간이 부족하여 데몬이 작동하지 않을 수 있기 때문에
# df -Th를 입력하여 내부 용량의 상태를 확인한 후 저장 공간이 부족할 경우 로그 파일이나 불필요한 백업본을 삭제
# top -c를 통해 CPU나 Memory의 사용량을 확인
모두 정상적으로 보인다면 log 파일을 확인
/var/log/httpd에 로그 파일이 존재하기 때문에
(소스 설치의 경우 /usr 디렉토리 안에 있을 수도 있음)
# ll로 수정된 일자를 확인하여 오늘 수정된 날짜의 파일 확인
만약 로그 파일에
[error] (28)No space left on device: Cannot create SSLMutex Configuration Failed
가 뜬다면
# ipcs -s | grep nobody | perl -e 'while (<STDIN>) { @a=split(/s+/); print `ipcrm sem $a[1]`}'로 nobody 유저 소유의 SysV 세마포어를 전부 강제 삭제하여 오류를 해결
-> 세마포어= 프로세스 간 동기화 도구
이후
# service httpd restart로 데몬 재시작