2015년 8월 14일 금요일

리눅스 서버 알아보기_08. Apache서버

1. apache 설치
    이전 설치는 진행 (해당 내용의 압축및 묶음 부분 참고)
    혹은 해당 설치 메뉴얼 참고

  1) 압축 풀기
듣고 있는 강의에서는 apache_1.3.34.tar.gz 파일로 진행
>tar xvfz apache_1.3.34.tar.gz
.....(압축 풀림)

  2) 설치 준비 (원하는 폴더에 설치하도록 준비)
>ls
....
Makefile.tmpl
......

>vi Makefile.tmpl
~~~~
69line   prefix = @prefix@
~~~~
***prefix가 설치 path 임 여기서는 변수명으로 셋팅되어
  있는데 사용자가 옵션을 줘서 설치 경로를
  지정 할 수 있다.

***apache 옵션값 설정은 configure 라는 실행파일을
    실행함으로서 설정 가능하고 명령어 끝에 \ 표시시
    다음줄에 옵션 부여 가능 이때 위에서 확인한 prefix 라는
    옵션값을 부여하면 해당 옵션이 적용된다.

>./ configure \
--prefix=/apm/apache
~~~~(설치준비 상태)

>vi Makefile.tmpl
~~~~~
69line prefix     = /apm/apache
~~~~~
****변경되어 있는걸 확인하면 ok

  3) 컴파일 진행 (설치)
>make
~~~~~ 컴파일을 진행한다.

  4) 컴파일된 파일을 옵션 설정된 폴더에 설치 진행한다.
>make install
~~~~~설치중
/apa/apache/conf/httpd.conf (메인 설정파일)

/apa/apache/bin/apachectl start (실행 파일)
~~~~~위 메시지를 확인할 수 있다.

  5) 이전 설치 내용 확인 및 프로세스 실행
>rpm -qa|grep httpd
****아직 설치된 내용이 뜨지 않음
     혹시 다른게 떠있으면 삭제 필요
>rpm -e httpd* --nodeps
    (의존성 무시하고 삭제 * 대신
      들어가는 문자를 일치해서 삭제 할 것)

apa/apache/bin>./apachectl start
>ps -ef|grep httpd
~~~근데 꽤 많음... 접속 사용자마다 프로세스가 할당되기
      때문에 몇개 미리 띄워둔것
      옵션 파일 설정을 통해서 프로세스 갯수를 조정 가능함

웹 브라우저에서 자신 ip접속시 사이트가 하나 뜨면 끝


2. 실행관련 정보
>./apachectl start
>./apachectl stop

****프로세스가 안떨어질 경우
>ps -ef|grep httpd
>killall httpd (여러 같은이름 프로세스를 같이 날리기

****패스를 잡아주고 어느 위치에서든
     명령어만으로 실행 가능

  1) 실행파일 패스 등록하기
>vi .bach_profile
~~~~
PATH=$PATH:$HOME/bin:/apm/apache/bin:경로추가1:경로추가2
~~~~~
:wq
****windows 는 ; 로 구분하는데 여기는 : 로 구분하는것만
     다르고 같음, 리눅스는 로그인, 아웃 한번 해서
     해당 파일을 한번 읽게끔 해야 적용 가능함

  2) 실행파일 자동 시작 등록하기
      :ntsysv에서 체크한 데몬만 자동시작함

[/etc/rc.d/rc.local]
**** 사용자가 정의하는 배치파일이 등록되어 있음
여기에 /apa/apache/apachectl start 를 등록하려고 함
>cd /etc/rc.d
>ls
~~~
rc.local
~~~~

>vi rc.local
~~~~
touch /var/lock/subsys/local
/apm/apache/bin/apachectl start

:wq

>reboot
~~~~~
>ps -ef|grep httpd
~~~~ 뜨면 됨

이런 절차를 ntsysv에서 자동 설정가능
   실행 후 프로세스를 체크하면 됨


ps. 폴더 권한 이해
-rwxrwxrwx (파일 r(읽기), w(쓰기, 수정, 삭제), x(실행))
drwxrwxrwx(디렉토리 r(ls 가능여부),
                            w(디렉토리 안에 파일 생성, 삭제, 수정),
                            x(접근 가능 여부))

