linux class 3 페이지

본문 바로가기
사이트 내 전체검색


회원로그인

linux class

아파치 웹 서버

페이지 정보

작성자 admin 작성일15-12-23 15:38 조회225회 댓글0건

본문

apache / php / mysql 설치 및 연동
   
*. 아파치서버 version 2.2 문서
1. apache / php / mysql server 설치 및 연동 (Binary Package)

- 먼저 설치되어 있는지 확인
rpm -qa | grep -E 'httpd|php|mysql

*. 설치되어 있지 않으면 아래처럼 yum 으로 설치한다.

yum install httpd mysql mysql-server php php-mysql

[root@centos ~]# yum install httpd mysql mysql-server php php-mysql
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirror.premi.st
 * extras: mirror.premi.st
 * updates: mirror.premi.st
Setting up Install Process
Resolving Dependencies
--> Running transaction check
....
.....
Dependencies Resolved

=================================================================
 Package Arch Version Repository Size
==================================================================
Installing:
 httpd x86_64 2.2.3-85.el5.centos updates 1.3 M
 mysql-server x86_64 5.0.95-5.el5_9 base 9.9 M
 php x86_64 5.1.6-44.el5_10 updates 2.4 M
 php-mysql x86_64 5.1.6-44.el5_10 updates 91 k
Updating:
 mysql i386 5.0.95-5.el5_9 base 4.9 M
 mysql x86_64 5.0.95-5.el5_9 base 4.9 M
Installing for dependencies:
 php-pdo x86_64 5.1.6-44.el5_10 updates 67 k
Updating for dependencies:
 php-cli x86_64 5.1.6-44.el5_10 updates 2.2 M
 php-common x86_64 5.1.6-44.el5_10 updates 155 k
 php-ldap x86_64 5.1.6-44.el5_10 updates 39 k

Transaction Summary
==================================================================
Install 5 Package(s)
Upgrade 5 Package(s)

Total download size: 26 M
Is this ok [y/N]? : y

- 설치완료 후에 mysqld 서버를 올려준다.
[root /root]# pgrep -fl mysqld ; 확인해보고 올라가 있지 않으면
[root /root]# service mysqld start
설치후 처음실행할때 mysqld 서버가 필요로 하는 기본테이블을 생성한 후
mysqld 서버가 시작된다.
pgrep -fl mysqld 또는 service mysqld status 명령어로
서비스 실행 유무를 확인할 수 있다.

- 아래처럼 DB 서버가 접속에 문제 없는지 확인.
root /root]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.95 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)

mysql> <--- 문제없이 접속이 되었다.
mysql 접속을 끊고 shell prompt 로 돌아가는 명령은 quit 이다.

*. 그다음 apache 서버를 시작.

[root /root]# pgrep -fl httpd
[root /root]# service httpd start
httpd (을)를 시작 중: httpd: apr_sockaddr_info_get() failed for centos
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
-- 경고 메시지를 없애기 위해서는 httpd.conf 파일에서 ServerName 지시자에 대해서 설정해야 한다.

- rpm 으로 아파치 설정파일 찾기.
[root /root]#rpm -ql httpd | grep httpd.conf
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/proxy_ajp.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic

*. 출력결과중 httpd.conf 파일이 아파치 서버의 메인 설정 파일.

Apache Server 가 start 될때의 경고메시지를 없애기 위해서
아래처럼 httpd.conf 파일을 수정해야 한다.

ServerName www.example.com:80 ---> ServerName 127.0.0.1:80 으로 수정후
아파치서버 재시작 -> service httpd restart

