DAY_34 MPM, Nginx

2021. 2. 10. 18:16

체크리스트 

● 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

BELATED ARTICLES

more