본문 바로가기
일상/IT자격증

[리눅스마스터 1급] 3과목 웹 관련 서비스 정리

by YOONAYEON 2025. 3. 2.

웹 관련 서비스

* HTTP프로토콜

  - 웹클라이언트(웹브라우저)와 웹서버 사이에 데이터를 요청 및 전송하기 위한 표준 규약

  - HTTP의 요청 메소드

메소드 설명
GET URL에 필요한 값을 담아 데이터 요청
POST 요청할 내용을 바디에 담아 서버에 전송
PUT 새로운 데이터 저장 또는 기존 정보 갱신
DELETE 웹의 리소스 삭제
HEAD 리소스의 헤더 정보를 요청하며, 서버로부터 본문(body)를 제외한 헤더 정보만 응답
CONNECT 프록시와 같은 중개 서버에 접속할때 사용
TRACE 요청한 리소스가 수신되는 경로 확인
OPTIONS 웹 서버가 제공하는 메소드 확인

 

  - HTTP의 응답코드

상태코드 설명
1xx 조건부 응답, 정보교환
200 오류없이 전송 성공
302 리다이렉션, 웹브라우저가 요청한 URL이 다른 곳에 있다
400 클라이언트의 요청이 잘못됨 (문법오류)
401 요청에 대한 권한이 부족함 (인증실패)
403 리소스에 대한 권한이 없음 (인가실패)
404 존재하지 않은 리소스 요청
405 지정된 방식으로 요청 불가(OPTIONS 내역에 없는 메소드로 요청)
500 서버 오류

 

- HTTP 공통 헤더

항목 설명
Date HTTP 메시지를 생성한 일시로 RFC1123을 따른다
Connection Keep-Alive를 설정할 수 있다
Cache-control no-store: 캐시 저장하지 않음 / no-chache: 서버에 확인 후 캐시 사용
must-revalidate: 만료된 캐시 서버 확인 / public: 공유캐시에 저장
max-age: 캐시 유효기간 명시 / private: 특정 사용자 환경에서만 저장
Content-Type 이미지, 오디오, 텍스트 등 콘텐츠 종류 지정
Content-Encoding 데이터 압축 방식 지정
Content-Length 전송할 데이터(body) 크기 지정

 

- HTTP 요청 헤더

항목 설명
Method, URL, HTTP버전 GET,POST등 요청 메소드, 요청하는 URL, HTTP 버전정보
Accept 웹브라우저 본인이 해석할 수 있는 마임 타입을 서버에 알려줌
If-Modified-Since 지정한 날짜 이후로 변경된 경우만 수신하도록 지정
User-Agent 웹브라우저(웹클라이언트)의 정보 지정
Cookie 웹서버의 요청에 의해 클라이언트에 저장해둔 쿠키를 키,값 쌍으로 전송
Host 대상 서버의 도메인 이름, 포트 정보 포함 가능
Origin 해당 요청이 어느 주소에서 시작되었는지 명시
Referer 이번 요청 이전의 페이지 주소 지정

 

- HTTP 응답 헤더

항목 설명
HTTP버전, 응답코드 HTTP버전정보, HTTP프로토콜에 정의된 응답코드
Server 웹서버의 정보 명시 (ex. Apache/2.2.24)
Location 응답코드 301, 302 리다이렉션의 위치 정보 지정
Set-Cookie Expires:만료일 / Secure: HTTPS에서만 쿠키 유효하도록 사용
HttpOnly: 자바스크립트에서 접근 불가 / Domain: 같은 도메인에서만 사용
Expires 해당 리소스의 유효일시를 지정
Allow 응답코드 405(사용불가 메소드)에서 서버가 제공 가능한 HTTP메서드 지정

 

 

* 주요 웹 서버: Apache(오픈소스 웹 서버), IIS(마이크로 소프트 제공), Nginx(로드밸런스 제공), GWS(구글 제공)

 

