반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

hann-blume

Linux - Apache / Web Server 본문

Linux

Linux - Apache / Web Server

hann-blume 2020. 3. 22. 22:18

 

 

 

[ Web Server의 이해 ]


Web Server란 클라이언트가 Web Browser를 통하여 접속을 요청하면, 

요청한 데이터를 클라이언트 Web Browser에게 전송하는 역할을 하는 Server를 말한다

 


[ Web Server 동작 과정 ]


1. 클라이언트 Web Browser에서 Web Server의 데이터 요청


2. 클라이언트는 IP 주소가 아닌 Web Server의 Domain Name 처리를 진행하므로 

DNS서버를 통해 Web Server의 Domain Name을 Web Server의 IP주소로 변환


3. 변환한 IP주소를 이용하여 Web Server 80번 포트를 이용하여 

TCP연결을 진행 ( 세션 연결 : TCP 3way-handshaking )


4. 세션 연결 완료 후 Web Serversms DocumentRoot로 정의된 

디렉터리에 저장되어있는 Main page(Code형태)를 Client에게 전송


5. 클라이언트는 서버로부터 전송 받은 Main Page(Code형태)를 

Web Browser가 이를 해석하여 클라이언트 화면 출력


[ Web Server의 종류 ]

1. 정적인 Web Server
- 정적인 Web Server란 HTML과 같은 정적인 Web언어의 데이터 처리를 하는 것을 말한다.
  ( 즉, 클라이언트가 데이터를 요청할 경우 매번 똑같은 데이터만 처리한다는 뜻)
- 기본적으로 Apache Web Server는 정적인 데이터만 처리할 수 있는 Web Server 플랫폼이다.

2. 동적인 Web Server
- 동적인 Web Server는 사용자가 데이터를 요청하면, Web script 등을 통하여 

새로운 데이터를 만들어 사용자에게 제공하는 Web Server를 말한다.
- 동적인 언어를 처리하는 각종 Web script PHP, JSP, Python, Perl 등의 모듈을 

설치해야 동적인 Web Server 구성이 가능하다.
- 기본적으로 사용하는 형태는 Apache는 정적인 처리만 진행하게 구성하고, 

WAS( Web Application Server )를 별도로 구성하여 동적인 처리를 진행하게 구성한다.
- WAS의 대표적인 프로그램으로 Tomcat, Jeus 등이 있다.

 

 

Apache 설치
# yum -y install httpd-*
# rpm -qa | grep http

메인 파일들이 있는곳
# ls -l /etc/httpd

 


conf
아파치를 운영하는데 가장 메인이되는 정보가 들어있는 설정파일이 들어있는 디렉터리

conf.d
부가적인 정보가 들어있는 설정파일이 들어있는 디렉터리

conf.modules.d
추가되는 모듈에 대한 운영 설정들이 들어있는 디렉터리

# systemctl start httpd
# systemctl enable httpd
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload

 

 

이제 클라이언트(윈도우) 에서 
인터넷 주소창에 http://192.168.131.100/

를 입력해보자

 

 

물론 가상머신이 아닌 실제 컴퓨터의 인터넷 창에서도 가능하다.

 

 


백업작업
# mkdir /backup
# cp -rp /etc/httpd /backup
# ls -l /backup


아파치 메인 설정파일

# vi /etc/httpd/conf/httpd.conf

31 ServerRoot "/etc/httpd"
아파치에 관련된 설정파일 로그,모듈이 들어있는 디렉터리 경로

42 Listen 80
http 접속을 받아드릴 포트번호 (Listen을 사용하여 여러 포트 지정 가능.) 

-> 어디서든지 tcp 80번포트로 접속하는걸 허용한다.

