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 67 Group |
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. 로그 확인 및 프로세스 확인
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이다. 추후에 설명 달아야겠다.