* 아파치(Apache) 웹 서버

 - 리눅스, 윈도우, macOS 등 다양한 운영체제에 설치하여 사용할 수 있다.

 - 아파치1.x 는 프로세스 기반으로 동작하여 하나의 사용자 요청을 하나의 프로세스가 담당한다

 - 아파치2.x 는 MPM을 지원하여 프로세스 또는 쓰레드를 이용하여 사용자 요청을 처리 한다.

    prefork: 하나의 프로세스가 하나의 쓰레드를 갖고 실행 중인 프로세스를 복제하여 미리 동작시킨 후 처리

    worker: 하나의 프로세스가 여러 쓰레드를 갖고, 각 쓰레드가 사용자의 요청을 처리

 - 다양한 모듈을 적재하여 사용할 수 있다.

   정적 적재: Static Object방식으로, 필요한 모듈을 아파치 웹 서버와 함께 컴파일하여 웹서버 시작과 동시에 적재

   동적 적재: DSO방식으로, 사용자의 요청이 있을 경우 필요한 모듈을 적재

 - 다양한 서비스 제공을 위해 일반적으로 PHP, MySQL 등을 함께 설치하여 사용한다. (AMP=Apache + Mysql + Php)

 - Apache와 PHP는 'configure → make   make install' 순서로 소스코드를 컴파일 및 설치한다

 - MySQL은 'cmake make install' 순서로 소스코드를 컴파일 및 설치한다

 

* 아파치 웹서버 설치

 $ yum -y install expat-devel  // 명령어로 필요 라이브러리 설치

 $ wget http://~~.tar.bz2    // 명령어로 아파치 웹서버 소스코드 다운로드

 $ tar xvfj httpd-2.4.37.tar.bz2  // 압축 해제

 $ ./configure --prefix=/usr/local/apache --enable-mods-shared=all  // 소스코드 빌드 설정 실행

    --prefix = /usr/local/apache  // 아파치 웹서버의 관련 파일들이 설치될 경로 지정

    --enable-mods-shared = all   // 모든 모듈을 DSO방식으로 설치하도록 구성

    --enable-so                            // DSO기능을 사용, 위 옵션을 이용할 경우 자동으로 포함

    --enable-ssl                            // mod_ssl이 제공하는 SSL/TLS 보안 프로토콜 기능을 사용

 $ make   // 소스코드를 컴파일하여 실행 파일을 만든다

 $make install // prefix로 설정해둔 폴더에 설치된다

 

* MySQL 설치

 $ yum -y install cmake // cmake 설치

 $ wget http://boost라이브러리.tar.gz // MySQL 컴파일에 필요한 boost라이브러리 다운로드

 $ tar xvfz mysql-boost-5.7.28.tar.gz // 압축 해제

 $ yum -y 소스코드 빌드 위한 라이브러리

 $ cd mysql-5.7.28/    // 압축해제한 소스 디렉토리 이동

 $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql    //MySQL파일이 설치될 경로

   -DDEFAULT_CHARSET = utf8    // 문자데이터 인코딩 타입 설정

   -DMYSQL_DATADIR = /usr/local/mysql/data // MySQL의 데이터가 저장되는 경로 지정

   -DDOWNLOAD_BOOST=1

   -DWITH_BOOST = 경로명  // MySQL컴파일 시 필요한 Boost라이브러리 위치 지정

 $ make // 컴파일

 $ make install // 설치

 $ mysqld --initialize //필요한 DB생성

 

* PHP 설치

 $ wget https://www.php.net~.tar.bz2  // php소스코드 준비

 $ tar xvfj php-5.6.31.tar.bz2  // 압축 해제

 $ cd php-5.6.31/                // 압축해제한 소스 디렉터리 이동

 $ ./configure --prefix=/usr/local/php  //configure을 이용하여 환경설정 작업 수행

  --prefix = /usr/local/php      // php파일들이 설치될 경로를 지정

  --with-apxs2                        //아파치에 DSO로 로딩하기 위해 사용하는 apxs의 위치 지정

  --with-mysql                        // MySQL와 연동하기 위한 MySQL의 설치경로 지정

  --with-config-file-path       // php설정파일인 php.ini가 위치할 경로 지정

 $ make

 $ make install

 $ cp ./php.ini-production /usr/local/apache/conf/php.ini  // 아파치 설치 경로에 php.ini를 복사한다

 $ vi /usr/local/apache/conf/httpd.conf  // 아파치 웹서버가 php파일을 인식할 수 있도록 타입 설정

    ...

    AddType application/x-httpd-php .php .php5

 $ apachectl restart  // 아파치 웹서버 재시작

 

