웹 서버
학습 개요
웹 서버의 동작 원리를 알아보고 리눅스 환경에서 웹 서버 구성을 위하여 널리 사용죄는 APM을 학습.
Apache 웹 서버, PHP 처리기, MySQL을 각각 설치하고 Apache의 설정 방법을 알아봄.학습 목표
- 웹 서버의 동작 방법과 HTTP 프로토콜 설명 가능.
- Apache 웹 서버, PHP 처리기, MySQL 설치 가능.
- Apache 웹 서버의 주요 설정 항목을 설명 가능.
- APM을 이용하여 웹 서비스 제공 가능.
웹서버
- 클라이언트의 HTTP 요청을 처리하여 웹 페이지의 내용을 클라이언트에게 제공하는 서버 프로그램.
- 웹 페이지를 요청하고 보여주는 웹 브라우져는 클라이언트.
- 서버와 클라이언트는 네트워크를 통해 연결 되므로, 웹 서버와 웹 브라우져 사이에 통신을 위한 프로토콜이 필요함.
- 많이 사용되는 웹 서버 - Apache, ISS Nginx 등.
- W3Techs에서 조사된 시장 점유율.
- Apache 48.4%, Nginx 35.6%, IIS 10.7%
- W3Techs에서 조사된 시장 점유율.
HTTP (HyperText Trasfer Protocol)
- 웹 환경에서 서버와 클라이언트 간에 정보를 주고 받기 위한 프로토콜.
- 요청(request)와 응답(response) 프로토콜.
- 클라이언트가 서버에 특정 자원에 대한 요청(GET, POST 등)을 보냄.
- 클라이언트의 요청에 대해 서버가 응답.
- 응답코드 (200 OK, 404 Not Found 등)와 함께 요청한 자원을 전달.
- 대부분 TCP를 사용하며, 포트(port)번호는 일반적으로 80번을 사용함.
APM (Apache, PHP, MySQL)
- Apache HTTP 서버, PHP 스크립트 처리기, MySQL DB 관리시스템을 지칭
- 동적으로 웹 페이지를 만들고, 웹 페이지 생성에 필요한 데이터를 관리할 수 있는 프로그램이 필요함
- 모두 공개 소프트웨어로 웹 사이트 구축을 위한 비용절감의 방법으로 많이 사용.
- 리눅스 시스템에서 많이 사용됨. LAMP(Linux, Apache, MySQL, PHP)이라고도 함.
APM을 이용하는 웹 서버의 동작 과정
- 클라이언트가 웹 문서를 Apache 웹 서버에 요청.
- 웹 문서 내에 있는 PHP 스크립트가 PHP 모듈 등에 의해 처리되어 HTML 문서가 생성되어 클라이언트에게 응답.
- PHP 스크립트 처리 과정 중 MySQL DB에 접근하여, query를 수행.
PHP (HyperText Processor) 스크립트 처리기
- PHP는 동적으로 웹 페이지를 생성할 수 있는 스크립트 언어.
- 서버에서 실행되며 HTML 파일에 포함하여 사용함.
- PHP 대신 다른 스크립트 언어인 Perl이나 Python을 이용하여 APM 구축 가능.
MySQL DBMS
- DBMS로 C/C++, C#, Java, PHP 등의 언어에서 사용할 수 있도록 API를 제공.
- PHP에서 MySQL을 사용하려면 'php-mysql' 패키지를 설치해야 함.
APM 설치
- 대부분의 리눅스 배포판이 APM을 포함하고 있음.
- 다음 명령으로 설치 여부 확인 가능.
- yum list installed | grep httpd
- yum list installed | grep mysql
- yum list installed | grep php
- httpd는 Apache HTTP 서버 프로그램 이름으로 http deamon을 의미.
- 설치 순서
- 최신 파일을 이용한 설치 명령.
yum -y install httpd
- Apache update 명령.
yum -y update httpd
- Apache 설치 후 MySQL 설치 명령.
yum -y install mysql mysql-server
- MySQL 설치 후, PHP 설치.
yum -y install php
yum -y install php-mysql
- 최신 파일을 이용한 설치 명령.
- 데스트톱 메뉴의 패키지 관리도구(시스템 > 관리 > 소프트웨어 추가/제거)에서도 설치 가능.
Apache, PHP 설치 확인 방법
- 방화벽 설정(tcp 80 port)와 httpd 실행 여부 확인.
- Apche
- 브라우져에서
http://localhost
접속.
- 브라우져에서
- PHP
- /var/www/html/test.php
<?php phpinfo(); ?>
- 브라우져에서
http://localhost/test.php
접속.
Apache 설정
- Apache 설정 파일은 /etx/httpd/conf/httpd.conf
- 전역의 기본 설정을 가지며 1000 라인이 넘음.
- /etc/httpd/conf.d 디렉토리도 기타 설정 파일이 위치함.
- 설정을 변경한 후에는 Apache 서버를 다시 시작해야 적용됨.
- service httpd restart
- 현재 런레벨에서 서비스 활성화 방법.
- 부팅 시 자동으로 서비스를 시작하게 하는 방법.
- chkconfig httpd on
- 요청과 응답
- /var/www/html/ 디렉토리에 index.html 파일 생성.
http://localhot/index.html
요청하여 확인.
Apache 설정 파일에서 지시어 목록 참고
- 참고
- 이후의 내용은 httpd.conf 파일에서 사용되는 지시어를 설명함.
ServerTokens
- 서버의 응답 헤더 설정
value | ex |
---|---|
Prod | Server: Apache |
Major | Server: Apache/2 |
Minor | Server: Apache/2.0 |
Min | Server: Apache/2.0.41 |
OS | Server: Apache/2.0.41 (Unix) |
Full | Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 |
ServerRoot
- Apache 서버가 설치된 디렉토리.
- 서버가 설정 파일이나 로그 파일을 보관하는 디렉토리.
- 설정 파일에서 파일을 참조할 때의 기준 디렉토리.
- 일반적으로 기본값 /etc/httpd
Timeout
- 클라이언트로부터 수신을 기다리는 최대 대기 시간을 초 단위로 설정.
- 설정값이 60인 경우.
- 서버는 60초 이내에 클라이언트로 부터 TCP 패킷을 모두 받거나,
클라이언트에 데이터를 보낸 후 60초 이내에 클라이언트로부터 확인(ACK) 패킷을 받아야 함.
- 서버는 60초 이내에 클라이언트로 부터 TCP 패킷을 모두 받거나,
PidFile
- 주 서버 프로세스로 httpd의 PID가 기록되는 파일을 설정함.
- run/httpd.pid로 설정된 경우
- 서버가 실행 중이라면, 해당 파일에 httpd의 PID로 31038이 저장되어 있음.
KeepAlive
- 클라이언트가 한 번 연결로 서버와 여러 번의 요청과 응답을 주고받을 수 있도록 지속적인 연결을 허용할지 여부를 On 또는 Off 로 설정.
- HTTP/1.0 까지는 한 쌍의 요청과 응답이 끝나면 TCP 연결이 끊어짐.
- HTTP/1.1 ~ 이후에는 KeepAlive를 On으로 설정하면 클라이언트가 한 번의 연결로 서버에 여러 번 요청후 응답 받을 수 있음.
MaxKeepAliveRequests
- KeepAlive가 On으로 설정된 경우, 클라이언트가 지속적인 연결을 유지하며 보낼 수 있는 최대 요청의 수를 설정.
- 서버의 성능을 극대화 시키기 위해서 큰 값으로 설정함.
- 기본값은 100, 0으로 설정하면 제한 없이 요청 받음.
KeepAliveTimeout
- 연결을 끊지 않고 다음 요청을 대기하는 최대 시간
- KeepAlive가 On으로 설정된 경우, 연결을 유지하면서 클라이언트의 다음 요청을 기다리는 최대 대기 시간을 초 단위로 설정.
- 15로 설정하면 15초 동안 클라이언트로부터 요청을 기다림.
- 큰 값으로 설정하는 경우에는 서버 성능에 문제가 발생될 수 있음.
StartServers
- 초기에 생성하는 자식 서버 프로세스의 수를 설정.
- 8로 설정된 경우, PidFile에서 PID가 같은 httpd가 8개의 자식 프로세스를 초기에 생성함.
MinSpareServers & MaxSpareServers
- 유휴 자식 서버 프로세스 수의 최솟값, 최댓값 설정
- 유휴 자식 프로세스 수가 부족하거나 초과시, 자식 서버 프로세스를 생성하거나 종료시키는 기준이 됨.
- 최솟값이 5, 최댓값이 20으로 설정된 서버
- 유휴 자식 서버 프로세스가 5라면, 5개를 유지하기 위해 클라이언트의 요청이 있을 때 자식 서버 프로세스를 계속 생헝.
- 유휴 자식 서버 프로세스가 20이라면, 20개를 유지하기 위해 클라이언트의 요청이 끝날 때 자식 서버 프로세스를 계속 삭제.
MaxClients
- 동시에 접속 가능한 클라이언트 수의 최댓값.
MaxRequestsPerChild
- 1개 자식 서버 프로세스가 종료 전까지 처리할 수 있는 최대 요청 수.
- 설정 값이 4000인 경우.
- 자식 서버 프로세스가 처리한 요청 수가 4000을 초과하면 해당 자식 서버 프로세스를 종료함.
- 설정 값이 0인 경우는 요청 수에 제한이 없음을 의미.
Listen
- 서버가 사용할 TCP 포트 번호 설정.
- 일반적으로 80
- port 또는 ip:port를 지정함.
- ex )
- 모든 네트워크 인터페이스로부터 오는 80번 포트에 대한 요청을 받아들이며 다른 포트를 추가지정 가능.
Listen 80 Listen 8080
- 특정 IP만 허용하는 방법
Listen x.x.x.x:80
LoadModule
- 웹 서버의 기능을 확장시키는 DSO(Dynamic Shared Object)모듈을 설정
- Apache 웹 서버의 특징 -> 모듈화.
- 모듈을 추가로 로드함으로 새로운 기능 추가 가능.
- 설정 값 형식
- 모듈 이름을 먼저 쓰고, 그 다음 해당하는 파일명을 씀.
- 여러 모듈을 로드하려면 다음과 같이 각각의 줄로 설정.
LoadModule a_module a_module_dir LoadModule b_module b_module_dir LoadModule c_module c_module_dir
User와 Group
- Apache 서버의 실행에 사용되는 사용자와 그룹.
- 서버 프로세스의 사용자와 그룹을 지정함.
- 서버는 초기에 root 계정으로 실행되나, 일단 실행 된 후에는 낮은 권한의 계정으로 실행되어야 함.
- 기본적으로 사용자와 그룹 이름은 apache.
- 서버 프로세스가 root 권한으로 실행되면, 악의적인 클라이언트에 의한 요청이 root 권한으로 실행되어 보안문제가 발생함.
- User와 Group을 root로 지정하면 안됨.
ServerAdmin
- 웹 서버 관리자의 이메일 주소를 설정.
- 서버에 문제가 생겼을 때, 클라이언트로 보내지는 오류 메세지에 포함되는 메일 주소.
DocumentRoot
- 웹 서버가 웹 콘텐츠를 저장하는 루트 디렉토리.
- 사용자 요청에 의해 웹 서버가 웹 페이지를 찾을 때의 루트 디렉토리
- 기본 설정 값은 /var/www/html
- http://localhost/test.html에 대한 웹 페이지 요청은 서버 컴퓨터에서 /var/www/html/test.html 파일에 대한 요청임.
UserDir
- 클라이언트 요청에서 ~ userid가 있는 경우의 처리 여부를 설정.
- 루트 사용자 이외의 다른 사용자가 자신의 계정으로 홈페이지를 만들 때의 기본 디렉토리를 설정.
- 설정 값이 public_html 인 경우.
- http://localhost/~jeaha/hello.html로 요청할 때,
~jeaha/public_html/hello.html 파일로 연결 됨.
- http://localhost/~jeaha/hello.html로 요청할 때,
- 설정 값이 disabeld로 설정된 경우.
- 사용자 계정의 홈 디렉토리로 변환하지 않음.
- public_html로 설정하였으나 해당 사용자의 웹 페이지가 열리지 않는다면, 사용자 디렉토리의 mod를 확인 해야 함.
- 홈 디렉토리인 ~ userid는 711, ~ userid/public_html음 755여야 함.
- 설정이 잘몬 될 경우 403 에러가 남.
DirectoryIndex
- 클라이언트가 디렉토리를 요청한 경우, 기본으로 사용할 웹 페이지의 파일 이름을 설정.
- 일반적으로 index.html을 설정.
- http://localhost/docs/를 요청한 경우.
- /var/www/html/docs/index.html 파일이 있으면 이것을 보냄.
- 없다면 디렉토리 목록을 보여줌.
ErrorLog
- 웹 서버의 에러 로그가 기록될 파일을 설정
- 설정 값이 logs/error_log인 경우, ServerRoot의 설정 값에 더해져서 /etc/httpd/logs/error_log 파일에 에러 로그가 기록 됨.
- /var/log/httpd/access_log 파일에는 엑세스 정보가 기록 됨.
AddLanguage
- 웹 서버를 통해 서비스되는 웹 문서의 지원 언어를 설정
- 웹 서버가 다국어 페이지를 제공하는 경우.
- 한국어를 추가하는 경우 ko .ko를 설정 값으로 추가하면 됨.
- 언어와 파일 확장자를 표시.
- 언어를 추가할 때마다 다음과 같이 새로운 줄로 설정.
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage ko .ko
AddDefaultCharset
- 웹 서버에서 제공하는 응답 문서의 Content-Type이 text/plain 또는 text/html인 경우 기본 문자 집합을 설정.
- 설정 값이 UTF-8인 경우, 응답 헤더에
Content-Type:text/html;charset=UTF-8
과 같은 것이 만들어 짐.
- 설정 값이 UTF-8인 경우, 응답 헤더에
- 기본 문자 집합을 설정하지 않으려면 설정 값을 Off로 지정.
APM을 이용한 웹 서비스
PHP 설정
- /etc/httpd/conf.d/php.conf
- APM과 관련한 PHP 스크립트 처리기의 설정 파일
- php.conf의 설정들은 Apache 서버의 설정에 추가되는 것들로, httpd.conf에서 사용하는 설정명을 따름.
- PHP 자체의 기본 설정 파일로 /etc/php.ini가 존재함.
MySQL 설정
- /etc/my.cnf
- MySQL 설정 파일
- datadir=... : 데이터 디렉토리 설정
- socket=... : 사용할 소켓 파일 설정
- user=... : 사용할 계정 설정
- MySQL 설정 파일
- /usr/share/mysql
- 시스템 규모에 따른 다양한 설정 파일 제공됨.
- 추가 설정
- mysql_secure_installation 을 실행하여 다음 설정 진행.
- root 계정의 비밀번호 설정.
- 익명 사용자 허용 여부, root 계정의 원격 로그인 허용.
- test Data의 제거 여부.
728x90
반응형
'OS > Linux' 카테고리의 다른 글
[Linux etc tip] 접속 로그 분석 하기 (0) | 2021.02.15 |
---|---|
[Linux etc tip] 대상 서버의 포트가 열려있는지 확인하는 방법 (0) | 2021.01.05 |
[Linux] 원격 관리 (0) | 2020.12.13 |
[Linnux] 네트워크 설정 및 점검 (0) | 2020.12.05 |
[Linux] 쉘 스크립트 -2 (0) | 2020.11.08 |