**** 디렉토리에서 r 과 x 의 차이점
>cd home/babo    ****일반 사용자 계정홈 디렉토리
>mkdir test
>ls
drwxr-xr-x 2 root    root   ~~
****root 만 접근되고 다른데서는 ls, 접근만 가능
      test 폴더안에 폴더나 파일 생성은 불가

>chmod 700 test
>ls
drwx------ 2 root    root   ~~~
**** 아예 들어가지 못하는 상태

>mkdir test2
>chmod 701 test2

>cd test
>cat >aaa.txt
>cd /home/babo/test2
>cat >aaa.txt

ls
~~~~
-rw-r--r-- 1 root   root    ~~~
**** 파일은 읽은수는 있음

**** 일반 계정으로 접근하여 test 폴더 접근
>ls -al|grep test
>cd test
-----접근 불가

>cat test/aaa.txt
-----파일에도 접근 불가함

**** test2 접근
>ls -al |grep test2
~~~~
drwx-----x ~~~~
~~~~

>cd test2    (폴더 접근은 가능해짐)
>ls
---- 접근불가(r원한 없으므로 접근은 되나 ls명령은 안됨)

>cat test2/aaa.txt
hello

-----ls은 안되는데 안의 aaa.txt는 접근 가능함!!!


3. 주요 구성 파일 [conf/httpd.conf] 살펴보기
>vi /apm/apache/conf/httpd.conf
:se nu
****거의 1000라인 정도 됨

****/apm/apache/conf/httpd.conf.default <-- 백업파일


  1) 전역 환경 구간 : 41line section1
      .....
52line  
     ServerType standalone    
  ****자주 쓰는 서버라서 항상 대기하고 있는 타입

63line
     ServerRoot "/apm/apache"
  ****기본 폴더

80line
     PidFile  /apm/apache/logs.httpd.pid
  ****프로세서가 생성되는 기본 파일명

99line
     ResourceConfig /apm/apache/conf/srm.conf
     AccessConfig    /apm/apache/conf/access.conf
  ****현재는 설정파일이 한개이지만 이전에는
       3개의 설정파일이 있었음 현재는 주석처리되어 있음

105line
     Timeout 300
  ****유저 세션 유지 유효시간

139line  **** 자주 손대는 부분 
     MinSpareServers 5
     MaxSpareServers 10
  ****daemon을 5~10개 유지하겠음 (서버 부하에 따라서)
     StartServers 5
  ****최초 시간 프로세스 갯수

155line
     MaxClients 150
  ****동시접속자

171line
    MaxrequestsPerChild_0
  ****아파치웹서버가 요청에 대해 세션 처리하는
        프로세스 갯수를 설정 현재 무한대

178line
     Listen 3000
  ****처리포트 지정 현재 주석처리되어 있음


  2) 메인서버구성구간 213Line Section2
236line
     Port 80
  ****서버 가동 포트

250line
     User nobody
     Group nobody
  ****daemon 프로세서 등록시 사용하는 계정

258line
     ServerAdmin ~~
  ****Admin 이메일 계정

283line
     DocumentRoot "~~"
  ****웹 요청에 대해서 어느 폴더로 안내할 것인가

293line
     <Directory />
             Options FollowSymLinks
             AllowOverride None
     </Directory >
  ****FollowSymLinks 
         심볼링 링크를 허가+기본 폴더 이외 폴더까지 포함
>cd /
>cat > aaa.txt
~~~It's station root by aaa.html
>cd /apm/apache/htdocs
>ln -s /aaa.html a.html
웹사이트 접속 : ip/a.html <-- 접속 가능
    옵션 삭제후 재시작시 a.html 접속 불가
  ****AllowOverride None
         사용자 계정을 물어보지 않고 요청에 진행
         웹서버 특성상 사용자 체크 하지 않음

317line
     <Directory />
      ~~~~
             Options Indexes FollowSymLinks MultiViews
      ~~~~
     </Directory >
  **** Indexes
          디렉토리 보여주기 기능을 포함할지 안할지 여부