* 패키지를 통한 아파치 웹 서버 설치

 - 주요 디렉터리

디렉터리 설명
/var/www/html HTML 등 웹페이지가 저장되는 기본 경로
/var/www/cgi-bin CGI(Common Gateway Interface) 스크립트 파일이 저장된 경로
/var/www/error HTTP에러가 발생할 경우 표시될 메시지 문서가 저장된 경로
/var/www/icons 아파치 웹서버가 사용하는 이미지들이 저장된 경로
/var/log/httpd access_log: 방문자들의 방문 정보 기록 / error_log: 에러발생시 관련 내용 기록
/etc/httpd/conf 아파치 웹서버의 환경설정파일이 저장된 경로 (httpd.conf)
/etc/httpd/conf.d 아파치 웹서버의 추가 설정파일이 저장된 경로
/usr/lib64/httpd/modules 아파치 웹서버가 사용하는 모듈 파일이 저장된 경로
/usr/bin 아파치 웹서버 관련 실행 파일

 

 - 주요 실행 파일

실행 파일명 설명
ab 아파치 벤치마킹 도구
apachectl 아파치 웹서버의 실행, 종료, 재시작을 위한 도구
htpasswd 웹페이지 대상으로 아이디와 암호 생성
htdigest 사용자 인증 파일을 생성 및 업데이트하는 도구
httpd 아파치 웹서버의 데몬 프로그램
logreslove 아파치 웹서버 로그파일에서 IP주소를 호스트명으로 변환하는 도구
retoatelogs 아파치 웹 서버의 로그 로테이트를 위한 도구

 

$ httpd -t httpd.conf  // 환경설정 파일인 httpd.conf의 문법적 오류를 검증한다

$ httpd -f [파일명]  // 특정 환경설정 파일을 지정하여 아파치 데몬을 실행한다

$ httpd -S  // 현재 설정된 가상 호스트 목록을 출력한다

$ httpd -l  // 아파치 웹서버와 함께 컴파일된 모듈 목록 출력한다

$ httpd -M // 로딩된 모든 모듈의 목록을 출력한다 (static, shared)

 

$ apachectl start  // 아파치 데몬을 실행한다

$ apachectl stop  // 아파치 데몬을 중지한다

$ apachectl restart // 아파치 데몬을 재시작한다

$ apachectl configtest  // 환경설정파일 httpd.conf의 문법적 오류를 점검한다

$ apachectl graceful // 현재 연결된 클라이언트의 접속을 유지하면서 httpd.conf를 다시 읽어온다

$ apachectl status  // 웹서버의 상태를 출력한다

 

- 아파치 웹 서버의 주요 설정파일

파일명 설명
httpd.conf 아파치 웹서버의 기본 설정 파일
httpd-mpm.conf MPM 관련 설정 파일
httpd-autoindex.conf 디렉터리 목록의 표시 방법을 설정하는 파일
httpd-userdir.conf 개인 사용자의 홈 디렉터리를 설정하는 파일
httpd-info.conf 아파치 웹서버의 실행 상태 모니터링을 위한 설정 파일
httpd-vhosts.conf 버추얼 호스트를 설정하는 파일
httpd-default.conf 웹 서버의 기본 설정값을 하는 파일
httpd-ssl.conf SSL(Secure Socket Layer) 지원을 위한 설정 파일

 

- /etc/httpd/conf/httpd.conf 파일 의 주요 설정 항목