경고없이 start 가 되었으면 방화벽 설정을 해제한후 웹페이지가 뜨는지
테스트. (http://웹서버주소)

문제가 없으면 아래처럼 php와의 연동을 테스트.
웹페이지는 httpd.conf 설정파일의 DocumentRoot 지시자에 설정된
디렉토리 아래에 파일을 만들어야 하며
Defualt 디렉토리는 /var/www/html 이다.
----------------------------------------------------------------------

[root /var/www/html]# cat test.php
 echo "Hello PHP";
?>

-----------------------------------------------------------------------
위와 같이 테스트하기 위한 간단한 php 소스파일작성
테스트는 ---> http://웹서버주소/test.php

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

2. apache / php / mysql 설치 및 연동 ( Souce Code Package)

아파치 웹서버 설치방법은 DSO 방식 및 static 방식 2가지가 있는데
여기서는 DSO 방식으로 설치한다.
편의상 복잡한 설치 옵션은 생략하고 일반적으로 자주 사용되는 기본적인
몇가지 옵션만 주어 설치한다.
* 다운로드 받을 파일 : http://twoseven.kr/apm/apm.tar.bz2
[/tmp/apm]# 이곳에서 파일을 다운로드 받고 압축해제 한다.
[/tmp/apm]# tar -xf mysql-5.0.67.tar
[/tmp/apm/mysql-5.0.67]# ./configure --prefix=/usr/local/mysql \
> --localstatedir=/usr/local/mysql/data --with-charset=utf8 --with-readline 
끝나면 ...
[/tmp/apm/mysql-5.0.67]#  make && make install 
작업이 완료되면...
[/tmp/apm/mysql-5.0.67]# cp support-files/my-medium.cnf /etc/my.cnf 
cp: overwrite `/etc/my.cnf'? y <-- 파일이 있으면 덮어쓰야 한다.
[/tmp/apm/mysql-5.0.67]#
[/usr/local/mysql/bin]# ./mysql_install_db  <== 이 스크립트 파일은 myslq db 서버가 구동되기 위해서 필요한 DB 를 생성하는 스크립트 파일이다.
Installing MySQL system tables...
....
...
[/usr/local/mysql/bin]# ls ../data <== DB 서버가 구동되는 필요한 DB가 생성이 되었다.
mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.index test
[/usr/local/mysql/bin]#
[/usr/local/mysql]# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf <= 공유라이브러리 설정파일에 mysql 라이브러리 경로를 추가한다.
[/usr/local/mysql]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/mysql/lib
[/usr/local/mysql]#

* 기존의 mysql 계정이 있으면(mysql 패키지가 리눅스 설치할때 설치가 되었다면
mysql 계정이 이미 생성되어 있을수도 있습니다. 그러나 소스코드를 컴파일하는경우에는
mysql 계정의 설정정보(홈디렉토리등..)가 맞지 않을수도 있으므로 계정이 이미 있으면
삭제하고 새로 생성하는것이 권장됩니다.
userdel -r mysql 또는 userdel mysql
그런다음..
useradd -M -s /sbin/nologin mysql  => mysql 계정은 mysqlDB 운영을 위해서만 필요한 시스템
계정이므로 이런식으로 계정을 생성하는것이 보안상 안전합니다. 패스워드도 당연히 부여할
필요가 없습니다.

[/usr/local/mysql]# chown -R root.mysql /usr/local/mysql 
[/usr/local/mysql]# chown -R mysql.mysql /usr/local/mysql/data 
[/usr/local/mysql]#
[/usr/local/mysql/bin]# ./mysqld_safe &  <== mysql 데이터베이스 서버 구동 스크립트 파일(* mysql 서버 종료는 이 스크립트로 하지않고
/usr/local/mysql/bin/mysqladmin -u root -p shutdown 이렇게 한다.)
[1] 1190
[/usr/local/mysql/bin]# nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /usr/local/mysql/data

[/usr/local/mysql/bin]#

[root@vega ld.so.conf.d]# ps -ef | grep mysqld
root 1190 2638 0 18:06 pts/1 00:00:00 /bin/sh ./mysqld_safe
mysql 1213 1190 1 18:06 pts/1 00:00:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --pid-file=/usr/local/mysql/data/vega.pid --skip-external-locking --port=3306 --socket=/tmp/mysql.sock
root 1224 2902 0 18:06 pts/2 00:00:00 grep mysqld
[root@vega ld.so.conf.d]#

[/usr/local/mysql/bin]# ./mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.67-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases; <== db 서버가 구동되는데 필요한 db가 만들어져 있음을 알수 있다.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.04 sec)

mysql> quit
Bye
[/usr/local/mysql/bin]#
[/tmp/apm]# ls
httpd-2.0.63.tar.gz mysql-5.0.67 mysql-5.0.67.tar php-5.2.9.tar.bz2
[/tmp/apm]# gzip -d httpd-2.0.63.tar.gz
[/tmp/apm]# tar -xvf httpd-2.0.63.tar
[/tmp/apm]# ls
httpd-2.0.63.tar.gz mysql-5.0.67 mysql-5.0.67.tar php-5.2.9.tar.bz2
[/tmp/apm]# gzip -d httpd-2.0.63.tar.gz
[/tmp/apm]# tar -xvf httpd-2.0.63.tar
[/tmp/apm]# cd httpd-2.0.63
[/tmp/apm/httpd-2.0.63]# ./configure --prefix=/usr/local/apache \
> --enable-mods-shared=most  <== DSO 방식으로 설치하기 위한 옵션
*. 아파치 configure 옵션은 여기에 자세히 나와 있다.
=> http://httpd.apache.org/docs/2.0/ko/programs/configure.html

[/tmp/apm/httpd-2.0.63]#make && make install 

[/tmp/apm]# ls
httpd-2.0.63 httpd-2.0.63.tar mysql-5.0.67 mysql-5.0.67.tar php-5.2.9.tar.bz2
[/tmp/apm]# tar -xvf php-5.2.9.tar
[/tmp/apm/php-5.2.9]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs 
[/tmp/apm/php-5.2.9]# make && make install 
[/tmp/apm/php-5.2.9]# cp php.ini-dist /usr/local/php/lib/php.ini <= php 환경설정파일을 복사해 두어야 한다. (*. php.5.3.0 버전인 경우 php.ini-production 또는 php.ini-development 파일을 복사해 주어야 합니다)
[/tmp/apm/php-5.2.9]# /etc/ld.so.conf 파일에
/usr/local/apache/lib
/usr/local/apache/modules 이 두개의 디렉토리 경로를 추가한다.
 
[/tmp/apm/php-5.2.9]# ldconfig <= /etc/ld.so.conf 설정파일 적용

#[[/tmp/apm/php-5.2.9]vi /usr/local/apache/conf/httpd.conf
ServerName 지시자를 아래와 같이 설정한다.
ServerName 127.0.0.1 <= 도메인주소가 있으면 그거 적어넣으면 되지만 도메인주소가 없으면 이렇게 적어둔다.
이게 설정안되어 있으면 아파치 실행시 아래와 같은 경고가 뜬다.
httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

* 설정파일에서 아래 내용을 확인후 없으면 추가
LoadModule php5_module modules/libphp5.so 

* php파일을 처리하기 위해 아래두줄 추가

AddType application/x-httpd-php .php .html .htm <== 이런 확장자는 php 모듈이 처리
AddType application/x-httpd-php-source .phps  <= 확장자가 .phps 이면 클라이언트에게 소스코드를 보여준다.

[/usr/local/apache/bin]# pgrep -fl httpd 아파치 구동하기전에 이미 올라와 있는지 확인하여 rpm 으로 설치된 아파치가 구동되어 있으면
종료한다.(killall httpd)
[/usr/local/apache/bin]# [/usr/local/apache/bin]# ./apachectl start (restart 및 종료는 start 인수대신에 restart 및 stop 인수를 사용하면 된다)
[/usr/local/apache/bin]# pgrep -fl httpd
21891 /usr/local/apache/bin/httpd -k start
21892 /usr/local/apache/bin/httpd -k start
21893 /usr/local/apache/bin/httpd -k start
21894 /usr/local/apache/bin/httpd -k start
21895 /usr/local/apache/bin/httpd -k start
21896 /usr/local/apache/bin/httpd -k start
[/usr/local/apache/bin]#

*. /usr/local/apache/htdocs 디렉토리에
아래와 같이 간단한 파일을 만들어서 php 와 연동이 되는지 테스트한다.

[root@vega htdocs]# cat test.php
 echo "hello php";
?>
[root@vega htdocs]# cat test1.php
 phpinfo(); <= phpinfo 함수는 php 라이브러리함수로서 시스템 아키텍처 및 여러가지 아파치,mysql 및 php 에 관련된 여러가지
환경변수등을 출려해주는 함수
?>
[root@vega htdocs]#

http://리눅스서버주소/test.php

※ 동적 방식(DSO)과 정적(static) 방식의 차이

static 방식 : 아파치가 실행될 때 모든 모듈을 메모리에 적재한다. 그래서 dso 방식보다 빠르지만 사용하지 않는 모듈도 메모리에 올라가기 때문에 자원을 낭비할 수 있다. 또한 운영중에 필요한 다른 모듈이 있을 경우 아파치를 재컴파일 해야하는 단점이 있다.

DSO 방식 : 아파치가 실행되는 도중에 모듈이 필요할 경우라면 따로 읽어서 시스템에 적재하는 방식 필요할 때만 메모리에 올리기 때문에 자원 이용이 효율적이지만 매번 읽어와야 하기 때문에 static에 비해 속도가 느리다.

* Makefile *
================================================
make - GNU make utility to maintain groups of programs

대규모의 프로그램을 작성하는 경우 프로그램의 크기가 커지므로 원시 프로그램 파일을 여러개로 분할하는 것이 바람직하다.
어떤 프로그램이 다음과 같이 3개의 file로 분할되어 있다고 하자
myhead.h --> main.c --> main.o
 ==> myprog
 print.c --> print.o
이 경우 main.c 속으로 myhead.h가 include되며 또 print.c 내부의 함수를 사용한다면 다음과 같은 경우가 발생할 것이다.
1) myhead.h 또는 main.c를 수정하는 경우에는 main.c를 재 컴파일하고 print.o와 링크한다. 물론, print.c의 재 컴파일은 필요없다.
2) print.c를 수정하는 경우에는 print.c를 재 컴파일을 하고 main.o와 링크한다.

이 예는 3개의 파일뿐이므로 수정, 재 컴파일 및 링크의 관계가 (1),(2)로 간단하지만 원시화일의 수가 늘면 포함관계가 복잡해지며, 원시 파일 수정시 파일 재 컴파일 및 링크가 복잡해진다.
unix에서는 이 재컴파일 및 링크를 자동화하기 위한 도구로서 make명령어가 준비되어 있다.
이 make명령어의 형식은 다음과 같다.

make [ -f makefile ] [option] [files]

-f makefile 특정 파일명을 지정, -f 옵션을 생략하면 makefile, Makefile, s.makefile, s.Makefile의 순서로 하나씩 취해짐
-i 오류코드를 무시
Makefile은 기본적으로 아래와 같이 목표(target), 의존관계(dependency), 명령(command)의 세개로 이루어진 기분적인 규칙(rule)들이 계속적으로 나열되어 있다고 봐도 무방하다. make가 지능적으로 화일을 갱신하는것도 모두 이 간단한 규칙에 의하기 때문이다.

target ... : dependency ...
 command
 ...
 ...
여기서 목표(target) 부분은 명령(command)가 수행이 되어서 나온 결과 화일을 지정한다. 당연히 목적화일(object file)이나 실행화일이 될 것이다. 명령(command)부분에 정의된 명령들은 의존관계(depenency)부분에 정의된 화일의 내용이 바뀌었거나, 목표부분에 해당하는 화일이 없을때 이곳에 정의되 것들이 차례대로 실행이 된다. 일반적으로 쉘상에서 쓸수 있는 모든 명령어들을 사용하수가 있으며 bash 에 기반한 쉘 스크립트도 지원한다.
[참고] 목표부분에는 결과화일만 올수 있는것이 아니고, 보통 make clean 에 서와 같이 간단한 레이블(label) 기능을 제공하기도 한다. 명령 부분은 꼭 TAB 글자로 시작해야 한다. 그냥 스페이스등을 사용하면 make 실행중에 에러가 난다. make가 명령어인지 아닌지를 TAB 가지고 구별하기 때문이다.

ex. make를 사용한 원시 파일관리
[root@capella backup2]# cat myheader.h
int add(int x,int y);
int multiply(int x, int y);

[root@capella backup2]# cat main.c
#include
#include "myheader.h"

int main()
{
 int a=2,b=3;
 printf("%d + %d = %d\n",a,b,add(a,b));
 printf("%d * %d = %d\n",a,b,multiply(a,b));
}

[root@capella backup2]# cat add.c
int add(int x,int y)
{
 int result=0;
 return (result=x+y);
}

[root@capella backup2]# cat multiply.c
int multiply(int x,int y)
{
 int answer;
 return (answer = x * y);
}

[root@capella backup2]# cat Makefile
test: main.o add.o multiply.o
 gcc -o test2 main.c add.c multiply.c
clean:
 rm *.o
 rm test
install:
 mkdir /tmp/myprogram
 cp test /tmp/myprogram
[root@capella backup2]#

*. 라이브러리
정적라이브러리 생성

- 프로그램이 컴파일될때 라이브러리를 직접 링크하며 프로그램 크기는 사용한
라이브러리 크기 만큼 증가한다.

[root@capella lib]# gcc -c add.c multiply.c
[root@capella lib]# ls
add.c add.o main.c multiply.c multiply.o myheader.h
[root@capella lib]#
[root@capella lib]# ar r libTest.a add.o multiply.o ; 오브젝트코드를 이용하여 정적 라이브러리 생성
ar: creating libTest.a
[root@capella lib]# ar s libTest.a ; 라이브러리에서 오브젝트파일 검색을 위한 index 생성
[root@capella lib]# ar t libTest.a <= library 내용 확인
add.o
multiply.oㅣ
[root@capella lib]#
[root@capella lib]# gcc -o test main.c -lTest -L. ; -lTest => 라이브러리 이름, -L 라이브러리경로
-lTest : 참조할 라이브러리이름
-L : 라이브러리가 있는 경로 (디폴트라이브러리 경로(ex /usr/lib 에 없는 라이브러리라면
이 옵션으로 라이브러리 경로를 명시해야 한다)
[root@capella dlib]# ./test
2 + 3 = 5
2 * 3 = 6
[root@capella dlib]#

공유라이브러리 생성
- 프로그램이 컴파일될때 직접 링크되지 않고 프로그램이 실행될때 적재되어 사용된다.

[root@capella new]# gcc -c -fPIC add.c multiply.c
[root@capella new]# ls
add.c add.o main.c multiply.c multiply.o myheader.h
[root@capella new]# gcc -shared -fPIC -o libTest.so add.o multiply.o
[root@capella new]# ls
add.c add.o libTest.so main.c multiply.c multiply.o myheader.h
[root@capella new]# gcc -o test main.c -lTest -L.
[root@capella new]# ls
add.c add.o libTest.so main.c multiply.c multiply.o myheader.h test
[root@capella new]# ./test
./test: error while loading shared libraries: libTest.so: cannot open shared object file: No such file or directory

=> 파일실행시 라이브러리를 /etc/ld.sol.cache 에서 찾는다. /etc/ld.so.cache 를 갱신해 주기 위해서는
/etc/ld.so.conf 에 해당 경로를 추가하고 이 파일 내용을 적용하기 위해서 ldconfig 를 실행한다.
[root@capella new]# echo "/tmp/c/shared_lib" >> /etc/ld.so.conf
[root@capella new]# ldconfig
[root@capella new]# strings /etc/ld.so.cache | grep tmp
/tmp/c/shared_lib/new/libTest.so
[root@capella shared_lib]# ./test
2 + 3 = 5
2 * 3 = 6
[root@capella shared_lib]#

* . mysql 계정

GRANT ALL PRIVILEGES ON *.* TO lee@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;

lee 에게 모든 db 권한 부여

특정 db 에 대해서만 권한 부여할때에는 *.* => db명.* 이렇게 설정하면 된다.

GRANT ALL PRIVILEGES ON *.* TO lee@"%" IDENTIFIED BY 'password' WITH GRANT OPTION;

=> localhost 대신에 "%" 를 사용하면 어디서든 접근 가능하다.

*. 특정권한만 부여할 경우에는 ALL PRIVILEGES 부분을 바꿔주면 된다.
ex) GRANT select,insert,... ON *.* ....

*. 계정 암호변경

update user set password=password('암호') where user='계정';

flush privileges ; 변경된 권한 테이블을 reload

----------------------------------------------------------------------------------------------------------------------------------
apache 설정(httpd.conf) 주요 지시어

ServerRoot "/usr/local/apache" ; 아파치서버 디렉토리
Listen 80 ; 아파치 서버 포트
LoadModule : 아파치 서비스 구동시 로드되는 모듈.(DSO 방식일경우)
- 정적컴파일된 모듈은 httpd -l 로 확인할 수 있다.

User daemon ; 아파치 서버 프로세스 소유자
Group daemon ; 아파치 서버 프로세스 그룹

ServerName 도메인명 또는 ip address ; 이부분이 설정되어 있지 않으면
아파치가 시작될때 경고메세지가 출력된다.
도메인이 없다면 자신의 ip address 라도 적어두어야 한다.
ex) ServerName 127.0.0.1

DocumentRoot "/usr/local/apache/htdocs"
웹페이지의 root 디렉토리.

 <= 아파치 서버의 DocumentRoot 디렉토리
Options FollowSymLinks <== 웹페이지에 심볼릭링크 파일을 허용.
AllowOverride None <= 보안상 None 으로 하는것이 안전하다.
 (웹문서 디렉토리의 접근제한 설정인 .htaccess 파일사용여부)
Order deny,allow
 Deny from all
 


 Options Indexes FollowSymLinks
 Order allow,deny
 Allow from all
 


 Order allow,deny
 Deny from all
 Satisfy All
 

ErrorLog "logs/error_log"
LogLevel warn
- warn 수준이상의 메시지를 logs/error_log 파일에 기록.

CustomLog "logs/access_log" common
- access 기록.

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
- cgi 파일을 위한 디렉토리가 DocumentRoot 바깥에 있을경우
/cgi-bin 으로 alias 시켜준다. ( /usr/local/apache/htdocs/cgi-bin 이런 의미가 된다)


AllowOverride None
 Options None
 Order allow,deny
 Allow from all
 

DefaultType text/plain <= Default MIME type 으로 Document 형식을 지정.

TypesConfig conf/mime.types <= MIME type 설정파일

AddType <= MIME type 설정.
ex)
AddType application/x-httpd-php .php .html .htm
AddType application/x-httpd-php-source .phps
AddHandler cgi-script .cgi <= cgi 는 보안상 특정 디렉토리에서만 실행되도록
설정되어 있는데 아무디레토리에서나 실행가능하게 하기위한 설정.
확장자가 cgi 이기만 하면 된다.

include 경로명 <= 웹서버 관련 설정파일을 포함하기 위한 설정




Options
-----------
All : 모든 옵션 사용. 보안상 좋지 않다
None: 아무 옵션도 사용하지 않음.
Indexes : 파일리스트를 다 보여준다. 역시 보안상 좋지 않다.
ExecCGI : CGI 실행을 할수 있도록 한다.
FollowSymLinks : symbolic 링크된 파일을 사용할 수 있도록 한다.
DocumentRoot 외부에 지정된 디렉토리라도 링크걸려 있으면
사용가능하다.

AllowOverride
----------------
.htaccess 및 .htpasswd 사용여부에 관련된 설정.
이 설정은 특정 디렉토리를 access 하는경우 인증절차를
거쳐서 디렉토리에 access 되게 하는 방식.

ex) 인증을 필요로 하는 디렉토리에서 아래처럼 파일을 만들고
암호 설정을 하게 되면 허가된 사용자만 디렉토리에 접근할 수 있다.
htpasswd -c .htpasswd admin
암호파일에 사용자 추가및 암호설정
c 옵션은 (create ; 파일을 새로 만듦)
htpasswd .htpasswd user1
(암호파일에 계정 추가, user1 계정이 이미 있으면 암호가 변경이 됨)

# cat .htaccess
AuthName "member"
AuthType Basic
AuthUserFile /usr/local/apache/htdocs/test/.htpasswd
require valid-user

httpd.conf 파일에서는
AllowOverride 지시자를 All 로 해주어야 적용이 된다.


Order deny,allow <= deny 규칙 먼저 적용, allow 는 나중.
--------------------
deny - 특정 위치에서 access 거부
allow - 특정 위치에서 access 허용

ex)
 Order deny,allow 먼저 거부하고 나서 허용하는 순서로 동작(특정주소만 허락할 경우),반대의 설정은 Order allow,deny
 Deny from all ; 모든 주소에 대해서 access 금지
Allow from 192.168.1.0/24
 
 /test 디렉토리 access 권한은 192.168.1.0 네트워크에서만 가능하다.

*. 아파치를 DSO 방식으로 설치를 한 경우라면 아파치 설치후 나중에
필요한 모듈이 있으면 apxs 를 이용해서 올려줄 수 있다.

ex)
[root@centos1 httpd-2.2.10]# /usr/local/apache/bin/apxs -i -a -c ./modules/mappers/mod_userdir.c
/usr/local/apache/build/libtool --silent --mode=compile gcc -prefer-pic -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache/include -I/usr/local/apache/include -I/usr/local/apache/include -c -o ./modules/mappers/mod_userdir.lo ./modules/mappers/mod_userdir.c && touch ./modules/mappers/mod_userdir.slo
/usr/local/apache/build/libtool --silent --mode=link gcc -o ./modules/mappers/mod_userdir.la -rpath /usr/local/apache/modules -module -avoid-version ./modules/mappers/mod_userdir.lo
/usr/local/apache/build/instdso.sh SH_LIBTOOL='/usr/local/apache/build/libtool' ./modules/mappers/mod_userdir.la /usr/local/apache/modules
/usr/local/apache/build/libtool --mode=install cp ./modules/mappers/mod_userdir.la /usr/local/apache/modules/
cp ./modules/mappers/.libs/mod_userdir.so /usr/local/apache/modules/mod_userdir.so
cp ./modules/mappers/.libs/mod_userdir.lai /usr/local/apache/modules/mod_userdir.la
cp ./modules/mappers/.libs/mod_userdir.a /usr/local/apache/modules/mod_userdir.a
chmod 644 /usr/local/apache/modules/mod_userdir.a
ranlib /usr/local/apache/modules/mod_userdir.a
PATH="$PATH:/sbin" ldconfig -n /usr/local/apache/modules
----------------------------------------------------------------------
Libraries have been installed in:
 /usr/local/apache/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
 during execution
 - add LIBDIR to the `LD_RUN_PATH' environment variable
 during linking
 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
 - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/local/apache/modules/mod_userdir.so
[activating module `userdir' in /usr/local/apache/conf/httpd.conf]
[root@centos1 httpd-2.2.10]#

댓글목록

등록된 댓글이 없습니다.


접속자집계

오늘
42
어제
62
최대
611
전체
453,001
개인정보취급방침 서비스이용약관 twoseven.kr All rights reserved.
상단으로