I. 웹 관련 서비스
- 웹의 시작은 조직내의 정보교환을 빠르게 하기 위해서 시작되었다
- 인터넷에서 하이퍼텍스트문서를 교환하기 위해 사용되는 통신규약이다.
- 1989년 CERN(유럽입자 물리학 연구소) "팀 버너스 리"에 의해 처음 설계 되었다.
- 인터넷을 통한 World-Wide-Web 기반에서 전 세계적인 정보공유를 이루는데 큰 역할을 했다.
초기 웹 서비스는 정적인 HTML 페이지로 구성되어서, 주로 텍스트와 이미지로 작성되었다.
- WWW(World Wide Web): 최초의 브라우저로, 넥스트(Next) 플랫폼용 브라우저이며, 현재 W3C 컨소시엄에서 주관하고 있다.
- 모자이크(Mosaic): 1993년 일리노이 대학에서 개발한 무료 웹 브라우저로 인터넷 대중화 시대를 연 선두주자이며, 윈도우 3.1에서 실행 되었다.
- 넷스케이프(Netcape): 미국 넷스케이프 커뮤니케이션사가 만든 최초의 상업용 웹 브라우저이다.
- 인터넷 익스플로어(Internet Explorer): 마이크로소프트에서 개발한 윈도우 기반의 웹 브라우저이다.
- 웹 서버는 정적인 컨텐츠(HTML 파일, 이미지, 동영상 파일, js, css 파일 등)을 클라이언트의 요청에 의해 보낼 수 있다.
- 웹 서버 확장의 하나로 외부 프로그램을 실행시켜 그 결과를 HTML로 돌려주는 방식이다.
- 사용자의 요구에 따라 다르게 반응하는 동적인 컨텐츠를 생산할 수 있다.
- 기업의 DB와 연동하여 웹으로 정보를 제공할 수 있다.
- 어떤 언어로도 코딩 될 수 있으며 프로토콜이 단순하여 사용하기가 쉽다.
- CGI 스크립트용 언어로 C, C++, Perl, PHP, ASP 등이 있다.
- 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램으로, 자바 EE의 일부분이다.(자바로 구현되어, 다양한 플랫폼 동작)
- CGI에 비해 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하여 가볍고 자원관리면에서 효율적이다.
[1] HTTP의 동작
-HTTP는 요청/응답 프로토콜로, 클라이언트는 웹서버의 요청 방식과 URI와 프로토콜 버전 및 MIME과 비슷한 추가 자료들을 서버로 전송한다.
-서버는 이러한 클라이언트의 요구에 대해 상태값과 에러값, 메타데이터 및 실제 자료로 응답한다.
[2] HTTP 요청(Request)
-요청은 메소드(GET/POST) + URI + 프로토콜 버전 + 추가 헤더 정보들을 전송한다.
요청 메소드 |
|
메소드 |
설명 |
GET |
지정된 리소스를 가져오는 메소드(쿼리 스트링으로 데이터를 보낼수 있음) |
HEAD |
GET과 같지만, HTTP 헤더만 가져옴(웹 서버 모니터링 시) |
PUT | 주어진 URL에 데이터 저장 |
DELETE | 주어진 URL에 해당하는 리소스를 삭제 |
POST | 웹 서버로 데이터를 보냄(GET과 함께 사용) |
TRACE | 이전에 들어온 요청들을 보여줌 |
OPTIONS | 웹 서버에서 지원하는 메소드들을 응답 |
[3] HTTP 응답(Response)
-서버로 부터 응답은 HTTP 프로토콜 버전, 상태코드, 상태 문자열 형태로 응답하고, 정상적인 응답의 경우 Body부분은 MIME형식으로 데이터를 리턴한다.
응답 오류코드 |
||
코드 |
메세지 |
설명 |
1** |
Informational |
정보교환 |
2** |
Success |
성공(ex. 200 OK: 오류 없이 전송 성공) |
3** |
Redirection |
위치가 바뀜 |
4** |
Client Error |
클라이언트 측 오류(ex. 404 Not Found: 찾을 수 없음, 403 Forbidden: 접근 권한 X) |
5** | Server Error | 서버 측 오류(ex. 500 Internal Server Error: 서버 내부 오류) |
- 아파치 웹 서버 단독으로 사용하기 보단, APM(Apache, PHP, MySQL)을 연동하여 사용한다.
- NCSA httpd를 기반으로 시작되었다.
- 1.3 버전부터 시작하였다.
- 2.0버전 부터는 PHP 연동 설치시 동적 모듈 방식인 DSO만 지원한다.
- 소스가 공개되어 있는 공개 소프트웨어이다.
- 멀티스레딩을 지원한다.
- PHP, JSP 등 다양한 웹 프로그래밍 언어를 지원한다.
[배포판에서 제공하는 패키지 설치 ▶ # yum install httpd]
[1] 사이트에서 직접 받은 후 압축 해제
# tar xvfp httpd-2.2.24.tar.bz2
[2] 소스 디렉터리로 이동 후 컴파일 설치 설정(configure)
# ./configure \
※설치 시 옵션
-아파치 프로세스를 Thread방식으로 동작되도록 설정할때: --with-mpm=worker (prefork=아파치 프로세스 방식일 경우)
[3] 웹 서버 컴파일
# make -j 1 | more
[4] 웹 서버 설치
# make install
[5] 설치 확인 - /usr/local/apache
# tree -d -L 1 /usr/local/apache
- 데이터 관리를 효율적으로 하기 위해서 사용하는 DBMS중 하나이다.
- 5.x 버전 부터는 내장함수 등 다양한 기능을 가지게 되었다.
[5.5.x 이전 버전은 make 과정으로 설치하고, 그 이후 버전 부터는 cmake를 설치해야한다]
make → make install → ./mysql_install_db → ./safe_mysqld& (데몬 테스트 까지 수행과정)
[1] 압축 해제
# tar xvfp mysql-5.6.25.tar.gz
[2] 소스 디렉터리로 이동 후 컴파일 설치 설정
# cd mysql-5-6.25
# cmake .
[3] 컴파일
# make -j 1 | more
※컴파일 옵션
--prefix: MySQL 설치 디렉터리 지정
--with-charset: DB에서 지원할 언어 설정(euc_kr: 한국어)
--with-mysqld-user: MySQL 보안 강화 관련
with-tcp-port: 포트 번호 지정
--localstatedir: MySQL 데이터들을 /usr/local/mysql/data에 저장(DB저장경로)
[3] 설치
# make install
*PHP(Hypertext Preprocessor)
- 웹 개발에 적합하고 HTML에 삽입할 수 있는 범용 스크립팅 언어이다.
- 속도, 개발 편의성, 확장성이 매우 우수하다.
- 윈도우 운영체제의 ASP와 같은 역할을 수행한다.
- 다양한 데이터베이스 연동을 위한 API를 지원한다.
configure 옵션
--with-apxs2: 공유된 아파치 모듈을 함께 연동하기 위한 컴파일 옵션
--with-apache: php와 연동하기 위한 아파치 웹 서버의 설치 디렉터리
--with-mysql: php와 연동하기 위한 mysql 설치 디렉터리
--with-config-file-path: 아파치 웹 서버의 설정파일의 위치
--with-gd: GD관련 라이브러리 함수를 사용하여 GD를 지원
- httpd -t : httpd.cof의 파일설정을 점검
- httpd -S : 가상호스트 리스트를 보여줌
- httpd -l : 현재 컴파일된 모듈에 대한 리스트를 보여줌
*아파치 환경 설정
아파치 디렉터리 - /usr/local/apache
디렉터리명 |
용도 및 내용 |
bin/ |
아파치 서버프로그램 실행파일이 들어있음 |
build/ |
아파치 개발에 관련된 라이브러리 및 도구 |
cgi-bin/ |
CGI 스크립트 파일이 존재 |
icons/ | 아파치 서버에서 사용하는 아이콘들이 들어있음 |
conf/ |
아파치 서버의 여러 설정 파일이 들어있음 |
logs/ | 아파치 로그 파일이 저장 |
error/ |
아파치 에러코드에 따른 문서 |
htdocs/ |
아파치 웹문서들이 들어가는 위치 |
include/ |
아파치 웹 서버에 필요한 C 헤드파일 |
lib/ |
여러가지 라이브러리 |
man/ | 도움말 파일 |
manual/ | 매뉴얼파일 |
modules/ | DSO방식의 아파치에서 로드할 모듈파일 위치 |
메인 아파치 설정파일의 일반적인 위치 - /etc/httpd/conf/httpd.conf
메인 설정 |
|
ServerRoot "/usr/local/apache" |
아파치서버의 홈디렉터리를 지정하며 절대경로로 지정 |
LISTEN 80 |
포트 번호 지정 |
LoadModule |
동적 공유 객체방식(DSO)으로 아파치에서 모듈 형태로 추가하거나 제거하는 방식 |
DocumentRoot "/usr/local/apache/htdocs" |
웹 문서의 기본경로를 설정 |
DIrectoryIndex |
가장 먼저 읽어들이는 파일명 지정 |
MaxClients |
동시에 접속할 수 있는 클라이언트의 수를 지정 |
ServerSignature | 정보 노출을 막기 위해 설정 |
해당 디렉터리 이하 웹 문서 제어 설정 |
||
<Directory /> Options FollowSymLinks AllowOVerride None Order allow, deny Deny from all </Diretory> |
||
Options |
None |
어떤 옵션도 이용 할 수 없으므로 모든 접근을 거부 |
ALL |
MultiViews를 제외한 모든 접근을 허용 |
|
Indexes |
웹서버 디렉터리 접근 시 DirectoryIndex에서 지정한파일이 존재 안할시 파일목록 리스트를 보여줌 |
|
Includes |
SSI사용 허용 |
|
IncludesNOEXEC | SSI사용은 허용되지만, #exec와 #include는 허용X | |
FollowSymlinks | 심볼릭 링크를 허용 | |
ExecCGI | CGI 스크립트를 사용할 수 있도록 허용 | |
MultiViews | 웹 브라우저 요청에 따라 적절한 페이지로 보여줌 | |
Allow Override | 어떻게 접근을 허락할 것인지에 대한 설정 - [None, ALL, AuthConfig, FileInfo, Indexes, Limit, Options] | |
Order allow, deny | 접근 제어의 순서를 명시 - [(뒤→앞)모든 접근을 막고 지시자에 의해 허용] | |
Deny from all | 모든 접근으로 부터 거부 |
아파치 접근로그 파일의 로그 포맷 |
|
LogFormat [변수] ... [변수] |
|
%l |
원격 로그 이름 |
%t |
시간 |
%b |
전송량 |
%r | 첫번째 요청라인 |
%h | 요청 보낸 원격 호스트 |
웹 서버의 기본설정 사항 |
|
Timeout 300 |
클라이언트 요청을 아파치가 기다리는 시간 |
KeepAlive On |
한번 연결에 대하여 한번이상의 요청을 허용할 것인가의 여부 |
MaxKeepAliveRequests 100 |
지속적인 접속동안에 허용할 최대 요청횟수를 지정 (최대성능향상: 높은값) [조건: keepAlive On] |
KeepAliveTimeout 5 |
지정한 시간만큼 요청없이 지속될때 그연결을 끊기 위해 timeout시킴 [조건: KeepAlive On] |
UseCanonicalName Off | 자기자신 URL, Servername, Serverport 값들을 어떤 방식으로 설정하여 결정에 대한 지시자 |
AccessFileName .htaccess | 특정페이지에 암호화 패스워드로 로그인 할 수 있또록 하기위한 설정 |
ServerTokens Full | 아파치 웹 서버의 HTTP로 응답할 헤드를 설정 |
ServerSignature On | 에러페이지에 표시할 수 있는 추가정보를 보여줌 여부 |
HostnameLookups Off | 웹로그파일에 방문자에 대한 주소의 기록 방법 [Off=IP / On=도메인명] |
MPM specific에 대한 설정 |
|
prefork - 복사 프로세스 방식 | |
StartServer 5 |
웹 데몬 구동시 자식프로세스의 개수 |
MinSpareServers 5 |
스페어서버가 5개보다 적게되면 추가 생성 |
MaxSpareServers 10 |
스페어서버가 10개보다 많게되면 서버 죽임 |
MaxClients 150 |
실행 가능한 아파치 자식프로세스 개수 |
MaxRequestsPerChild 30 | 자식프로세스들이 생성할 수 있는 클라이언트들의 요청 개수를 제한하는 설정 |
worker - 쓰레드 방식 | |
StartServers | 시작 시 초기화 되는 서버 프로세스의 개수 |
MaxClients | 동시 연결 가능한 클라이언트의 최대 개수 |
MinSpareThreads | 새로운 방문자를 바로 처리하기위하여 대기하고 있는 최소 스레드 수 |
MaxSpareThreads | 새로운 방문자를 바로 처리하기위하여 대기하고 있는 최대 스레드 수 |
ThreadsPerChild | 개별 자식 프로세스가 지속적으로 가질 수 있는 스레드의 개수 |
MaxRequestsPerChild | 자식 프로세스가 서비스 할 수 있는 최대 요청 개수 |
사용자 홈디렉터리에 관한 설정 |
|
UserDir public_html |
http://도메인명/~계정명 으로 개인 홈페이지를 서비스 할 경우 http://도메인명/~계정명/index.html 로 요청 시 ▶ /home/계정명/public_html/index.html 로 접근 |
가상호스트 설정 - 아파치 웹서버에 여러개의 도메인이나 호스트네임을 설정하여 관리하고자 할 경우 (확인 옵션 = httpd -S) |
|
* | 설정할 IP 주소 |
ServerAdmin |
가상호스트를 관리하는 관리자 Email주소 |
DocumentRoot |
가상호스트의 홈페이지 디렉터리 위치 |
ServerName |
가상호스트의 도메인 명 |
ServerAlias |
도메인에 대한 별칭 |
ErrorLog |
가상 호스트의 웹 에러파일 위치 |
CustomLog |
가상 호스트의 웹 로그파일 위치(액세스로그) |
short_open_tag = Off |
Off: <?php 코드?> / On: <?코드 ?> [하위호환] |
max_execution_time = 30 |
php프로그램을 실행 할 수 있는 최대 시간(넘을 시 timeout오류) |
memory_limit = 128M |
하나의 php프로그램에서 사용할 수 있는 최대 메모리양 |
display_errors = Off |
php 프로그램 실행 시 오류를 화면에 보여 줄 것인지에 대한 설정 |
post_max_size = 8M |
php가 받아들일 수 있는 POST데이터의 최대 용량 |
upload_max_filesize = 2M |
업로드 파일 사이즈 지정 |
max_file_uploads = 20 |
한번의 요청시 동시에 업로드 할 수 있는 파일들의 수 |
allow_url_fopen = On |
URL을 이용하여 파일을 오픈할 수 있음(보안상 Off) |
3) 웹 서버 작동 확인
*APM 시작 및 테스트
아파치 웹 서버 시작
# /usr/local/apache/bin/apachectl start
아파치 웹 서버 작동 확인
1. #Include conf/extra/httpd-info.conf ◀주석제거
2. httpd-info.conf 파일에서 http://localhost/server-status에 대한 접속 허용
3. 아파치 상태 확인 # /usr/local/apache/bin/apachectl status
4. apached 프로세스 점검 # ps -ef | grep httpd
5. 아파치 포트 리스닝 # netstat -anp | grep httpd
6. 웹 브라우저를 통한 확인
PHP 정상 연동 확인
'자격증 > 리눅스 마스터 1급' 카테고리의 다른 글
Part3) 네트워크 및 서비스의 활용 - 네트워크 서비스 | 파일관련 서비스 | 삼바서버 (0) | 2018.08.28 |
---|---|
Part3) 네트워크 및 서비스의 활용 - 네트워크 서비스 | 인증관련 서비스 (0) | 2018.08.21 |
Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(3) | 시스템 백업 (0) | 2018.03.06 |
Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(2) | 시스템 보안 및 관리 (0) | 2018.03.05 |
Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(1) | 시스템 분석 (0) | 2018.03.05 |