DAY_34 MPM, Nginx
체크리스트
● CGI 란 무엇인가 ?
- Common Gateway Interface로 웹서버와 클라이언트간의 정보를
주고 받을때 사용하는 인터페이스, 규약이다.
● 아파치 웹서버의 지시어에 대하여 답하시오.
ScriptAlias : CGI를 사용하는 지시어
Alias : 다른 경로의 디렉터리를 현재 디렉터리에 붙이는 지시어
Files : 파일의 접근을 제어하는 지시어
FilesMatch : Files를 묶을 수 있는것, 정규식을 사용하여 파일 접근을 제어
ErrorDocument : 에러메시지를 반응할 수 있는 지시어
Include : 설정파일을 불러들이는 지시어
IncludeOptional : Include 지시어와 동일하지만 에러가 발생되지 않는 지시어
StartServers : 자식프로세스의 개수
MinSpareServers : 최소 프로세스의 개수
MaxSpareServers : 최대 프로세스의 개수
ServerLimit : 자식프로세스의 제한 수
MaxClients : 클라이언트에 응답하는 개수
MaxRequestsPerChild : 클라이언트의 요청 개수를 제한하는 값 (0 무한대)
● CGI 프로그램을 이용한 프로그램 작성하는 규칙은 무엇인가 ?
- httpd.conf 설정파일에서 /var/www/cgi-bin 디렉터리에 관해서
granted가 되어있어야 접근 할 수 있다.
- 클라이언트가 접근시 Content-type 을 먼저보낸다.
● gcc-c++ 패키지는 어떤 패키지인가 ?
g++ (gnu c++)
● 웹페이지에서 index.html 을 vi로 수정하고 있을 때의 문제점은 무엇인가 ?
- 자동적으로 스왑 파일이 생성된다.
- 이 스왑파일은 저장되기 전의 정보를 가지고 있고 이 정보중에 DB정보 혹은
웹 서버만 해석할 수 있는 중요한 정보가 담겨져 있으면 이를 웹 브라우저에
치면 그대로 정보가 보이게 된다.
● Files 지시어로 index.html 파일의 스왑파일을 접근할 수 없도록 설정하는 방법은 무엇인가 ?
<Files "*.sw?">
Required all denied
</Files>
● ErrorDocument 지시어를 이용해서 403 에러일 때 에러 출력 종류 3가지는 무엇인가 ?
단순 텍스트 에러 출력
로컬 서버로 리다이렉션(방향 전환)
리모트 서버로 리다이렉션(방향 전환)
● 아파치 웹서버에서 MPM이란 무엇인가 ?
다중처리 모듈 (Multi-Processing Module)로 접근하는 클라이언트에 대해서 어떻게 반응할지에 대한 방법이다. 기본값은 prefork MPM이다. 참고 : https://httpd.apache.org/docs/2.4/ko/mpm.html
/etc/httpd/conf.modules.d/00-mpm.conf 설정파일에서 변경하면 된다.
● 아파치 웹서버에서 MPM의 3가지 방식은 무엇인가 ?
prefork 방식 : 자식 프로세스를 미리 fork() 해서 클라이언트를 기다리는 방식
worker 방식 : 프로세스당 여러개의 쓰레드가 연결되는 멀티 쓰레드 방식
event 방식 : 아파치 버전 2.4에서 추가된 기능으로 worker 방식을 기반으로 한다.
● C 소스 파일을 컴파일 시 디버깅을 할 수 있는 옵션은 무엇인가 ?
- gcc -g -o 생성할 파일명 컴파일할 파일명
● /etc/vimrc 파일과 ~/.vimrc 파일은 무엇인가 ?
/etc/vimrc : vim의 전역 설정 파일
~/.vimrc : vim의 사용자 설정 파일
● 컴파일이란 무엇인가 ?
- 사람이 작성한 코드를 기계가 받아드릴 수 있도록 해석하고 번역하는 작업이다.
● 디스어셈블이란 무엇인가 ?
컴파일된 바이너리 파일의 기계어를 어셈블리어로 변환하는 기술이다.
어셈블리어 파일을 이용하면 소스코드를 거의 복구 할 수 있다. 이것을 위해서 난독화 기술을 사용한다.
● gdb란 무엇인가 ?
- 리눅스용 바이너리 파일을 분석하는 프로그램
● gdb1.c 소스파일을 gdb1 실행파일을 32bit 로 컴파일하기 위한 옵션은 무엇인가 ?
- gcc -m32 -o gdb1 gdb1.c
● gdb1을 gdb로 분석할 때 main() 함수를 디스어셈블하는 명령어는 무엇인가 ?
- disas main
● main() 함수를 디스어셈블할 때 사용하는 3가지 방법은 무엇인가 ?
disas main
disas /m main
disas /r main
● gdb 에서 사용하는 명령어를 답하시오
디스어셈블 : disas
프로그램 실행 : r
소스 보기 : l
쉘 실행 : shell
BP 설정 : b
다음 명령어 실행 : n
메모리 조사 : X
끝까지 실행 : c
실습 > MPM 전환
1. prefork방식 사용하기
설정 파일 : /etc/httpd/conf.modules.d
기본적으로 apache 설치시 아무것도 적지 않으면 prefork 방식으로 설치된다.
# httpd -V