56 Include conf.modules.d/*.conf
아파치는 각종 모듈을 추가해서 기능을 확장시킬 수 있는데, 

모듈을 설치했을 때 해당 모듈의 설정파일이 저장되는 곳이다.
이 경로는 앞쪽에 /etc/httpd/ 라는 경로가 생략되어 있다.

66 User apache
67 Group apache
httpd를 설치하면 
tail -l /etc/passwd로 확인하면
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
라는 아파치 서비스 계정이 자동으로 생성된다. 


위 66,67번줄을 User apache -> User nobody 
User apache -> User nobody 
Group apache -> Group nobody 
보안을 위해 이렇게 변경을 해주는 것이 좋다.

86 ServerAdmin root@localhost
아파치 서버에 문제가 발생했을 때 알려줄 메일 계정

95 #ServerName www.example.com:80
주석을 풀고 ServerName www.hann.com:80 로 변경
아파치 웹서버의 이름을 정의한 것이다.
DNS와 호스트네임과 맞춰서 작성해주는 것이 좋다.(필수 X)

 



102, 103     AllowOverride none -> AllowOverride를 사용하지않겠다. 

AllowOverride는 수정,삭제 작업
104     Require all denied -> 모든 접근 권한을 허용하지않는다.
105   디렉터리 별 '권한' 설정을 하는 부분. 디렉터리 지시자.
현재 102번은 '/'(최상위디렉터리)에 대한 아파치 서버의 권한 설정이다.
즉, 클라이언트의 최상위디렉터리'/'에 대한 모든 권한을 허용하지않은 상태이므로 

모든 디렉터리의 접근을 막은 것과 같다.
기본값이 이렇게 설정되어있다.


119 DocumentRoot "/var/www/html"
웹서버에서 DocumentRoot를 지정하고 DocumentRoot에는 메인페이지가 있으며 

클라리언트는 이 메인페이지를 가져가서 웹을 띄운다.

# cd /var/www/html
# ll
합계 0
현재 DocumentRoot에는 아무것도 없기 때문에,

웹주소창에 192.168.131.100 을 해보면 Testing 페이지만 나탄다.

웹페이지를 만들어보자. 이때 이름은 반드시!!   index.html로 해준다.
# cat > index.html
My Apache WEB TEST! 나가기는 ctrl+d
# ll
합계 4
-rw-r--r-- 1 root root 20  3월 22 20:28 index.html

 


이제 다시 웹페이지에 192.168.131.100 을 해보면 내가 입력한 문구가 나온다


위에서 반드시 index.html라는 이름을 사용한 이유는 
설정파일 164번 줄에 명시되어 있기 때문이다. (변경 가능)
# vi /etc/httpd/conf/httpd.conf
163  <IFModule dir_module>
164     DirectoryIndex index.html
165  </IFModule>

# systemctl restart httpd 


# ps -ef | grep httpd
해보면 자식프로세스들이 생긴것이 확인이 되는데 설정파일에서 명시해준 nobody라고 나타난다


# vi /etc/httpd/conf/httpd.conf

124 <Directory "/var/www">
125     AllowOverride None
126     # Allow open access:
127     Require all granted -> 접근권한 허용
128  </Directory>

필요하면 만들어주어도 되기 때문에 필요없는 주석과 위에 부분을 지워준다. 

위와 같은 상태로 만들어준다.


119 DocumentRoot "var/www/html" -> 클라이언트가 접속시 가장 먼저 나타나는 메인 페이지

124 <Directory "/var/www"> -> 메인페이지에 대한 설정
AllowOverride None
Require all granted
</Directory>

 

 

------------------------------------------------

 

[ HTTP 1.1 Method ]

OPTION 서버가 지원하고 있는 Method를 요청 
GET URL 정보를 요청 Paramether URL에 포함시켜서 전달한다 
POST URL 정보를 요청 Paramether 본문 (Request Message Body)을 통해서 전달 
HEAD HTTP Header 정보만 요청한다 (Health Check 등에 사용) 
TRACE 클라이언트의 요청을 그대로 응답한다 (XST 공격기법으로 인하여 사용을 비 권장) 
DELETE 요청하는 URL의 자원을 삭제한다 (WEB에 파일 삭제가 가능하다) 
PUT 요청하는 URL의 자원을 생성한다 (WEB에 파일 업로드가 가능하다) 
CONNECT WEB의 Proxty기능을 요청할 때 사용 

 


[ ** HTTP 버전 별 지원 Method ** ]

HTTP/0.9 GET 
HTTP/1.0 GET, POST, HEAD 
HTTP/1.1 GET, POST, HEAD, OPTION, PUT, TRACE, CONNECT (Apache는 HTTP/1.1를 지원 ) 



# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/apache/test"
    <LimitExcept GET POST>

        Order deny,allow

        Deny from all

    </LimitExcept>

    AllowOverride None 
    Require all granted 
<Directory "/apache/test">


     GET과 POST를 제외하고 검사하겠다. 즉 GET과 POST만 허용 나머지 거부.
        Order deny,allow
        Deny from all 거부목록에 해당되는 것들을 전부 차단한다.

142 <Files ".ht*">
143     Require all denied
144  </Files>
클라이언트들에 대한 인증작업을 아파치상에서도 할 수 있게한다.
즉 인증작업을 통해서 거부시키겟다 라는 문장이다.

153 ErrorLog "logs/error_log" 앞쪽에 /etc/httpd/ 생략
아파치 운영 중 에러가 발생했을 때 남겨줄 에러로그의 설정정보.

160 LogLevel warn
로그 레벨중 warn(주의)단계 일때만 로그를 남기겠다는 문장.
debug, info, notice, warn, error, crit, alert, emerg
단계가 있다. 자기 기준 오른쪽에 모든 것 들을 포함한다.
즉 warn은 error, crit, alert, emerg를 포함.

188   CustomLog "logs/access_log" combined
로그 저장옵션

287 AddDefaultCharset UTF-8
기본 인코딩 값(문자 변환)

303 #ErrorDocument 500 "The server made a boo boo."
304 #ErrorDocument 404 /missing.html
305 #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
306 #ErrorDocument 402 http://www.example.com/subscription_info.html
http 상태코드에 따라 표시해줄 문구나 파일을 명시.

제일 마지막 줄
324 IncludeOptional conf.d/*.conf
부가설정에 대한 파일들이 저장된다.

# mkdir -p /apache/test
DocumentRoot를 변경해주었으니 실제 존재하도록 생성.

아차피 서버 상태확인
# apachectl configtest
Syntax OK
# systemctl restart httpd

테스트
# cd /apache/test/
# vi ./index.html


웹주소창 192.168.131.100
 태그 레벨에 따라 글씨크기가 작아진다.

 

복붙해서 쓰자.txt
0.00MB




# vi /var/named/hann.zone
추가
cafe    IN      A       192.168.131.100
blog    IN      A       192.168.131.100

 

# vi /var/named/hann.rev
100     IN      PTR     cafe.hann.com. 
100     IN      PTR     blog.hann.com. 


# systemctl restart named



새로운 설정파일 생성
# vi /etc/httpd/conf.d/virtual.conf






# vi /etc/httpd/conf/httpd.conf -> cafe와 blog 추가


# mkdir /apache/cafe
# mkdir /apache/blog


# vi /apache/test/index.html

 

 

 

# cp /apache/test/index.html /apache/cafe/index.html 

# vi /apache/cafe/index.html 

 

 


# cp /apache/test/index.html /apache/blog/index.html
# vi  /apache/blog/index.html 

 

 

# apachectl configtest
Syntax OK
# systemctl restart httpd

여기까지해주고 client(윈도우)
인터넷 주소창에
www.hann.com
cafe.hann.com
blog.hann.com

 

각각 해주었을때 맞는 문구들이 출력된다.

 

 

--------------------------------------------------------

 


사용자별 개별사이트 운영 구축


# useradd user1
# passwd user1
# cd /home/user1
# mkdir public_html -> 해당 유저 홈디렉터리에 만들어야한다.
# chown user1. public_html/ -> 관리자계정으로 만들었으면 user1것으로 만들어준다.
# cd ./public_html/
# cp /apache/test/index.html ./


# vi ./index.html


       

   
# cd ~

일반사용자계정은 서비스의 전반적인 내용 수정이 불가능하다.
즉 실제 일반사용자는 개별 웹사이트를 운영할 수 없는데
아파치의 userdir 서비스를 이용해 자신의 홈디렉터리 하위에 public_html디렉터리를 생성하여 
자신만의 개별 사이트를 운영할 수 있다.  
/home/user1/public_html/
이 기능의 설정 기본값은 비활성화이다.
해당 설정값이 들어있는 파일은


# vi /etc/httpd/conf.d/userdir.conf

17     UserDir disabled -> 주석처리해서 활성화 시켜주자
24     UserDir public_html -> 경로, 주석x
31 <Directory "/home/*/public_html">
32     AllowOverride none -> none으로 변경
33     Options none -> none으로 변경
34     Require method GET POST OPTIONS
35  </Directory>



설정이 변경되었으니 서비스 재시작
# systemctl restart httpd


클라이언트(인도우)
인터넷 주소창에 http://www.hann.com/~user1
하지만 아직 웹페이지를 찾을 수 없다고 나온다.


해당 경로는 /home/user1/public_html/을 의미하는데
이 경로에서 user1 부분에서 접근이 막힌다.
왜냐하면 권한이 700 user1 user1 인데


현재는 아파치계정이므로 UID GID 어디에도 속하지않으므로 other인데
0으로 그 어떤 권한이 없기때문이다

# chmod 701 /home/user1

 

 

다시 시도

 

 

 

[ Apache 실습 ].txt
0.01MB

 

 

 

 

 

 

 

여기까지 Apache / Web Server 에 대한 설명이 끝났다.

반응형

'Linux' 카테고리의 다른 글

Linux - SSL/암호화  (0) 2020.03.22
Linux - DNS (Domain Name Server)  (0) 2020.03.22
Linux - ShellScript  (0) 2020.03.22
Linux - Cron / CronTab  (0) 2020.03.22
Linux - Backup  (0) 2020.03.22