주요 설정 항목 설명
ServerRoot 아파치 웹서버의 주요 파일들이 저장된 최상위 디렉터리를 절대경로로 지정
기본값: ServerRoot = "/etc/httpd"
Listen 아파치 웹서버가 사용할 TCP 포트 번호 지정
기본값: Listen 80
LoadModule DSO방식으로 로딩할 모듈 지정
User 아파치 실행 데몬의 사용자 권한을 지정
Group 아파치 실행 데몬의 그룹 권한을 지정
ServerAdmin 아파치 웹서버 관리자의 이메일 주소 지정
ServerName 서버의 호스트 이름 지정
DocumentRoot 웹 문서가 저장되는 기본 디렉터리 경로를 지정
DirectoryIndex 웹 디렉터리를 방문할 경우 처음으로 열릴 파일 목록 정의
AccessFilename 각 디렉터리 별 접근제어 등의 추가 설정을 위해 각각 저장하는 설정 파일 지정
ErrorLog 에러로그 파일 위치 지정
LogLevel 에어로그를 기록하는 수준 결정
DefaultType 별도의 타입을 등록하지 않은 콘텐츠에 대한 기본 MIME 타입 지정
AddType 파일 확장자에 대한 MIME을 등록하여 해당 파일에 대한 처리방식 지정
Redirect 특정 URL로 접근 시 다른 URL 경로로 이동하도록 설정
AddEncoding 특정 웹브라우저를 대상으로 압축된 형식으로 데이터를 전송할 수 있도록 설정
LanuagePriority 웹페이지 언어를 표시할 때 우선순위 지정
ex) LanguagePriority en ca ca
AddCharset 웹페이지 해석 시 사용하는 문자집합을 설정
<Directory 디렉터리명>
~ </Directory>
지정한 디렉터리에 대한 권한, 제어방식, 옵션 등을 지정
Options : 지정한 디렉터리 모든 하위 파일들에 대한 접근 제어 방식 설정
AllowOverride: 접근통제파일의 사용 방식 등을 설정
Allow/Deny from: 지정한 호스트 or IP로부터의 접속을 허용/금지
Order: 접근 제어 방식의 접근 필터링하는 순서를 지정
<FileMatch 파일명형식>
~ </FileMatch>
지정한 파일명 형식을 갖는 파일에 대하여 접근 통제 등 설정
ex) <FileMath "^\.ht"> Require all denided </FileMatch>
     .ht로 시작하는 파일들은 접근 할 수 없음
<IfModule 모듈명>
~ </IfModule>
지정한 모듈에 대한 세부 동작 옵션을 설정

 

- LogLevel의 세부항목 (= /etc/rsyslog.conf 설정 내의 우선순위와 동일)

(최하위 레벨) ↓ debug < info < notice < warn < error < crit < alert < emerg  ↑ (최상위 레벨의 매우 위험)

 

- httpd-default.conf 의 주요 설정 항목

설정 항목 설명
Timeout 클라이언트의 요청에 대한 응답 제한 시간을 초단위로 지정
KeppAlive KeepAlive 기능 설정 (특정 시간동안 세션 유지)
MaxKeppAliveRequests KeepAlive가 On으로 설정된 경우, 처리할 수 있는 최대 요청 수 지정
KeepAliveTimeout KeppAlive가 On인 상태에서 설정 시간동안 클라이언트 요청이 없을 경우 연결 종료
AccessFileName 디렉터리별 접근제어를 설정하는 파일명 지정
default: AccessFileName .htaccess
ServerToken 클라이언트에게 전송할 응답헤더의 정보수준 지정
Prod:웹서버 종류 / Min: 웹서버의 종류와 버전
OS: 웹서버 종류, 버전, OS종류 / FULL: 웹서버 종류,버전,OS종류, 설치모듈정보 등
ServerSignature 아파치 웹서버가 생성하는 오류 메시지 등에서 추가정보를 포함할지 말지 결정
On: 아파치버전, 가상 호스트정보 / Email: On + 관리자 이메일 주소 / Off
HostnameLookups 로그 기록 시 클라이언트 IP 표시하는 방법 설정
On: 도메인명 기록 / Off: IP주소 기록