OS Linux[centos,RHEL]/APM(Apache,Php,Mariadb)=web서버

(1) CentOS 7.4 APM 구축 1단계 apache 구조파악

infra 2021. 10. 26. 17:53

1 .  3-Tier 이란?

 

  • Client: 사용자
  • Web Server: Client의 요청을 처리하는 첫 관문이며, Static 이미지나, was로 전달해주는 역활을 주로 합니다. 
  • WAS: Web Application Server 애플리케이션을 처리한다.
  • DB: 데이터베이스

 

 

2 . os와 커널 버젼을 우선 확인할 것

7.4 CentOS minimal TUI로 설치했기 떄문에 GUI가 되지 않으므로 따로 설정하는 링크는 다음과 같다.

 

오픈소스로 자주 사용하는 list는 다음과 같다.

최근, Apache 보다도 Nginx 를 Proxy활용용도로 더 자주 사용하는 추세이다.

 

  • WEB : Apache, Nginx
  • WAS : Tomcat, JBoss-eap, Wildfly, SpringBoot

 

Apache(1대) & Tomcat(2대) 로드밸런싱 설정

apache 다운로드 : https://httpd.apache.org/download.cgi

apache 메뉴얼 : https://httpd.apache.org/docs/2.4/

 

 

3.아파치의 디렉터리 구조

 

httpd(apache) 디렉터리 구조
/var/www apache 서버가 브라우저 상에서 인식할 데이터가 저장될 디렉터리 /var/www/cgi-bin  :
CGI 파일들이 들어가는 위치
/var/www/html  :
apache 웹 문서들이 들어있는 위치

php와 아파치가 연동되어쓴지 확인하기 위해 /var/www/html/phpinfo.php 를 작성하여 확인했다.

/var/log/httpd /var/log/httpd/access_log
홈페이지 방문자들의 방문기록을 하는 웹로그 파일
  /var/log/httpd/error_log
홈페이지 에러 발생시 기록하는 에러로그 파일
/etc/httpd/conf/ apache 주(main) 설정파일이 들어있는 경로

/etc/httpd/conf/httpd.conf : 아파치 웹 서버의 주 설정 파일
/etc/httpd/conf/magic :
아파치의 mod_mime_magic 모듈을 위한
magic 데이터 파일
/etc/httpd/conf.d/ apache 추가 설정파일이 들어있는 경로
아파치를 실행 할 시 모두 설정파일에 포함되어 읽혀짐.
/etc/httpd/conf.d/mpm.conf
:CentOS7에선 /etc/httpd/conf.modules.d/00-mpm.conf에 확인 가능하다.


1)autoindex.conf : 디렉터리의 내용을 어떻게 로딩할 것인가에 관한 아파치 설정 파일

2)userdir.conf : 사용자 홈 디렉터리에 관한 설정 파일

3)welcome.conf : 초기 기본 페이지에 대한 설정

 

 

 


 

4. 웹서버 설정파일

웹서버 설정파일 /etc/httpd/conf/httpd.conf
31 ServerRoot "/etc/httpd" apache 서버가 사용할 설정 및 로그파일들이 저장될 디렉터리를 지정하는 부분이며, apache 의 최상위 디렉터리
 42 Listen 80 웹서버의 포트번호 를 의미하며, 모든 주소를 사용한다는 의미.

cf) 예시로
192.168.111.249:80
으로 할 경우,
apache서버에서 여러 네트워크 인터페이스가 있을 시 그중 어떤 IP주소로 client의 접속을 받아들일지를 결정한다.