2. php-fpm 설치
MPM 방식을 worker,event 방식을 사용하면 php가 인식되지 않기 때문에
php를 사용하기 위해서는 php-fpm을 설치한다.
php-fpm은 PHP FastCGI Process Manager의 약자로 FastCGI는 CGI보다 더 빠른 처리를 말한다.
vi 에서 php-fpm 설정파일을 열 때 :set ft=dosini 를 설정하고 연다.
/etc/php-fpm.conf : php-fpm 설정파일
/etc/php-fpm.d/www.conf : php-fpm 설정파일
php-fpm을 설치하고 php-fpm을 실행한다.
# yum -y install php-fpm
# systemctl start php-fpm
# systemctl enable php-fpm
# netstat -nltp | grep fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9395/php-fpm: maste

# iptables -A INPUT -i lo -j ACCEPT
# ps aux | grep php-fpm
php.conf 에서 SetHandler를 수정한다.
# vi /etc/httpd/conf.d/php.conf
<FilesMatch (\.php|\.html)$>
#SetHandler application/x-httpd-php
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
php-fpm을 설치하면 9000번 포트가 열리게 되는데 만약 9000번 포트를 사용하고 있다면 이 포트번호를 수정해야한다.
# vi /etc/php-fpm.d/www.conf 에서 수정할 수 있다.

3. MPM worker 방식으로 사용하기
php-fpm 설치해주기
# yum -y instatll php-fpm
php-fpm 시작해주기
# systemclt start php-fpm
php-fpm enable로 바꾸기
# systemctl enable php-fpm
php.conf 수정해주기
# vi /etc/httpd/conf.d/php.conf

worker 방식으로 사용하기 위해서 모듈 설정 바꾸기
# vi /etc/httpd/conf.modules.d/00-mpm.conf
-- /etc/httpd/conf.modules.d/00-mpm.conf --
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
-- /etc/httpd/conf.modules.d/00-mpm.conf --
# systemctl restart httpd
# httpd -V

4. MPM event 방식 사용해보기
event 방식도 마찬가지로 php.conf 파일을 수정하고
# vi /etc/httpd/conf.modules.d/00-mpm.conf
-- /etc/httpd/conf.modules.d/00-mpm.conf --
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so
-- /etc/httpd/conf.modules.d/00-mpm.conf --
# systemctl restart httpd
# httpd -V

미션 > Nginx 웹서버를 설치해서 phpinfo 함수를 출력해라
---설치 순서---
1. Nginx를 설치하기
2. php 설치하기
3. Nginx와 php를 연동하기
-----------------
1. Nginx를 설치하기
우선 yum 저장소에는 nginx가 없기 때문에 따로 nginx.repo 파일을 생성해야한다.
# cd /etc/yum/repos.d
# vi nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

아래와 같이 yum nginx를 시작했을때 이쪽으로 와서 설치하게 도와준다.
# yum -y install nginx
기존 80번 포트를 사용하기 싫다면 81번 포트를 열고 이를 INPUT과 OUTPUT에 설정한다.
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --dport 80 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
그리고 ngnix 설정파일을 열어 81번 포트로 설정한다.
[root@localhost ~]# systemctl enable nginx
[root@localhost ~]# systemctl start nginx
2. php설치하기
- php 7. 대로 설치를 진행하면 php-fpm도 설정이 된다. (정확한지는 모르겠음)
wget을 이용한다.
# cd /tmp/
# wget -q http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# wget –q https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
# yum --enablerepo=remi-php71 install php php-mysql php-fpm php-mbstring php-xml
php 버전을 확인한다.
# php -v
3. nginx와 php연동
# vi /etc/php-fpm.d/www.conf
수정
user = apache → user = nginx
group = apache → group = nginx

주석제거
cgi.fix_pathinfo = 1 → cgi.fix_pathinfo = 0
allow_url_fopen = On → allow_url_fopen = Off
expose_php = On → expose_php = Off
display_errors = Off
# vi /etc/nginx/conf.d/default.conf
사용할 포트를 지정해주고 index.php를 넣어주고
astcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 추가
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 주석 처리
→
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

php-fpm과 nginx 서비스 재실행
# service php-fpm restart
# service nginx restart
테스트용 phpinfo() 출력
# cd /usr/share/nginx/html
# vi index.php
<?php
phpinfo();
?>
'정보보안(시스템,네트워크) > 리눅스' 카테고리의 다른 글
| DAY_36 DNS (0) | 2021.02.16 |
|---|---|
| DAY_35 DNS 도메인 설정 (0) | 2021.02.15 |
| DAY_33 CGI (0) | 2021.02.09 |
| DAY_32 apache (0) | 2021.02.08 |
| DAY_31 두번째 DB연결해주기 (0) | 2021.02.05 |