317line
     <Directory />
      ~~~~
             Options Indexes FollowSymLinks MultiViews
      ~~~~
     </Directory >
  **** Indexes 
          디렉토리 보여주기 기능을 포함할지 안할지 여부
          요청 파일이 디렉토리에 없는 경우
          (디렉토리는 있는 경우)디렉토리를 보여줌
  **** MultiViews
          언어별 대응 옵션.. 거의 사용하지 않음

324line
     <Directory />
      ~~~~
             AllowOverride None
      ~~~~
     </Directory >
  **** AllowOverride 사용자가 누구인지 물어보지 않는다.

329line
     <Directory />
      ~~~~
             Order allow, deny
             Allow from all
             Deny from ip
      ~~~~
     </Directory >
  ****  Allow or Deny
          tcp/ip 레벨에서 사용자 ip에 따라 막는지 여부를 체크

339line
     <IfModule mod_userdir.c />
             UserDir public_html
     </IfModule mod_userdir.c >
  **** mod_userdir.c
>httpd -l
****apache에 설치된 모듈을 보여준다.
      이중 mod_userdir.c 라는 내용이 있는 경우
      public_html로 안내하도록 하는 기능
      이 옵션을 통해서 호스팅 서비스가 가능하다.

    여기서 아래처럼 변경한다.
     <IfModule mod_userdir.c />
             UserDir www
     </IfModule mod_userdir.c >
+
346line
     <Directory /home/*/www
     </Directory>
  **** 사용자 디렉토리 mod_userdir.c 설정시
      directory 부분 주석을 풀어준다.
그리고 사용자 babo에 대해서
>mkdir /home/babao/www
> cd /home/babo/www
>catch aaa.html
~~~~here aaa by babo
그리고 웹 브라우저로 접속
http://ip/~babo
안들어가지면 익명 사용자 권한 확인 할 것
   (babo 폴더, 안의 html문서 )

346line
     <Directory /home/*/www
     </Directory>
  ****

483line
     CustomLog /apm/apache/logs/access_log common
  **** 사용자 접속시 남기는 로그 정보의 저장
        맨 뒹 common은 type
        agent
        refrear
        common
        combined
    (471라인부터 각 옵션에 대해 뭘 저장할 건지 설정 가능하다.)

  3) 가상 호스트


4. 사용자별 홈 디렉토리 접근하기
기본 설정
    위 설명중 339line, 346line 확인할 것

추가
www.hostion.co.kr ->/apm/apache/htdocs/index.html
www.john.co.kr -> /home/john/index.html
www.mark.co.kr -> /home/mark/index.html


첫번째 DNS 구성
>vi /etc/named.conf
   ~~~~
 zone "hosting.co.kr" IN{
         type master;
         file "hosting.zone";
};
 zone "john.co.kr" IN{
         type master;
         file "john.zone";
}; zone "mark.co.kr" IN{
         type master;
         file "mark.zone";
};
:wq

>cd /var/named
>cp localhost.zone hosting.zone   (정방향 샘플 복사)
>vi hosting.zone
~~~~
$TTL  86400
$ORIGIN hosting.co.kr
@                    1D IN SOA       @ ns.hosting.co.kr. (
                                  423 ; serial (d. adams)
                                  3H ;  refresh
                                  15M ; retry
                                  1W ; expiry
                                  1D ) ; minimun
                    1D IN NS        ns.hosting.co.kr
                    1D IN A        본인 ip
ns                      IN A        본인 ip
www                  IN A        본인 ip
:wq

>cp hosting.zone mark.zone
>cp hosting.zone john.zone
   두 파일은 위의 진한 부분만 mark, john 으로 교체
   네임 서비스 재시작 (안죽으면 킬로 날린 후 재시작)
확인 >nslookup 으로 확인


두번째 사용자가 없는 경우 만들어 둔다.

>useradd john
>passwd john
    pssword  입력
>useradd mark
>passwd mark
    password 입력

>cd /home
>ls => john, mark 폴더 있는지 확인
>cd /home/mark
>cat > index.html
   www.mark.co.kr site
ctrl+z