56 Include conf.modules.d/*.conf 설정 파일에 포함될 파일의 경로와 파일이름이 들어있는 위치
66 User apache  > nobody
 67 Group apache  > nobody
web서비스를 작동하는 사용자와 그룹명

apache → nobody 변경
ROOT 권한으로 실행된 아파치의 하위 프로세스를 이곳에서 지정한 사용자로 실행한다는 의미,
기본값으로 apache 또는 daemon으로 되어있지만 보안을 위해 대부분 nobody로 변경하여 이용한다.
 86 ServerAdmin root@localhost 문제 발생시 /var/log/httpd/access_log나 error log가 기록되며 그리고 아파치 서버가 그 기록을 보낼 이메일 주소를 입력해야 받을 수 있고, Postfix 서버와 관련된 내용임.
 95 #ServerName www.example.com:80 apache 서버가 사용할 이름과 포트 설정하기
기본적으로 주석처리 되어있고,
DNS에서 설정된 호스트이름(/etc/resolv.conf)에서 사용하고 그렇지 않을 시엔 IP주소를
대신 사용 가능함.
119 DocumentRoot "/var/www/html" 웹 서버의 홈 디렉터리,apache서버가 인식할 데이터들이 저장될 디렉터리를 지정한다.
131 <Directory "/var/www/html"> 디렉터리 단위로 설정한다. 각 디렉터리마다 granted/denied 등 접근권한을 달리 할 수 있음.
144     Options Indexes FollowSymLinks
151     AllowOverride None
156     Require all granted
현재 디렉터리에서 DirectoryIndex에 지정된 파일이 없다면
파일 목록을 대신 출력하라는 의미




 

163 <IfModule dir_module>
164     DirectoryIndex index.html
165 </IfModule>
client에서 웹서버 접속 시 초기화면으로 보여줄 파일명을 지정한다.
기본적으로 indexhtml이며
이 파일이 없을 경우엔 DirectoryIndex index.php 파일을 찾게 됨.

182 ErrorLog "logs/error_log" 서버에서 에러 발생 시, 기록할 로그파일을 지정하는 곳이며,
/etc/httpd/logs -> /var/log/httpd/ 로 symbolic link연결되어있음
217    
 CustomLog "logs/access_log" combined
방문자들에 대한 기록을 어떤 형식으로 할 것인지에 대한 포맷종류를 설정하는 지시자.
로그포맷 이름 (combined, common, combinedio )

 

5. 로그 확인 및 프로세스 확인

/var/log/httpd/error_log & /var/log/messages 및 httpd 서비스 시작 및 영구적용

Starting The Apache HTTP Server ...

Started The Apache HTTP Server .   //systemctl restart httpd로 재시작으로 인해 /var/log/messages 에 생긴 메시지.

 

PPID(부모 프로세스): 7544 이며, 그 하위 자식 프로세스는 7545, 7546, ~ 7549까지 생겼음.

 

부모 프로세스를 제외한 곳에서는 eventpoll이 있다.

 

 

What is Eventpoll?

epoll stands for event poll and is a Linux specific construct. It allows for a process to monitor multiple file descriptors and get notifications when I/O is possible on them. It allows for both edge-triggered as well as level-triggered notifications.

 

=> eventpoll은 리눅스 특정 구성을 의미하며, Process가 다양한 FD를 감지하고, I/O가 eventpoll에 확인될 때 알려주는 것이다.

 

 

 

PID 7546과 7547 은

0번은 시스템에서 자동으로 잡히는 FD 영역이며, 1번부터 코드에서 열고 있는

socket, pipe, 로그 데이터파일(/var/log/httpd/error_log, /var/log/httpd/access_log)와 eventpoll을 열고 있는 상태이다.

그리고 httpd 데몬을 재시작 하면 기존의 PPID= 7544는 사라지고, 해당 프로세스는 kill된다.

또 새로운 PPID가 발생하면서 8090 PPID가 발생하며 그 하위의 8091,8092~8095 까지 자식 프로세스(PID)가 발생한다.

 

이를 도식화해보면 다음과 같다. MPM 중 prefork 방식이다.

 

[root@centos7 ~]# ps -ef |grep httpd
root       8090      1  0 14:41 ?        00:00:01 /usr/sbin/httpd -DFOREGROUND
apache     8091   8090  0 14:41 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8092   8090  0 14:41 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8093   8090  0 14:41 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8094   8090  0 14:41 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8095   8090  0 14:41 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

root      23683  23570  0 19:35 pts/4    00:00:00 grep --color=auto httpd

구조는 PPID 중 init 프로세스 (PID = 1)을 제외하고 apache의 PID로 구성되어 있다.

apache는 요청을 처리하기 위해서 MPM 방식을 활용한다.

 

MPM 다중 프로세싱 모듈

해당 구조를 파악할 수 있는 경로는 centos 7.0 이상 기준:/etc/httpd/conf.modules.d/00-mpm.conf 에서 확인가능하며,

보통 default로 prefork 라고 되어있음

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so </etc/httpd/conf.modules.d/00-mpm.conf 해당 구성파일에 모듈이 무엇으로 되어있는지 파악 가능>

 

6. prefork vs Worker

또 나머지 MPM 방식은 worker이다. 추후에 설명 달아야겠다.