웹 관련 서비스
* 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주소 기록 |
'일상 > IT자격증' 카테고리의 다른 글
[리눅스마스터 1급] 3과목 네트워크 서비스 정리 (0) | 2025.03.02 |
---|---|
[2024 SQLD] SQLD 52회 시험 후기 (0) | 2024.03.11 |