>cd /home/john
>cat > index.html
   www.john.co.kr site
ctrl+z


세번째 웹서버 구성(옵션 설정)


>vi /apm/apache/conf/httpd.conf
Section3 부분으로 이동 - 1아이피 여러사이트 만들시 사용

930line
   NameVirtualHost 본인ip 혹은 *:80
  **** 어느아이피의 어느포트를 가상호스트로 사용할 것인가
        ip가 하나면 ip를 여러개 다 적용할 거면 * 를 기입

938line
#<VirtualHost *:80
#     ServerAdin webmaster@dummy-host.example.com
#     DocumentRoot /www/docs/dummy-host.example.com
#     ServerNAme dummy-host.example.com
#     ErrorLog logs/dummy-host.example.com-error_log
#     CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
  **** 샘플 파일인데 이를 똑같이 복사해서 작성
          관리가 이메일
          안내 폴더
          사용자가 접속해야되는 문자열(사이트명)
          로그, 접속 정보 쌓는 파일명
      위의 3가지 중요하고 밑의 두가지는 부가적임

<VirtualHost *:80
     ServerAdin admin@john.co.kr
     DocumentRoot /home/john
     ServerName www.john.co.kr
     ServerAlias  john.co.kr
     ErrorLog /home/john/error_log
     CustomLog /home/john/access_log common
</VirtualHost>

>/apm/apache/bin/httpd -t   (httpd 문법 에러 체크)

ServerAlias 는 별칭을 붙이는거  www안붙여도 접속되게끔
   설정 가능하게 한것.
네번째 권한 확인(폴더 및 확인용 index파일)
   디렉토리 최소한 701 이상 부여

다섯번재 테스트(데몬재시작 및 접속하기)
dns 서버를 잡아주고 브라우저 띄워서 접속 진행
mark도 똑같이 진행

5. 인증 사이트 서비스 제공하기

http://ip/member/~
   


>/apm/apache/conf/cp httpd.comf.default httpd.conf

>vi /apm/apache/conf/httpd.conf
370line
AccessFileName .htaccess
<Directory /apm/apache/htdocs/member>
          AllowOverride Authconfig
          AuthName "Input your id and password":
          AuthType Basic
          AuthUserFile /apm/apache/htdocs/member/.htpasswd
          <Limit POST  GET>
                 require valid-user //인증된 사용자만 허락 여부 옵션
          </Limit>
          Order allow, deny
          Allow from all 
     </Directory>

  **** .htaccess 에 있는 사용자고
        .htpasswd 에 암호가 일치한 사용자만
        접근하게끔 작성 <Limit옵션>
>/apm/apache/bin/httpd -t

>mkdir /apm/apache/member
>cat > /apm/apache/member/index.html
~here your zone your our member

>apachectl restart

>/apm/apache/bin/htpasswd -c /apm/apache/htdocs/member/.htpasswd babo
password 물어봄

>cat /apm/htdocs/member/htpasswd
babo 유저에대한 암호가된 비번이 작성되어 있음

웹 브라우저에서 접속
 http://ip/member
    계정을 물어봄 여기에 id, pass를 입력시 들어가짐

6. 각 사이트별 포트를 다르게 설정하기
    (가상 호스트를 이용한다.)
    본인ip:80
    본인ip:2000
폴더 및 문서 작성
htdocs\2000\index.html
htdocs\3000\index.html

>cp httpd.conf.default httpd.conf
>vi httpd.conf

178line
     Listen 80
     Listen 2000
     Listen 3000
  ****포트를 추가함

섹션3 - 네임기반이아니기 때문에
          이전 예제처럼 NameVirtualHost는 설정할 필요 없음
<VirtualHost 본인ip:3000>
     DocumentRoot /apm/apache/htdocs/2000
    # ServerName    www.john.co.kr 
    #않넣어도 ip로 접근가능
    # serverName 지정시 도메인명으로 접근 가능
</Virtualhost>
<VirtualHost 본인ip:2000>
~~~이전 단락의 내용을 본인거에 맞게 작성
</Virtualhost>

웹으로 접근 http://본인ip:2000

댓글 없음:

댓글 쓰기