만든이: 김경민(stone@linuxstudy.pe.kr)

문서의 모든 설정 및 운영은 알짜리눅스6.2에서 이루어졌습니다.

목차

1.서버설치 및 운영

1) apache web server

2) mysql database sever

3)name server

4) mail server

① send mail server

② qmail mail server

5) ftp  server

6) samba server

7) DHCP server

8) NFS server

9) 기타 이것저것 해보기

2. SHELL program

3. 에러메시지와 대처

4. 보안프로그램 설치 및 운영

5. 명령어 고급

1.서버설치 및 운영

1) APACHE web server

리눅스에서 프로그램을 설치하는 방법은 두 가지가 있습니다.. 첫째는 RPM패키지로 설치하는 방법과 소스를 가져와서 직접 컴파일하여 설치하는 방법이 있습니다.. RPM패키지로 설치하는 방법은 쉽고 간단하므로 소스 위주의 설명을 하겠습니다.

먼저 아파치 웹서버 설치를 위해서는 아파치 소스파일이 필요합니다. 일단  www.apache.org에 가셔서 아파치 소스파일을 받습니다. 버전은 크게 상관이 없습니다.

빌드 순서

./configure →make→make install(거의 대부분의 리눅스용 소스가 이런 순서로 설치됩니다. 가끔씩 configure를 안해줘도 되는 소스도 있지요)

대부분의 시스템에서는 아무 옵션도 안주고 단지

./configure→make→make install 식으로 명령을 내리면 아무 문제없이 설치가 마무리가 됩니다.

물론 아파치 웹서버만 설치할 예정이라면 위와 같이 명령을 내려서 설치를 하면 됩니다.

위처럼 설치한다면 아파치 웹서버는 단지 html만을 해석해 주는 웹서버 역할밖에 할 수 없습니다.

나중에 아래에서 여러 가지 기능을 가진 아파치 웹서버를 구축하는 방법을 알아보도록 하겠습니다.

아파치 웹서버의 기본 디렉토리는 /usr/local/apach가 됩니다.

아파치 웹서버 구동하기

아파치 설치디렉토리(/usr/local/apache)디렉토리로 가시면 bin디렉토리가 존재하고 있습니다.

이곳에서는 여러 가지 명령어들이 존재합니다. 그 중에서 apachectl이 아파치의 구동스크립트입니다.

아파치 구동을 위해서는 /usr/local/apache/bin/apachectl start하시면 됩니다.

그 외 인자로 쓸 수 있는 것들은 stop,restart,status,configtest,help 등이 있습니다.

사용법은 아무 인자없이 /usr/local/apache/bin/apachectl이라고 명령을 내려보면 알 수 있습니다.

일단 아파치가 구동이 된 것을 확인해 보도록 하죠

위와 같이 프로세서가 5개정도 띄워져 있다면 성공적으로 아파치 웹서버가 설치된 것이다.

세 번째 나오는 java부분은 기본값으로 설치 하셨다면 안나옵니다. 현재 제 서버에는 jsp, servlets를 사용할수 있도록 셋팅이 되어 있어서 나오는 부분입니다.

아파치 웹서버 환경설정

아파치 웹서버의 환경 설정파일은 기본값으로 설치했다면 /usr/local/apache/conf에 존재한다

1.3.X대부터는 환경 설정파일이 httpd.conf 한 개로 통합되어 운영이 됩니다.

아래는 실제 아파치 환경 설정파일 입니다.

##

## httpd.conf -- Apache HTTP server configuration file

##

#

# Based upon the NCSA server configuration files originally by Rob McCool.

#

# This is the main Apache server configuration file.  It contains the

# configuration directives that give the server its instructions.

# See <URL:http://www.apache.org/docs/> for detailed information about

# the directives.

#

# Do NOT simply read the instructions in here without understanding

# what they do.  They're here only as hints or reminders.  If you are unsure

# consult the online docs. You have been warned.

#

# After this file is processed, the server will look for and process

# /usr/local/apache/conf/srm.conf and then /usr/local/apache/conf/access.conf

# unless you have overridden these with ResourceConfig and/or

# AccessConfig directives here.

#

# The configuration directives are grouped into three basic sections:

#  1. Directives that control the operation of the Apache server process as a

#     whole (the 'global environment').

#  2. Directives that define the parameters of the 'main' or 'default' server,

#     which responds to requests that aren't handled by a virtual host.

#     These directives also provide default values for the settings

#     of all virtual hosts.

#  3. Settings for virtual hosts, which allow Web requests to be sent to

#     different IP addresses or hostnames and have them handled by the

#     same Apache server process.

#

# Configuration and logfile names: If the filenames you specify for many

# of the server's control files begin with "/" (or "drive:/" for Win32), the

# server will use that explicit path.  If the filenames do *not* begin

# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"

# with ServerRoot set to "/usr/local/apache" will be interpreted by the

# server as "/usr/local/apache/logs/foo.log".

#

### Section 1: Global Environment

#

# The directives in this section affect the overall operation of Apache,

# such as the number of concurrent requests it can handle or where it

# can find its configuration files.

#

#

# ServerType is either inetd, or standalone.  Inetd mode is only supported on

# Unix platforms.

#

◆설명: 아래는 서버타입에 대한 내용입니다. standalone 방식과 inetd방식으로 운영이 가능합니다.

standalone 방식이란 말 그대로 독립적으로 서버가 운영된다는 의미입니다. 하나의 데몬에서 클라이언트의 접속 요청을 처리하므로 응답속도가 빠릅니다.

inetd 방식이란 리눅스 시스템에 있는 inetd라는 슈퍼데몬이 클라이언트 요청에 따라 데몬을 구동시켜주는 방식을 말합니다.

일반적으로 standalone 방식을 많이 사용합니다.

inetd 모드로 서버를 운영하실 계획이라면

6.X대라면 /etc/inetd.conf 파일에

http stream tcp nowait root /usr/sbin/httpd(아파치 설치디렉토리) -f /etc/httpd/conf/httpd.conf(실제 아파치 환경설정화일이 있는 위치)

를 추가해주시면 됩니다.

7.X 대를 사용하신다면 /etc/xinetd.d 디렉토리에 http 라는 파일을 생성해야 합니다.

http 파일의 내용

service http

{

disable = no

socket_type     = stream

protocol	= tcp

wait            = no

user            = root

server          = /usr/sbin/httpd(아파치가 설치된 디렉토리 아래에 bin 디렉토리에 httpd 실행파일이 존재합니다.)

}

ServerType standalone

#

# ServerRoot: The top of the directory tree under which the server's

# configuration, error, and log files are kept.

#

# NOTE!  If you intend to place this on an NFS (or otherwise network)

# mounted filesystem then please read the LockFile documentation

# (available at <URL:http://www.apache.org/docs/mod/core.html#lockfile>);

# you will save yourself a lot of trouble.

#

◆설명: 아파치가 설치되어 있는 위치를 의미합니다. 리눅스 시스템상에서 /의 개념을 이해하시면 됩니다.

즉 http://abc.com 으로 접속했을 경우에 루트가 되는 디렉토리입니다. 물론 문서의 루트하고는 별개의 개념입니다.

ServerRoot "/usr/local/apache"

#

# The LockFile directive sets the path to the lockfile used when Apache

# is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or

# USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at

# its default value. The main reason for changing it is if the logs

# directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL

# DISK. The PID of the main server process is automatically appended to

# the filename.

#

#LockFile /usr/local/apache/logs/httpd.lock

#

# PidFile: The file in which the server should record its process

# identification number when it starts.

#

◆설명: 아파치가 구동이 될 경우 프로세서 번호(PID)가 적혀있는 파일의 위치입니다.

아파치가 구동이 된 후에 아래의 파일을 열어보시면 아파치 웹서버의 pid를 확인해 보실수 있습니다.

PidFile /usr/local/apache/logs/httpd.pid

#

# ScoreBoardFile: File used to store internal server process information.

# Not all architectures require this.  But if yours does (you'll know because

# this file will be  created when you run Apache) then you *must* ensure that

# no two invocations of Apache share the same scoreboard file.

#

ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard

#

# In the standard configuration, the server will process httpd.conf (this

# file, specified by the -f command line option), srm.conf, and access.conf

# in that order.  The latter two files are now distributed empty, as it is

# recommended that all directives be kept in a single file for simplicity.

# The commented-out values below are the built-in defaults.  You can have the

# server ignore these files altogether by using "/dev/null" (for Unix) or

# "nul" (for Win32) for the arguments to the directives.

#

#ResourceConfig conf/srm.conf

#AccessConfig conf/access.conf

#

# Timeout: The number of seconds before receives and sends time out.

#

◆설명: 클라이언트(웹브라우저)의 요청에 의해 서버와 연결되었을 경우 서버와 클라이언트간에 아무런 메시지가 발생되지 않았을 경우에 오류로 처리될 시간 설정입니다. 네트웍 상황에 따라 적당한 값으로 입력해 주시면 됩니다.

Timeout 300

#

# KeepAlive: Whether or not to allow persistent connections (more than

# one request per connection). Set to "Off" to deactivate.

#

◆설명; 클라이언트에서 접속한 다음에 아무런 요청이 없더라도 접속을 유지시킬 것인가 대한 설정입니다.

KeepAlive On

#

# MaxKeepAliveRequests: The maximum number of requests to allow

# during a persistent connection. Set to 0 to allow an unlimited amount.

# We recommend you leave this number high, for maximum performance.

#

◆설명: 클라이언트(브라우저)가 접속된 시간동안 요청할 수 있는 최대 개수입니다.

0으로 셋팅을 하면 제한이 없음을 의미하며 서버 성능향상을 위해 가능한 높은 값을 주라고 나오는 군요..^^(위의 영어를 해석해 보자면...

MaxKeepAliveRequests 100

#

# KeepAliveTimeout: Number of seconds to wait for the next request from the

# same client on the same connection.

#

◆설명: 클라이언트가 접속된 상태에서 아래에서 지정한 시간동안 아무 요청이 없었을 경우에 접속을 끊겠다는 옵션 입니다.

KeepAliveTimeout 15

#

# Server-pool size regulation.  Rather than making you guess how many

# server processes you need, Apache dynamically adapts to the load it

# sees --- that is, it tries to maintain enough server processes to

# handle the current load, plus a few spare servers to handle transient

# load spikes (e.g., multiple simultaneous requests from a single

# Netscape browser).

#

# It does this by periodically checking how many servers are waiting

# for a request.  If there are fewer than MinSpareServers, it creates

# a new spare.  If there are more than MaxSpareServers, some of the

# spares die off.  The default values are probably OK for most sites.

#

◆설명: 기본적으로 아파치 웹서버가 구동이 되면 클라이언트의 요청에 응답하기 위해 대기할 프로세스의 최소개수와 최대개수 입니다.

MinSpareServers 5

MaxSpareServers 10

#

# Number of servers to start initially --- should be a reasonable ballpark

# figure.

#

◆설명: 아파치가 구동될 때 발생시킬  자식 프로세스의 개수를 지정하는 지시자입니다. 서버의 성능에 맞게 적절히 조절해 두세요.

StartServers 5

#

# Limit on total number of servers running, i.e., limit on the number

# of clients who can simultaneously connect --- if this limit is ever

# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.

# It is intended mainly as a brake to keep a runaway server from taking

# the system with it as it spirals down...

#

◆설명: 아파치 웹서버에 접근할 수 있는 클라이언트의 최대개수입니다. 이곳에서 정해준 값 이상으로 클라이언트 접근이 이뤄질 경우에는 요청을 거부합니다.

최대값을 변경을 하고자 할 경우에는 아파치 소스파일을 고쳐주셔야 합니다. 물론 설치하기 전에 해야 합니다.

/아파치소스디렉토리/src/include/httpd.h 파일을 수정해 주시면 됩니다

httpd.h 파일의 일부분입니다.

313 #ifndef HARD_SERVER_LIMIT

314 #ifdef WIN32

315 #define HARD_SERVER_LIMIT 1024

316 #elif defined(NETWARE)

317 #define HARD_SERVER_LIMIT 2048

318 #else

319 #define HARD_SERVER_LIMIT 256

320 #endif

321 #endif

319 라인에 보시면 256이라는 숫자를 변경하시면 클라이언트 접속을 증가시킬 수 있습니다.

MaxClients 150

#

# MaxRequestsPerChild: the number of requests each child process is

# allowed to process before the child dies.  The child will exit so

# as to avoid problems after prolonged use when Apache (and maybe the

# libraries it uses) leak memory or other resources.  On most systems, this

# isn't really needed, but a few (such as Solaris) do have notable leaks

# in the libraries. For these platforms, set to something like 10000

# or so; a setting of 0 means unlimited.

#

# NOTE: This value does not include keepalive requests after the initial

#       request per connection. For example, if a child process handles

#       an initial request and 10 subsequent "keptalive" requests, it

#       would only count as 1 request towards this limit.

#

◆설명: 아파치 웹서버의 자식 프로세스들에 대한 클라이언트 요청개수입니다. 만약에 자식프로세스가 아래에서 지정한 값이상의 요청을 받게되면 자동으로 프로세서가 죽게 됩니다. 0으로 셋팅 될 경우에는 제한이 없다는 의미입니다.

MaxRequestsPerChild 0

#

# Listen: Allows you to bind Apache to specific IP addresses and/or

# ports, in addition to the default. See also the <VirtualHost>

# directive.

#

◆설명: 아파치 웹서버를 특정 아이피나 특정 포트에 대해 연결할 수 있도록 해주는 지시자입니다.

가상호스트를 이용할 경우에 사용한다고 나오는데 실제로 포트를 이용하지 않고 이름기반의 가상호스트를 이용할 경우에는 주석이 되어 있어도 가상호스트 셋팅에는 문제가 발생하지 않더군요....^^

#Listen 3000

#Listen 12.34.56.78:80

#

# BindAddress: You can support virtual hosts with this option. This directive

# is used to tell the server which IP address to listen to. It can either

# contain "*", an IP address, or a fully qualified Internet domain name.

# See also the <VirtualHost> and Listen directives.

#

#BindAddress *

#

◆설명: 아파치 웹서버를 DSO 지원가능하게 했을 경우에 나오는 내용입니다. static 방식으로 설치했을 경우에는 아래의 LoadModule 과 AddModule 이 생겨나지 않습니다.

LoadModuel <모듈명> <모듈의 위치> 형식으로 적어주시면 됩니다. 아파치 웹서버를 DSO 지원가능하게 컴파일 했을 경우에는 아파치 설치디렉토리/libexec 라는 디렉토리에 모듈들이 존재하게 됩니다.

아래에 나오는 AddModule 역시 LoadModule에서 나오는 모듈과 동일하게 존재해야 제대로 기능이 수행됩니다.

# Dynamic Shared Object (DSO) Support

#

# To be able to use the functionality of a module which was built as a DSO you

# have to place corresponding `LoadModule' lines at this location so the

# directives contained in it are actually available _before_ they are used.

# Please read the file README.DSO in the Apache 1.3 distribution for more

# details about the DSO mechanism and run `httpd -l' for the list of already

# built-in (statically linked and thus always available) modules in your httpd

# binary.

#

# Note: The order in which modules are loaded is important.  Don't change

# the order below without expert advice.

#

# Example:

# LoadModule foo_module libexec/mod_foo.so

LoadModule env_module         libexec/mod_env.so

LoadModule config_log_module  libexec/mod_log_config.so

LoadModule mime_module        libexec/mod_mime.so

LoadModule negotiation_module libexec/mod_negotiation.so

LoadModule status_module      libexec/mod_status.so

LoadModule includes_module    libexec/mod_include.so

LoadModule autoindex_module   libexec/mod_autoindex.so

LoadModule dir_module         libexec/mod_dir.so

LoadModule cgi_module         libexec/mod_cgi.so

LoadModule asis_module        libexec/mod_asis.so

LoadModule imap_module        libexec/mod_imap.so

LoadModule action_module      libexec/mod_actions.so

LoadModule userdir_module     libexec/mod_userdir.so

LoadModule alias_module       libexec/mod_alias.so

LoadModule access_module      libexec/mod_access.so

LoadModule auth_module        libexec/mod_auth.so

LoadModule setenvif_module    libexec/mod_setenvif.so

#  Reconstruction of the complete module list from all available modules

#  (static and shared ones) to achieve correct module execution order.

#  [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE UPDATE THIS, TOO]

ClearModuleList

AddModule mod_env.c

AddModule mod_log_config.c

AddModule mod_mime.c

AddModule mod_negotiation.c

AddModule mod_status.c

AddModule mod_include.c

AddModule mod_autoindex.c

AddModule mod_dir.c

AddModule mod_cgi.c

AddModule mod_asis.c

AddModule mod_imap.c

AddModule mod_actions.c

AddModule mod_userdir.c

AddModule mod_alias.c

AddModule mod_access.c

AddModule mod_auth.c

AddModule mod_so.c

AddModule mod_setenvif.c

#

# ExtendedStatus controls whether Apache will generate "full" status

# information (ExtendedStatus On) or just basic information (ExtendedStatus

# Off) when the "server-status" handler is called. The default is Off.

#

◆설명: 서버정보를 알아볼 수 있도록 <server-status>를 주석제거를 했을 경우에 좀더 자세한 정보를 보여줄 수 있도록 해주는 지시자 입니다. 기본값으로는 주석처리가 되어 있습니다.

#ExtendedStatus On

### Section 2: 'Main' server configuration

#

# The directives in this section set up the values used by the 'main'

# server, which responds to any requests that aren't handled by a

# <VirtualHost> definition.  These values also provide defaults for

# any <VirtualHost> containers you may define later in the file.

#

# All of these directives may appear inside <VirtualHost> containers,

# in which case these default settings will be overridden for the

# virtual host being defined.

#

#

# If your ServerType directive (set earlier in the 'Global Environment'

# section) is set to "inetd", the next few directives don't have any

# effect since their settings are defined by the inetd configuration.

# Skip ahead to the ServerAdmin directive.

#

#

# Port: The port to which the standalone server listens. For

# ports < 1023, you will need httpd to be run as root initially.

#

◆설명: 아파치 웹서버가 사용할 포트번호 입니다.

Port 80

#

# If you wish httpd to run as a different user or group, you must run

# httpd as root initially and it will switch.

#

# User/Group: The name (or #number) of the user/group to run httpd as.

#  . On SCO (ODT 3) use "User nouser" and "Group nogroup".

#  . On HPUX you may not be able to use shared memory as nobody, and the

#    suggested workaround is to create a user www and use that user.

#  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)

#  when the value of (unsigned)Group is above 60000;

#  don't use Group nobody on these systems!

#

◆설명: 아파치 웹서버로 클라이언트에서 요청이 들어왔을 경우에 프로세서가 발생하는데 그때 프로세서의 권한을 말한다. 기본값으로 nobody로 셋팅이 되어 있다. 아래를 root로 바꾸는 일이 없도록 하자.

User nobody

Group nobody

#

# ServerAdmin: Your address, where problems with the server should be

# e-mailed.  This address appears on some server-generated pages, such

# as error documents.

#

◆설명: 웹서버 관리자의 메일주소를 적어주는 부분이다.

ServerAdmin root@ns1.linuxstudy.pe.kr

#

# ServerName allows you to set a host name which is sent back to clients for

# your server if it's different than the one the program would get (i.e., use

# "www" instead of the host's real name).

#

# Note: You cannot just invent host names and hope they work. The name you

# define here must be a valid DNS name for your host. If you don't understand

# this, ask your network administrator.

# If your host doesn't have a registered DNS name, enter its IP address here.

# You will have to access it by its address (e.g., http://123.45.67.89/)

# anyway, and this will make redirections work in a sensible way.

#

# 127.0.0.1 is the TCP/IP local loop-back address, often named localhost. Your

# machine always knows itself by this address. If you use Apache strictly for

# local testing and development, you may use 127.0.0.1 as the server name.

#

◆설명: 서버이름을 적어주는 부분입니다. 인터넷에 연결이 안되어 있을 경우나 혹은 네임서버에 등록이 안되 어 있을 경우에는 자신의 아이피 혹은 localhost 혹은 127.0.0.1(루프백 아이피)를 적어 주시면 됩니다.

ServerName ns1.linuxstudy.pe.kr

#

# DocumentRoot: The directory out of which you will serve your

# documents. By default, all requests are taken from this directory, but

# symbolic links and aliases may be used to point to other locations.

#

◆설명: 웹문서(HTML,PHP,PERL	등등)이 놓이게 될 디렉토리에 대한 설정입니다. 말 그대로 문서의 최상위디렉토리가 되는 곳입니다. 즉 http://abc.com/ 라는 주소에서 마지막에 나오는 / 가 되는 디렉토리 입니다.

DocumentRoot "/usr/local/apache/htdocs"

#

# Each directory to which Apache has access, can be configured with respect

# to which services and features are allowed and/or disabled in that

# directory (and its subdirectories).

#

# First, we configure the "default" to be a very restrictive set of

# permissions.

#

◆설명: 최상위 디렉토리(리눅스의 / 가 아닙니다.)에 대한 접근 권한 입니다.

<Directory />

Options FollowSymLinks(심볼릭 링크를 따르도록하겠다는 옵션입니다.)

AllowOverride None(사용자 인증에 대한 설정입니다. 아파치에서 인증을 위해 .htaccess라는 파일을 사용하는데 여러 가지 옵션에 따라서 접근을 제어할 수 있습니다. 여기서는 .htaccess화일을 무시하겠다고 기본값으로 되어 있습니다.)

</Directory>

#

# Note that from this point forward you must specifically allow

# particular features to be enabled - so if something's not working as

# you might expect, make sure that you have specifically enabled it

# below.

#

#

# This should be changed to whatever you set DocumentRoot to.

#

◆설명: 문서의 기본 루트디렉토리에 대한 설정부분입니다.

옵션	설명
None	모든 설정을 하지 않겠다는 옵션입니다.
All	MultiViews를 제외한 모든 설정을 하겠다는 옵션입니다.
ExecCGI	기본적으로 script alias로 설정되어 있는 곳에서만 CGI 가 실행이 됩니다. 하지만 이 옵션을 주게되면 아무 디렉토리에서도 CGI실행이 가능해 집니다.
FollowSymLinks	심볼링 링크를 허용을 할 것인지에 대한 옵션입니다. 기본 루트디렉토리이외의 디렉토리에 링크를 걸 수도 있습니다.
Includes	SSI를 허용하겠다는 옵션입니다. 보안상 위험요소가 있으므로 설정하지 않으시는게 좋습니다.
IncludesNOEXEC	SSI를 허용하되 exec(시스템 내부명령을 수행하는 것)와 #include 로 정의되어 있는 CGI의 실행은 거부하게 됩니다.
Indexes	DirectoryIndex 지시자로 설정된 파일이 없을 경우 디렉토리 및 파일의 목록을 보여주겠다는 옵션입니다. 보안상 이 옵션은 주지 않는게 좋습니다.
MultiViews	브라우저의 능력에 따라서 적절한 형식으로 데이터를 전송해 주겠다는 옵션입니다.
SymLinksifOwnerMatch	링크를 허용하되 소유자/그룹이 일치할 경우에만 허용하겠다는 옵션입니다.
+, -	상위 디렉토리에 설정된 옵션에 대해서 그대로 적용하되 추가하거나 삭제할 옵션에 대한 설정을 할 경우에 사용한다.

<Directory "/usr/local/apache/htdocs">

#

# This may also be "None", "All", or any combination of "Indexes",

# "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".

#

# Note that "MultiViews" must be named *explicitly* --- "Options All"

# doesn't give it to you.

#

Options Indexes FollowSymLinks MultiViews

#

# This controls which options the .htaccess files in directories can

# override. Can also be "All", or any combination of "Options", "FileInfo",

# "AuthConfig", and "Limit"

#

◆설명: AllowOverride 는 어떻게 접근을 허락할 것인가에 대한 설정이다.

AllowOverride	설명
None	AccessFileName에서 명시한 파일(기본값은 .htaccess 파일)을 읽지 않겠다는 의미입니다.
All	새로운 인증방식에 대하여 Override(무효화)를 허락하겠다는 의미
AuthConfig	AccessFileName 지시자에 명시한 파일(기본값 .htaccess)에 대해서 인증 지시자 사용을 허락한다(인증 지시자는 아래쪽에 실제 인증해보는 예제에서 설명하겠습니다)
FileInfo	AccessFileName 지시자에 명시한 파일에 대하여 AddEndoding, Add-Language,AddType, DefaultType, ErrDocuemnt, Alaguage-Priority 등과 같은 문서 유형을 제어하는 지시자의 사용을 허락한다.
Indexes	AccessFileName지시자에 명시한 파일에 대하여 AddDescription, AddIcon, AddIconByEncoding,AddIconByType,DefaultIcon,DirectoryIndex,FancyIndexing,HeaderName,IndexIgnore,IndexOptions,ReadmeName 등과 같은 디렉토리 Indexing을 제어하는 지시자 사용을 허락한다.
Limit	클라이언트의 접근을 제어하는 지시자 사용을 허락한다.(allow,deny,order 등)

AllowOverride None

#

# Controls who can get stuff from this server.

#

Order allow,deny

Allow from all

</Directory>

#

# UserDir: The name of the directory which is appended onto a user's home

# directory if a ~user request is received.

#

◆설명: 사용자의 웹 디렉토리를 설정하는 부분입니다. http://abc.com/~kim 이런 식의 주소를 많이 보신 적이 있을 겁니다. 바로 이런 식으로  사용자의 디렉토리에 접근할 경우에 사용자의 디렉토리에서 찾을 디렉토리에 대한 설정입니다. 즉 사용자의 홈 디렉토리에 아래에서 설정한 디렉토리가 사용자의 홈페이지의 경로가 되는   것입니다.

<IfModule mod_userdir.c>

UserDir public_html

</IfModule>

#

# Control access to UserDir directories.  The following is an example

# for a site where these directories are restricted to read-only.

#

#<Directory /home/*/public_html>

#    AllowOverride FileInfo AuthConfig Limit

#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

#    <Limit GET POST OPTIONS PROPFIND>

#        Order allow,deny

#        Allow from all

#    </Limit>

#    <LimitExcept GET POST OPTIONS PROPFIND>

#        Order deny,allow

#        Deny from all

#    </LimitExcept>

#</Directory>

#

# DirectoryIndex: Name of the file or files to use as a pre-written HTML

# directory index.  Separate multiple entries with spaces.

#

◆설명: 클라이언트에서 웹서버로 접근했을 경우 기본 문서를 찾게되는데 찾게될 기본 문서들의 목록입니다.

만약에 이곳에 설정되어 있는 파일이 존재하지 않을 경우 기본디렉토리 설정에 Indexes 옵션이 있을 경우

파일과 디렉토리의 리스트가 나오게 됩니다.

<IfModule mod_dir.c>

DirectoryIndex index.html

</IfModule>

#

# AccessFileName: The name of the file to look for in each directory

# for access control information.

#

◆설명: 접근을 제어할 때 사용할 파일의 이름입니다. 기본값으로 놓아두셔도 되고 원하는 파일명으로 바꾸셔도 됩니다. 아파치에서 제공하는 인증기능을 사용할 때 찾게되는 파일의 이름입니다.

AccessFileName .htaccess

#

# The following lines prevent .htaccess files from being viewed by

# Web clients.  Since .htaccess files often contain authorization

# information, access is disallowed for security reasons.  Comment

# these lines out if you want Web visitors to see the contents of

# .htaccess files.  If you change the AccessFileName directive above,

# be sure to make the corresponding changes here.

#

# Also, folks tend to use names such as .htpasswd for password

# files, so this will protect those as well.

#

◆설명: .ht로 시작하는 파일에 대해서 접근할 경우에 접근을 금지하겠다는 부분입니다. 예전에 임으로 파일명을 추측하여 즉 http://abc.com/.htaccess 이런 식으로 접근했을 경우에 파일의 내용이 보였던 적이 있었습니다. 이런 경우를 방지하기 위해 나온 옵션입니다.

<Files ~ "^\.ht">

Order allow,deny

Deny from all

</Files>

#

# CacheNegotiatedDocs: By default, Apache sends "Pragma: no-cache" with each

# document that was negotiated on the basis of content. This asks proxy

# servers not to cache the document. Uncommenting the following line disables

# this behavior, and proxies will be allowed to cache the documents.

#

#CacheNegotiatedDocs

#

# UseCanonicalName:  (new for 1.3)  With this setting turned on, whenever

# Apache needs to construct a self-referencing URL (a URL that refers back

# to the server the response is coming from) it will use ServerName and

# Port to form a "canonical" name.  With this setting off, Apache will

# use the hostname:port that the client supplied, when possible.  This

# also affects SERVER_NAME and SERVER_PORT in CGI scripts.

#

◆설명: on으로 셋팅이 되었을 경우 아파치는 자기자신을 참조하는 URL을 구축하기 위해서 ServerName과 Port 지시자에 의해 표준적인 이름을 만들고 off로 셋팅이 되었을 경우 클라이언트가 요청하는 호스트네임과 포트를 사용하여 호스트 네임을 구성한다.

UseCanonicalName On

#

# TypesConfig describes where the mime.types file (or equivalent) is

# to be found.

#

◆설명: mime.types파일이 위치한 경로를 설정한다.

<IfModule mod_mime.c>

TypesConfig /usr/local/apache/conf/mime.types

</IfModule>

#

# DefaultType is the default MIME type the server will use for a document

# if it cannot otherwise determine one, such as from filename extensions.

# If your server contains mostly text or HTML documents, "text/plain" is

# a good value.  If most of your content is binary, such as applications

# or images, you may want to use "application/octet-stream" instead to

# keep browsers from trying to display binary files as though they are

# text.

#

◆설명:mime 타입에서 알 수 없는 문서에 대해서 기본적으로 사용하는 mime타입을 말한다.

DefaultType text/plain

#

# The mod_mime_magic module allows the server to use various hints from the

# contents of the file itself to determine its type.  The MIMEMagicFile

# directive tells the module where the hint definitions are located.

# mod_mime_magic is not part of the default server (you have to add

# it yourself with a LoadModule [see the DSO paragraph in the 'Global

# Environment' section], or recompile the server and include mod_mime_magic

# as part of the configuration), so it's enclosed in an <IfModule> container.

# This means that the MIMEMagicFile directive will only be processed if the

# module is part of the server.

#

<IfModule mod_mime_magic.c>

MIMEMagicFile /usr/local/apache/conf/magic

</IfModule>

#

# HostnameLookups: Log the names of clients or just their IP addresses

# e.g., www.apache.org (on) or 204.62.129.132 (off).

# The default is off because it'd be overall better for the net if people

# had to knowingly turn this feature on, since enabling it means that

# each client request will result in AT LEAST one lookup request to the

# nameserver.

#

◆설명: 아파치 로그파일에 기록될 클라이언트의 정보를 호스트 네임정보를 기록할 것인지 아니면 아이피로 기록할 것인지에 대한 설정이다. 기본적으로 off는 아이피 정보를 기록하게 되어 있다.

HostnameLookups Off

#

# ErrorLog: The location of the error log file.

# If you do not specify an ErrorLog directive within a <VirtualHost>

# container, error messages relating to that virtual host will be

# logged here.  If you *do* define an error logfile for a <VirtualHost>

# container, that host's errors will be logged there and not here.

#

◆설명: 에러 로그 파일의 위치

ErrorLog /usr/local/apache/logs/error_log

#

# LogLevel: Control the number of messages logged to the error_log.

# Possible values include: debug, info, notice, warn, error, crit,

# alert, emerg.

#

◆설명: 로그를 기록할 레벨

LogLevel warn

#

# The following directives define some format nicknames for use with

# a CustomLog directive (see below).

#

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent

#

# The location and format of the access logfile (Common Logfile Format).

# If you do not define any access logfiles within a <VirtualHost>

# container, they will be logged here.  Contrariwise, if you *do*

# define per-<VirtualHost> access logfiles, transactions will be

# logged therein and *not* in this file.

#

CustomLog /usr/local/apache/logs/access_log common

#

# If you would like to have agent and referer logfiles, uncomment the

# following directives.

#

#CustomLog /usr/local/apache/logs/referer_log referer

#CustomLog /usr/local/apache/logs/agent_log agent

#

# If you prefer a single logfile with access, agent, and referer information

# (Combined Logfile Format) you can use the following directive.

#

#CustomLog /usr/local/apache/logs/access_log combined

#

# Optionally add a line containing the server version and virtual host

# name to server-generated pages (error documents, FTP directory listings,

# mod_status and mod_info output etc., but not CGI generated documents).

# Set to "EMail" to also include a mailto: link to the ServerAdmin.

# Set to one of:  On | Off | EMail

#

ServerSignature On

# EBCDIC configuration:

# (only for mainframes using the EBCDIC codeset, currently one of:

# Fujitsu-Siemens' BS2000/OSD, IBM's OS/390 and IBM's TPF)!!

# The following default configuration assumes that "text files"

# are stored in EBCDIC (so that you can operate on them using the

# normal POSIX tools like grep and sort) while "binary files" are

# stored with identical octets as on an ASCII machine.

#

# The directives are evaluated in configuration file order, with

# the EBCDICConvert directives applied before EBCDICConvertByType.

#

# If you want to have ASCII HTML documents and EBCDIC HTML documents

# at the same time, you can use the file extension to force

# conversion off for the ASCII documents:

# > AddType       text/html .ahtml

# > EBCDICConvert Off=InOut .ahtml

#

# EBCDICConvertByType  On=InOut text/* message/* multipart/*

# EBCDICConvertByType  On=In    application/x-www-form-urlencoded

# EBCDICConvertByType  On=InOut application/postscript model/vrml

# EBCDICConvertByType Off=InOut */*

#

# Aliases: Add here as many aliases as you need (with no limit). The format is

# Alias fakename realname

#

<IfModule mod_alias.c>

#

# Note that if you include a trailing / on fakename then the server will

# require it to be present in the URL.  So "/icons" isn't aliased in this

# example, only "/icons/".  If the fakename is slash-terminated, then the

# realname must also be slash terminated, and if the fakename omits the

# trailing slash, the realname must also omit it.

#

◆설명: Alias 지시자는 아파치의 기본 문서 루트디렉토리 외의 다른 디렉토리를 별칭을 달아서 접근이 가능하게 해주는 지시자다. 아래의 경우 실제로 접근할 경우 /usr/local/apache/icons라를 디렉토리에 접근하기 위해서는 /usr/local/apache/htdocs/icons 의 구조로 되어 있어야만 http://www.abc.com/icons로 접근이 된다.

하지만 기본 문서의 루트 디렉토리 이외의 디렉토리에 접근이 가능하도록 하기 위한 지시자인 것이다.

Alias /icons/ "/usr/local/apache/icons/"

<Directory "/usr/local/apache/icons">

Options Indexes MultiViews

AllowOverride None

Order allow,deny

Allow from all

</Directory>

#

# ScriptAlias: This controls which directories contain server scripts.

# ScriptAliases are essentially the same as Aliases, except that

# documents in the realname directory are treated as applications and

# run by the server when requested rather than as documents sent to the client.

# The same rules about trailing "/" apply to ScriptAlias directives as to

# Alias.

#

◆설명: 위의 Alias지시자와 비슷하지만 실행스크립트를 디렉토리를 설정할 경우에 사용하는 지시자다.

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

#

# "/usr/local/apache/cgi-bin" should be changed to whatever your ScriptAliased

# CGI directory exists, if you have that configured.

#

<Directory "/usr/local/apache/cgi-bin">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>

</IfModule>

# End of aliases.

#

# Redirect allows you to tell clients about documents which used to exist in

# your server's namespace, but do not anymore. This allows you to tell the

# clients where to look for the relocated document.

# Format: Redirect old-URI new-URL

#

◆설명: Redirect 지시자는 서버에 존재하지 않는 문서에 대하여 새로운 URL로 포워딩을 해주는 지시자다.

사용 방법은 Redirect /test.html http://www.bbb.com의 형식으로 적어주면 된다.

위의 예제의 경우 서버에 test.html 이 없을 경우에 http://www.bbb.com으로 찾아가라는 예제이다.

# Directives controlling the display of server-generated directory listings.

#

◆설명: 아래의 지시자는 디렉토리의 목록을 보여줄 경우에 표준으로 보여줄 것인가 아니면 아이콘이나 파일크기까지 추가해서 보여줄 것인가에 대한 설정이다. 그 아래에 나오는 것들은 파일타입에 대하여 보여줄 아이콘의 위치와 확장자에 대한 설정이다.

<IfModule mod_autoindex.c>

#

# FancyIndexing is whether you want fancy directory indexing or standard

#

IndexOptions FancyIndexing

#

# AddIcon* directives tell the server which icon to show for different

# files or filename extensions.  These are only displayed for

# FancyIndexed directories.

#

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*

AddIconByType (IMG,/icons/image2.gif) image/*

AddIconByType (SND,/icons/sound2.gif) audio/*

AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe

AddIcon /icons/binhex.gif .hqx

AddIcon /icons/tar.gif .tar

AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv

AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip

AddIcon /icons/a.gif .ps .ai .eps

AddIcon /icons/layout.gif .html .shtml .htm .pdf

AddIcon /icons/text.gif .txt

AddIcon /icons/c.gif .c

AddIcon /icons/p.gif .pl .py

AddIcon /icons/f.gif .for

AddIcon /icons/dvi.gif .dvi

AddIcon /icons/uuencoded.gif .uu

AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl

AddIcon /icons/tex.gif .tex

AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..

AddIcon /icons/hand.right.gif README

AddIcon /icons/folder.gif ^^DIRECTORY^^

AddIcon /icons/blank.gif ^^BLANKICON^^

#

# DefaultIcon is which icon to show for files which do not have an icon

# explicitly set.

#

DefaultIcon /icons/unknown.gif

#

# AddDescription allows you to place a short description after a file in

# server-generated indexes.  These are only displayed for FancyIndexed

# directories.

# Format: AddDescription "description" filename

#

#AddDescription "GZIP compressed document" .gz

#AddDescription "tar archive" .tar

#AddDescription "GZIP compressed tar archive" .tgz

#

# ReadmeName is the name of the README file the server will look for by

# default, and append to directory listings.

#

# HeaderName is the name of a file which should be prepended to

# directory indexes.

#

# If MultiViews are amongst the Options in effect, the server will

# first look for name.html and include it if found.  If name.html

# doesn't exist, the server will then look for name.txt and include

# it as plaintext if found.

#

ReadmeName README

HeaderName HEADER

#

# IndexIgnore is a set of filenames which directory indexing should ignore

# and not include in the listing.  Shell-style wildcarding is permitted.

#

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

</IfModule>

# End of indexing directives.

#

# Document types.

#

<IfModule mod_mime.c>

#

# AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress

# information on the fly. Note: Not all browsers support this.

# Despite the name similarity, the following Add* directives have nothing

# to do with the FancyIndexing customization directives above.

#

AddEncoding x-compress Z

AddEncoding x-gzip gz tgz

#

# AddLanguage allows you to specify the language of a document. You can

# then use content negotiation to give a browser a file in a language

# it can understand.

#

# Note 1: The suffix does not have to be the same as the language

# keyword --- those with documents in Polish (whose net-standard

# language code is pl) may wish to use "AddLanguage pl .po" to

# avoid the ambiguity with the common suffix for perl scripts.

#

# Note 2: The example entries below illustrate that in quite

# some cases the two character 'Language' abbreviation is not

# identical to the two character 'Country' code for its country,

# E.g. 'Danmark/dk' versus 'Danish/da'.

#

# Note 3: In the case of 'ltz' we violate the RFC by using a three char

# specifier. But there is 'work in progress' to fix this and get

# the reference data for rfc1766 cleaned up.

#

# Danish (da) - Dutch (nl) - English (en) - Estonian (ee)

# French (fr) - German (de) - Greek-Modern (el)

# Italian (it) - Korean (kr) - Norwegian (no)

# Portugese (pt) - Luxembourgeois* (ltz)

# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)

# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)

# Russian (ru)

#

AddLanguage da .dk

AddLanguage nl .nl

AddLanguage en .en

AddLanguage et .ee

AddLanguage fr .fr

AddLanguage de .de

AddLanguage el .el

AddLanguage he .he

AddCharset ISO-8859-8 .iso8859-8

AddLanguage it .it

AddLanguage ja .ja

AddCharset ISO-2022-JP .jis

AddLanguage kr .kr

AddCharset ISO-2022-KR .iso-kr

AddLanguage no .no

AddLanguage pl .po

AddCharset ISO-8859-2 .iso-pl

AddLanguage pt .pt

AddLanguage pt-br .pt-br

AddLanguage ltz .lu

AddLanguage ca .ca

AddLanguage es .es

AddLanguage sv .se

AddLanguage cz .cz

AddLanguage ru .ru

AddLanguage zh-tw .tw

AddLanguage tw .tw

AddCharset Big5         .Big5    .big5

AddCharset WINDOWS-1251 .cp-1251

AddCharset CP866        .cp866

AddCharset ISO-8859-5   .iso-ru

AddCharset KOI8-R       .koi8-r

AddCharset UCS-2        .ucs2

AddCharset UCS-4        .ucs4

AddCharset UTF-8        .utf8

# LanguagePriority allows you to give precedence to some languages

# in case of a tie during content negotiation.

#

# Just list the languages in decreasing order of preference. We have

# more or less alphabetized them here. You probably want to change this.

#

<IfModule mod_negotiation.c>

LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw

</IfModule>

#

# AddType allows you to tweak mime.types without actually editing it, or to

# make certain files to be certain types.

#

# For example, the PHP 3.x module (not part of the Apache distribution - see

# http://www.php.net) will typically use:

#

#AddType application/x-httpd-php3 .php3

#AddType application/x-httpd-php3-source .phps

#

# And for PHP 4.x, use:

#

#AddType application/x-httpd-php .php

#AddType application/x-httpd-php-source .phps

AddType application/x-tar .tgz

#

# AddHandler allows you to map certain file extensions to "handlers",

# actions unrelated to filetype. These can be either built into the server

# or added with the Action command (see below)

#

# If you want to use server side includes, or CGI outside

# ScriptAliased directories, uncomment the following lines.

#

# To use CGI scripts:

#

◆설명: cgi 스크립트를 쓰기 위한 특정확장자를 셋팅해 주는 부분이다.

#AddHandler cgi-script .cgi

#

# To use server-parsed HTML files

#

◆SSI를 사용하기 위한 확장자를 셋팅해 주는 부분이다. 아래의 주석을 풀어주었을 경우에는 .shtml.로 끝나는 파일은 SSI를 사용하게 된다.

#AddType text/html .shtml

#AddHandler server-parsed .shtml

#

# Uncomment the following line to enable Apache's send-asis HTTP file

# feature

#

#AddHandler send-as-is asis

#

# If you wish to use server-parsed imagemap files, use

#

#AddHandler imap-file map

#

# To enable type maps, you might want to use

#

#AddHandler type-map var

</IfModule>

# End of document types.

#

# Action lets you define media types that will execute a script whenever

# a matching file is called. This eliminates the need for repeated URL

# pathnames for oft-used CGI file processors.

# Format: Action media/type /cgi-script/location

# Format: Action handler-name /cgi-script/location

#

#

# MetaDir: specifies the name of the directory in which Apache can find

# meta information files. These files contain additional HTTP headers

# to include when sending the document

#

#MetaDir .web

#

# MetaSuffix: specifies the file name suffix for the file containing the

# meta information.

#

#MetaSuffix .meta

#

# Customizable error response (Apache style)

#  these come in three flavors

#

#    1) plain text

#ErrorDocument 500 "The server made a boo boo.

#  n.b.  the single leading (") marks it as text, it does not get output

#

#    2) local redirects

#ErrorDocument 404 /missing.html

#  to redirect to local URL /missing.html

#ErrorDocument 404 /cgi-bin/missing_handler.pl

#  N.B.: You can redirect to a script or a document using server-side-includes.

#

#    3) external redirects

#ErrorDocument 402 http://some.other_server.com/subscription_info.html

#  N.B.: Many of the environment variables associated with the original

#  request will *not* be available to such a script.

#

# Customize behaviour based on the browser

#

<IfModule mod_setenvif.c>

#

# The following directives modify normal HTTP response behavior.

# The first directive disables keepalive for Netscape 2.x and browsers that

# spoof it. There are known problems with these browser implementations.

# The second directive is for Microsoft Internet Explorer 4.0b2

# which has a broken HTTP/1.1 implementation and does not properly

# support keepalive when it is used on 301 or 302 (redirect) responses.

#

BrowserMatch "Mozilla/2" nokeepalive

BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

#

# The following directive disables HTTP/1.1 responses to browsers which

# are in violation of the HTTP/1.0 spec by not being able to grok a

# basic 1.1 response.

#

BrowserMatch "RealPlayer 4\.0" force-response-1.0

BrowserMatch "Java/1\.0" force-response-1.0

BrowserMatch "JDK/1\.0" force-response-1.0

</IfModule>

# End of browser customization directives

#

# Allow server status reports, with the URL of http://servername/server-status

# Change the ".your_domain.com" to match your domain to enable.

#

◆설명: 서버의 정보를 보고자 할 경우에 아래의 주석을 풀어주면 볼 수가 있다.

#<Location /server-status>

#    SetHandler server-status

#    Order deny,allow

#    Deny from all

#    Allow from .your_domain.com

#</Location>

#

# Allow remote server configuration reports, with the URL of

# http://servername/server-info (requires that mod_info.c be loaded).

# Change the ".your_domain.com" to match your domain to enable.

#

◆설명: 역시 서버의 정보를 보고자 할 경우에 사용되는 부분이다. 대신에 mod_info.c라는 모듈이 올라와 있어야만 가능하다.

#<Location /server-info>

#    SetHandler server-info

#    Order deny,allow

#    Deny from all

#    Allow from .your_domain.com

#</Location>

#

# There have been reports of people trying to abuse an old bug from pre-1.1

# days.  This bug involved a CGI script distributed as a part of Apache.

# By uncommenting these lines you can redirect these attacks to a logging

# script on phf.apache.org.  Or, you can record them yourself, using the script

# support/phf_abuse_log.cgi.

#

#<Location /cgi-bin/phf*>

#    Deny from all

#    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi

#</Location>

#

# Proxy Server directives. Uncomment the following lines to

# enable the proxy server:

#

#<IfModule mod_proxy.c>

#    ProxyRequests On

#    <Directory proxy:*>

#        Order deny,allow

#        Deny from all

#        Allow from .your_domain.com

#    </Directory>

#

# Enable/disable the handling of HTTP/1.1 "Via:" headers.

# ("Full" adds the server version; "Block" removes all outgoing Via: headers)

# Set to one of: Off | On | Full | Block

#

#    ProxyVia On

#

# To enable the cache as well, edit and uncomment the following lines:

# (no cacheing without CacheRoot)

#

#    CacheRoot "/usr/local/apache/proxy"

#    CacheSize 5

#    CacheGcInterval 4

#    CacheMaxExpire 24

#    CacheLastModifiedFactor 0.1

#    CacheDefaultExpire 1

#    NoCache a_domain.com another_domain.edu joes.garage_sale.com

#</IfModule>

# End of proxy directives.

### Section 3: Virtual Hosts

#

◆설명: 아파치가 가지고 있는 가상호스트에 대한 설정이다. 아래의 예제는 네임기반의 가상호스트 설정이 되어 있다. 아래의 예제를 보고 상황에 맞게 셋팅을 해주면 됩니다. 단 주의 해야 할 것은 가상호스트만 셋팅해주면 여러개의 사이트를 운영하더라도 기본 웹서버만 보인다는 것입니다.

즉 기본 웹서버 역시 가상호스트로 셋팅을 해주셔야 합니다.

# VirtualHost: If you want to maintain multiple domains/hostnames on your

# machine you can setup VirtualHost containers for them. Most configurations

# use only name-based virtual hosts so the server doesn't need to worry about

# IP addresses. This is indicated by the asterisks in the directives below.

#

# Please see the documentation at <URL:http://www.apache.org/docs/vhosts/>

# for further details before you try to setup virtual hosts.

#

# You may use the command line option '-S' to verify your virtual host

# configuration.

#

# Use name-based virtual hosting.

#

◆설명: 아래에는 웹서버의 아이피를 적어주시면 됩니다.

#NameVirtualHost *

#

# VirtualHost example:

# Almost any Apache directive may go into a VirtualHost container.

# The first VirtualHost section is used for requests without a known

# server name.

#

실제 예제)

<기본서버에 대한 설정>

<VirtualHost 111.222.222.222>

DocumentRoot /www/docs/dummy-host.example.com(기본 서버의 문서 디렉토리 입니다.)

ServerName www.abc.com(실제 웹서버의 서버네임입니다.)

</VirtualHost>

<호스팅할 웹서버에 대한 설정>

<VirtualHost 111.222.222.222>

ServerAdmin 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>

이로서 대략적인 아파치 웹서버의 환경설정에 대해서 알아보았습니다.

아파치 웹서버 활용

지금까지 아파치 웹서버의 기본적인 설치와 환경 설정에 대해서 알아보았습니다. 이번에는 좀더 아파치에 다양한 기능을 추가해 보고 다양하게 설치하는 방법에 대해서 알아보겠습니다.

아파치 웹서버는 두 가지 유형으로 설치할 수 있습니다. 한가지는 static방식으로 설치하는 것이고 다른 한가지는 DSO를 지원하도록 설치하는 방식으로 나눌 수 있습니다. static방식은 특정기능을 아파치 웹서버를 설치하는 과정에서 추가시켜주는 것이라고 이해하시면 됩니다. DSO 지원방식은 이미 설치되어 있는 아파치 웹서버에 필요한 기능을 적재하여 사용한다고 보시면 됩니다. 두 가지 방식은 서로 장단점이 있습니다. static방식으로 설치할 경우에는 필요한 기능이 이미 아파치 웹 서버안에 내장이 되므로 응답속도가 빠르다는 장점이 있습니다. 대신에 메모리의 사용량이 높다고 합니다. 그리고 만약에 새로운 기능을 추가하고 싶을 경우에는 새로 컴파일 해야한다는 단점이 있습니다. DSO 지원 방식으로 설치했을 경우 모듈이 적재되는 시간 때문에 응답속도가 느려질 수 있다는 단점이 있습니다. 그러나 필요한 기능을 추가하고 싶을 경우에는 아파치 웹서버에 단지 모듈만 적재해주면 되므로 재 컴파일할 필요가 없다는 장점이 있습니다. 자신의 상황에 맞게 설치하도록 하세요.

<아파치에 php 스크립트를 인식하도록 설치하기>

◆static 방식으로 설치하기◆

† 계획: 아파치 웹서버+mysql+php

† 설치 순서

mysql→php→apache webserver

◈mysql을 먼저 설치하는 것은 php와 mysql을 연동하기 위해서입니다. 다른 데이터 베이스를 이용할 계획이라면 먼저 데이터베이스 서버를 설치해 주어야 합니다.

먼저 소스들을 모두 받아 둡니다.

<mysql 데이터베이스 서버 설치하기>

① mysql 소스를 받는다. 그런 다음에 압축을 해제합니다.

② mysql 소스디렉토리로 이동하여 ./configure를  해 줍니다.

./configure --prefix=/usr/local/mysql(mysql을 설치할 디렉토리) --with-charset=euc_kr(한글지원을 위한 옵션) --localstatedir=/usr/local/mysql/data(데이터 베이스가 생성될 위치, 안해주시면 기본값으로 var디렉토리에 저장됩니다.) 모두 한 줄에 적어주세요

제대로 환경설정이 끝났다면 아래와 같은 메시지를 보실수 있습니다.

③make; make install

<php 설치하기>

① 아파치 소스를 받아서 압축을 풀어줍니다.

② 아파치 소스디렉토리로 이동하여 ./configure를 한번 실행해 줍니다.

③ php 소스를 압축을 풀어줍니다.

④ php 소스디렉토리로 이동하여 ./configure 실행

⑤ ./configure

--with-apache=아파치 소스디렉토리의 디렉토리의 위치

--with-config-file-path=/usr/local/apache/conf(php 환경설정 파일인 php.ini 파일의 위치입니다. 안 적어 주시면 기본값으로 /usr/local/lib 아래에 php.ini를 위치시켜 주시면 됩니다)

--with-mysql=/usr/local/mysql(mysql이 설치되어 있는 디렉토리)

모두 한 줄에 적어주면 됩니다.

php가 더 많은 기능을 수행하게 하고 싶다면 여러 가지를 같이 연동하실 수도 있습니다.

⑥make; make install

<아파치 웹서버 설치하기>

① 아파치 소스디렉토리로 이동합니다.

② 아파치 소스디렉토리에서 configure 실행

--prefix=/usr/local/apache(아파치를 /usr/local 아래에 설치하겠다는 옵션입니다.)

--activate-moduel=src/modules/php4/libphp4.a(실제로 아파치 소스 디렉토리에 가보시면 소스디렉토리/src/php4라는 디렉토리가 생성이 되어 있으며 그 디렉토리에 가보시면 libphp4.a라는 파일은 존재하지 않습니다. 이것은 컴파일 과정중에 생성이 되는 것이므로 그대로 써주시면 됩니다.)

③make ; make install

< 서버설정 및 환경구축>

아무 문제가 발생되지 않고 여기까지 오셨다면 이제 본격적으로 서버운영을 위한 준비를 해봅시다.

먼저 가장 먼저 설치했던 mysql 데이터베이스 서버에 대한 설정입니다.

① 데이터 베이스 생성: mysql 설치 디렉토리로 이동한 후에 ./mysql_install_db를 실행해 줍니다.

② 데이터 베이스가 생성이 되었는지 확인, --localstatedir=/usr/local/mysql/data라고 옵션을 주셨다면 data라는 디렉토리가 생성이 되고 그곳에 mysql, test 라는 디렉토리가 생성이 되어있습니다. 옵션을 주지 않았다면

/usr/local/mysql/var 라는 곳에 위치합니다. 두 개의 디렉토리가 보이면 일단 데이터 베이스는 생성이 된 것입니다.

③ 데이터 베이스  서버 시작하기

mysql 설치디렉토리의 bin디렉토리로 이동한 후 safe_mysqld &

④ 데이터 베이스가 구동이 되고 있는지 확인

⑤ 시작할 때마다 mysql 자동으로 시작하기

여러 가지 방법들이 있지만 가장 쉬운 방법으로 하겠습니다. /usr/local/mysql/share/mysql 디렉토리에 가보시면 mysql.server라는 파일이 있습니다. 이것을 /etc/rc.d/init.d/mysql이라는 파일로 복사를 합니다.

⑥ 퍼미션을 755 로 주신 다음에 ntsysv실행

⑦ ntsysv화면에서 mysql 체크

⑧ php.ini 복사하기(php의 환경설정 파일입니다.)

php 설치하실 때 ./configure --with-config-file-path=/usr/local/apache/conf라는 옵션을 주셨다면 /usr/local/apache/conf에 복사를 하셔야 되며 옵션을 주지 않았다면 /usr/local/lib 디렉토리에 복사하시면 됩니다. php.ini화일은 존재하지 않으며 php 소스디렉토리에서 php.ini-dist라는 파일을 복사하시면 됩니다.

⑨ 아파치 웹서버에서 php를 인식할 수 있게 하기

먼저 아파치 설치디렉토리로 이동한 후에 httpd.conf 파일을 편집합니다.

vi /usr/local/apache/conf/httpd.conf

위처럼 되어있는 라인을 찾아서 아래와 같이 변경해 줍니다.

주석을 제거를 해주었으며 여러 가지 확장자를 지원하도록 셋팅을 했습니다. 위 쪽에 php 4.x대를 위한 곳이라는 메시지를 잘 보시기 바랍니다. 비슷한 부분이 바로 위쪽에 또 있는데 그곳은 php 3.x대 버전을 위한 곳이 존재합니다. 주석을 잘못 제거를 하시면 php파일에 웹브라우저로 접근할 경우 다운로드 받는 사태가 발생합니다.

⑩ 아파치 웹서버 실행하기

아파치 설치디렉토리로 이동하여 apachectl start

⑪ php 확인해보기

/usr/local/apache/htdocs 디렉토리에 test.php화일 만들기

cat>test.php

<?

phpinfo();

?>

ctrl+d

⑫ 웹브라우저로 확인해 보기

브라우저에서 이런 화면이 보이면 모든 설정이 끝난겁니다. 위와 비슷하게 나오면 됩니다. 현재 제 설정이 좀 달라서 약간 틀리게 나오는 것입니다.

⑬ 아파치 웹서버 자동으로 시작하기

/etc/rc.d/rc.local 파일에 다음과 같이 한 줄을 추가해줍니다.

echo "/usr/local/apache/bin/apachectl restart">>/etc/rc.d/rc.local

vi 에디터로 추가 시켜주셔도 됩니다.

자동으로 시작하는 방법은 여러 가지가 있습니다.

다음과 같은 스크립트를 만들어서 사용하셔도 됩니다.

#!/bin/sh

#####아파치 스크립트######

# Startup script for the Apache Web Server

#

# chkconfig: 345 85 15

# description: Apache is a World Wide Web server.  It is used to serve \

#              HTML files and CGI.

# processname: httpd

# pidfile: /usr/local/apache/logs/httpd.pid

# config: /usr/local/apache/conf/httpd.conf

# Source function library.

. /etc/rc.d/init.d/functions

# See how we were called.

case "$1" in

start)

echo -n "Starting httpd: "

daemon /usr/local/apache/bin/httpd

echo

touch /var/lock/subsys/httpd

;;

stop)

echo -n "Shutting down http: "

killproc httpd

echo

rm -f /var/lock/subsys/httpd

rm -f /usr/local/apache/logs/httpd.pid

;;

status)

status httpd

;;

restart)

$0 stop

$0 start

;;

reload)

echo -n "Reloading httpd: "

killproc httpd -HUP

echo

;;

*)

echo "Usage: $0 {start|stop|restart|reload|status}"

exit 1

esac

exit 0

위의 내용을 httpd로 저장하신 다음에 /etc/rc.d/init.d/ 디렉토리에  복사 합니다.

그런 다음에 ntsysv를 실행하여 httpd를 체크해 주시면 됩니다.

◆ 아파치 웹서버 DSO방식으로 설치하기 ◆

전에 설명했듯이 아파치 웹서버를 DSO로 설치를 하면 나중에 아파치 웹서버에 새로운 기능을 추가하기 위해서 재 컴파일 할 필요가 없다는 장점이 있습니다.

† 계획: 아파치 웹서버+mysql+php

† 설치 순서

apache webserver→mysql→php

※참고로 아파치 웹서버를 먼저 설치하던지 mysql을 먼저 설치하던지 간에 큰 상관은 없습니다.

먼저 설치를 위한 소스파일들을 받습니다. 어디에서 받는지 모르겠다면 www.linuxstudy.pe.kr로 접속해 보시면 리눅스 자료실에 필요한 소스들을 모두 모아두었습니다. 받아서 해보세요.

<mysql 설치>

mysql 설치는 static방식으로 설치하는 과정과 동일하므로 생략합니다.

<아파치 웹서버 설치>

① 먼저 아파치 소스파일을 압축해제 합니다.

② 아파치를 설치합니다.

./configure

--prefix=/usr/local/apache(이 옵션은 static방식으로 설치했을 경우와 동일합니다. /usr/local/apache에 아파치를 설치하겠다는 옵션입니다.)

--enable-module=so(mod_so 라는 모듈을 생성하겠다는 옵션입니다)

--enable-shared=max( --enable-shared의 사용법은 특정모듈을 DSO 기반 모듈로 만들 것인지에 대한 설정입니다. max는 기본적으로 아파치에서 사용 가능한 모듈을 모두 사용하겠다는 옵션입니다. 단. 부트 스트래핑모듈인(mod_so)를 제외하고 만들어 주는 옵션입니다.)

--enable-rule=SHARD_CORE(플랫폼에 따라서 DSO 메카니즘으로 동작하기 위한 옵션입니다. 써주시는 것이 좋을 듯 합니다.)

모두 한 줄에 적어주시면 됩니다.

③ make

make install

④ 설치가 성공적으로 끝났다면 설치된 디렉토리(위에서 설정한 대로라면 /usr/local/apache에 설치가 되어 있습니다.)로 이동하여 모듈들이 설치가 되어있는지 확인해 봅니다.(/usr/local/apache/libexec 디렉토리입니다)

⑤ 아파치 실행파일이 있는 /usr/local/apache/bin디렉토리로 가서 적재되어 있는 모듈을 확인한 다음 아파치 웹서버를 시작해 봅니다. 적재되어 있는 모듈을 확인하는 방법은 httpd -l 로 하시면 됩니다.

DSO 방식으로 설치하시면 기본적으로 부트스트래핑 모듈인 mod_so와 http_core두개의 모듈만이 컴파일되고 나머지 모듈들은 필요할 때마다 자동으로 적재를 하게 됩니다.

⑥ 아파치 서버 시작

⑦ 아파치 웹서버가 동작하는지 확인해 봅니다.

정상적으로 아파치 웹서버가 구동이 되고 있다면 위와 같이 나옵니다.

아파치 웹서버의 설치가 끝났습니다.^^

< php 설치하기 >

① 먼저 php 소스를 받아서 압축을 해제한 다음 소스디렉토리로 이동합니다.

② php 설치를 위한 환경 설정을 합니다. static 방식으로 설치하는 것과 거의 동일합니다.

모두 한줄에 적어주시면 됩니다. static방식과 다른 점은 --with-apache=아파치 소스디렉토리

가 --with-apxs=아파치 설치디렉토리/bin/apxs로 되었다는 점입니다.

* apxs라는 실행파일은 모듈을 제작하고자 할 경우에 사용하는 유틸리티 입니다.

성공적으로 환경설정이 끝났다면 아래와 같은 메시지를 보실 수 있습니다.

③ make

④ make install

⑤ php 설치가 성공적으로 끝났는지 확인해 봅니다. 아파치설치 디렉토리/libexec 디렉토리로 가시면

libphp4.so라는 파일이 생성이 되어 있습니다.

⑥ 아파치 웹서버 환경설정 해주기.

static 방식과 마찬가지로 php.ini 파일을 /usr/local/apache/conf 디렉토리에 복사해 줍니다.

--with-config-file-path 옵션을 주지 않았다면 /usr/local/lib 디렉토리에 위치시켜주시면 됩니다.

아파치 웹서버 환경설정 파일인 /usr/local/apache/conf/httpd.conf 파일을 열어서 php를 위한 설정을 해줍니다.

아래는 httpd.conf 파일의 일부분입니다. 아래와 같이 설정이 되어 있으면 됩니다.

.

아파치 웹서버에서 php를 인식할 수 있도록 설정해 주는 부분입니다.

<변경 전>

<변경 후>

주석을 제거를 해주었으며 여러 가지 확장자를 지원하도록 셋팅을 했습니다. 위쪽에 php 4.x대를 위한 곳이라는 메시지를 잘 보시기 바랍니다. 비슷한 부분이 바로 위쪽에 또 있는데 그곳은 php 3.x대 버전을 위한 곳이 존재합니다. 주석을 잘못 제거를 하시면 php파일에 웹브라우저로 접근할 경우 다운로드 받는 사태가 발생합니다.

⑦ 아파치 웹서버 재시작 하기

/usr/local/apache/bin/apachectl restart 하시면 아마도 아래와 같은 에러가 발생할 수도 있습니다.

위와 같은 에러 메시지는 php 와 mysql이 연동되게 셋팅했을 경우에 mysql의 라이브러리파일을 못 찾아서 나는 에러입니다. 이런 경우에는 mysql의 라이브러리를 찾을 수 있도록 해주면 됩니다.

/etc/ld.so.conf 파일을 열어서 다음과 같이  한 줄을 추가해 줍니다.

/usr/local/mysql/lib/mysql

그런 다음에 ldconfig 명령을 실행해 줍니다.

이제 아파치 웹서버를 재시작 하시면 아무 에러 없이 아파치 웹서버가 구동이 될 겁니다.

ps aux 명령으로 프로세서를 확인하시고 test용 php파일을 만들어서 테스트 해봅니다.

/usr/local/apache/htdocs 디렉토리에 test.php화일 만들기

cat>test.php

<?

phpinfo();

?>

ctrl+d

⑫ 웹브라우저로 확인해 보기

아래와 같은 페이지를 보셨다면 모두 성공하신 겁니다.

2) mysql 서버운영하기

실제로 데이터 베이스를 운영하기 위해서는 많은 공부를 하셔야 합니다. 여기서는 기본적인 것들에 대해서만

설명하도록 하겠습니다.

<mysql 기본 사용법>

일단 mysql 서버를 운영하는데 필요한 기본적인 명령어들을 살펴봅니다. 위에서 설치한 상황에 따르면 기본 명령어들은 /usr/local/mysql/bin에 위치합니다.

* isamchk - mysql 테이블을 체크하거나, 최적화 또는 이상 상태를 수정할 경우에 사용합니다.

* myisamchk - mysql이 버전업이 되면서 .ism 파일이 .MYI로 변경이 되었습니다. 위의 isamchk와 동일합니다.(.ism파일은 테이블에 대한 인덱스 정보를 담고 있는 파일입니다.)

사용법: myisamchk [OPTIONS] tables[.MYI]

예제) 테이블 체크하기

아래의 예제는 test라는 데이터베이스의 stone이라는 테이블을 검사하고 있습니다.(위에서 우리는 /usr/local/mysql/data라는 디렉토리에 데이터 베이스를 생성했습니다.) 만약에 Deleted blocks가 0 이 아니고 너무 큰 값이 존재하면 공간의 낭비가 많다는 것을 의미합니다.

table에 문제가 생겼을 경우에 복구를 할 경우 -r옵션은 주시면 됩니다.

자세한 옵션은 ./myisamchk --help 해보시면 아실 수 있습니다.

* mysql - mysql 클라이언트 프로그램입니다. telnet, ftp 와 마찬가지로 mysql서버에 접속하기 위한 클라이언트 프로그램입니다.

* mysql_install_db - mysql을 설치한 후 table을 만들 때 사용하는 스크립트 파일입니다.

* safe_mysqld - mysql 서버 데몬 스크립트입니다.

* mysqladmin - mysql을 관리하기 위한 명령어입니다. 서버에 관련된 여러 가지 명령들을 수행합니다.

사용법 mysqladmin 옵션

옵션)

① create 데이터베이스명 - 새로운 디비를 생성합니다.

② drop 데이터베이스명 - 디비를 삭제합니다.

③ reload	- 디비서버를 재시작 합니다.

④ kill 아이디 - mysql 의 쓰레드를 죽입니다.

⑤ password - 패스워드를 변경합니다.

⑥ ping - mysql 서버의 상태를 확인합니다.

* mysqlaccess - mysql 서버에 대한 접근 권한에 대해서 보여주는 명령입니다.

사용법 mysqlaccess 호스트 유저 데이터베이스

* mysqlshow - mysql서버에 존재하는 데이터베이스나 테이블의 정보를 보고자 할 경우에 사용하는 명령입니다.

사용법 mysqlshow 데이터베이스명 테이블명

* mysqldump - 데이터베이스를 txt형식으로 백업 받을 때 쓰는 명령어입니다.

사용법 mysqldump 백업받은 데이터베이스>저장될 파일명

< mysql 실습 >

◆ 데이터베이스 생성과 삭제 ◆

데이터 베이스를 생성하기

데이터베이스의 생성은 디비 관리자만이 할수 있습니다.

① mysqladmin을 이용하여 데이터 베이스 생성하기

아래의 예제는 project라는 데이터 베이스를 생성하는 예제입니다.

mysqladmin create project

데이터 베이스가 생성되었는지 확인해 봅니다. 확인하는 방법은 mysqlshow를 이용하던지 아니면 간단한 방법으로 /usr/local/mysql/data에 디렉토리가 생성되었는지 확인해 보시면 됩니다.

② mysql클라이언트 프로그램으로 서버에 접속한 후 직접 만들기

쉘 상태에서 mysql이라고 입력합니다.(물론 이미 패스에 설정이 되어 있어야만 mysql 클라이언트 프로그램이 실행됩니다. 패스설정이 안되어 있다면 자신의 홈디렉토리에서 .bash_profile을 편집하여 패스를 설정해 주어야 합니다. PATH= 이라고 되어 있는 부분에 /usr/local/mysql/bin을 추가 시켜줍니다.)

아래는 mysql서버에 접속하는  화면입니다.

특정 데이터베이스에 접속할려면 mysql 데이터베이스명 이런 식으로 해주시면 됩니다. 물론 나중에 패스워드나 디비유저명을 필요로 한다면 써주어야 합니다.

아래는 mysql 서버에 접속한 다음 linux라는 데이터 베이스를 만들고 확인하는 과정입니다.

데이터베이스 삭제하기

데이터 베이스 생성과 비슷한 과정을 거칩니다.

① mysqladmin을 이용한 삭제

mysqladmin drop 데이터베이스명

위에서 만들었던 project 라는 데이터 베이스를 삭제해 봅니다.

mysqladmin drop project

② mysql에 접속된 상태에서 데이터베이스 지우기

아래의 예제는 linux라는 데이터 베이스를 지우고 확인하는 과정입니다.

<sql사용하기>

table 만들기

테이블은 표라고 생각하면 이해하기가 편합니다.

예를 들면 한 학급의 학생의 이름과 성적을 위한 테이블을 짠다고 생각해 봅시다. 대개는 이런 식으로 만들어 지겠죠...

이름	국어	영어	수학
김서방	90	80	100
김경민	80	50	70
홍길동	60	30	70

약간 색깔이 있는 것들은 필드라고 하고요 아래쪽에 나오는 것들을 레코드라고 합니다.

물론 데이터베이스 설계를 잘하면 좀더 세련되게 만들 수 있겠지만 기본적인 것만 설명 드립니다.

위와 같이 테이블을 만들어 보도록 하겠습니다.

테이블을 만드는 명령은 create table 테이블명(필드 필드타입(자료형) 필드속성) 식으로 만들어 주시면 됩니다.

mysql설치 후  기본적으로 만들어지는 test라는 데이터베이스에 class라는 테이블을 생성해 보겠습니다.

아래의 예제는 test라는 데이터 베이스에 class라는 테이블을 생성하는 과정입니다.

※mysql 의 기본 데이터 형

int - 4byte의 정수

char(N) - N개의 문자

varchar(N) - N개를 넘지않는 문자

Text - 최대 65535개의 문자

mysql은 기본 데이터형 말고도 많은 데이터형을 지원합니다. 나머지 부분에 대한 것은 스스로 공부하시길...

table 삭제하기

drop table 테이블명

아래는 class 테이블의 존재를 확인하고 class table을 삭제하는 과정입니다.

삭제 되었는지 확인해 봅시다.

table 수정하기

alter table  테이블명 [add,drop,change,modify,rename 기타등등]

먼저 테이블 생성하기에서 해보았던 예제처럼 테이블을 하나 생성해 봅니다.

아래의 예제에서 use test라고 되어있는 부분은 test라는 데이터 베이스를 사용하겠다고 하는 것입니다.

자기가 접근할 수 있는 데이터베이스가 많다면 use명령을 이용하여 데이터 베이스를 바꿔서 작업을 할 수 있습니다.

필드 추가하기

현재 위에서는 name, korea, english,math라는 4개의 필드가 존재합니다. 여기에 history라는 필드를 추가를 해보겠습니다. history 필드는 int 형으로 추가를 하였습니다. 아래에 보시면 history라는 필드가 추가 되었다는 것을 보실 수 있습니다.

* alter table 테이블명 add 필드명 필드속성

필드 지우기

기존에 존재하는 필드를 삭제하는 방법입니다.

* alter table 테이블명 drop 필드명

아래의 예제는 방금 전에 만들었던 history라는 필드를 삭제하고 확인하는 과정입니다.

필드 변경하기

기존에 존재하는 필드를 변경하는 방법입니다.

* alter table 테이블명 change 필드 새필드명 필드속성

* alter table 테이블명 modify 필드 필드속성

change 와 modify는 거의 비슷한 역할을 하는데 약간의 차이가 있습니다. change의 경우에는 필드명까지 바꿀 수 있지만 modify의 경우 필드명이 같다는 전제하에서 변경이 이루어집니다.

아래의 예제는 english라는 필드를 영어라고 바꾸고 데이터형을 smallint형으로 바꾸는 경우입니다.(필드명은 영어로 쓰는 것이 좋습니다. 한글 때문에 에러가 나는 경우가 종종 있습니다.)

아래의 예제는 change와 modify를 이용하여 math라는 필드의 데이터형을 변경하는 예제입니다. change와 modify의 차이를 눈여겨보시길...

아래의 예제는 change를 이용하여 math필드의 데이터형을 smallint형으로 변경하는 예제입니다.

아래의 예제는 modify를 이용하여 math필드의 데이터형을 smallint형으로 변경하는 예제입니다.

change로 변경하는 것과 똑같은 결과가 나왔습니다. 명령이 약간 틀리다는 점을 기억하시길.

테이블 이름 변경하기

* alter table 테이블명 rename 새 테이블명

* rename table 테이블명 to 새 테이블명

아래의 예제는 class라는 테이블을 member라는 테이블로 바꾸는 예제입니다. show tables 명령은 현재 데이터베이스에 존재하는 테이블들을 보는 명령입니다.

예제) alter table 테이블명 rename 새 테이블명

예제)rename table 테이블명 to 새 테이블명

아래의 예제는 위에서 변경한 member테이블을 linuxer테이블로 이름을 변경하는 예제입니다.

<데이터 조작하기>

데이터 삽입

* insert into 테이블명 (필드) values(입력값)

이제 직접 데이터를 입력해 봅시다. 우리가 만들었던 그리고 가지고 놀았던 class테이블이 linuxer테이블로 바뀌었군요...

아래의 예제는 데이터를 입력하는 과정입니다. insert into 테이블명 다음에 필드를 지정하지 않으면 기본적으로 desc 테이블명 했을 때 나타나는 순서대로 데이터가 입력됩니다.

아래의 예제는 연속적으로 데이터를 입력하는 예제입니다.

특정한 필드에 레코드값을 넣으려면

insert into 테이블명 (필드명,필드명) values('값□,□값□)

이런 식으로 됩니다.

데이터 읽기

* select 필드 from 테이블명

기본적으로 필드를 지정하지 않고 전체필드를 모두 보고 싶다면 * 로 지정해 주시면 됩니다.

아래의 예제는 좀 전에 위에서 입력했던 값이 제대로 들어갔는지 확인해 보는 예제입니다.

제대로 들어갔네요...^^

아래의 예제는 linuxer 테이블에서 name 과 korea 필드만을 출력하는 예제입니다.

where 절이나 group by, having, order by 등을 이용하여 원하는 데이터만을 출력할 수도 있습니다.

이 부분은 데이터베이스에 대해 공부해 보시면서 해보시기 바랍니다.

데이터 수정하기

* update 테이블명 set 필드명=필드값,필드명=필드값 where절

아래의 예제는 김경민이라는 사람의 korea필드를 수정하는 과정입니다.

김경민이라는 name을 가진 사람의 korea필드값을 100에서 99로 바꾸는 과정입니다.

아래의 예제를 보시면 쉽게 아실 수 있습니다. 처음에 select문으로 본것과 나중에 select문으로 본 것이 차이가 있죠...

데이터 삭제하기

테이블에 있는 데이터를 삭제하는 방법입니다.

* delete from 테이블명 where절

아래의 예제는 홍길동이라는 사람의 데이터를 지우는 과정입니다. delete문은 주의를 기울여 사용하셔야 합니다. where절을 사용하지 않고 쓰는 경우에는 테이블의 모든 데이터를 지우기 때문입니다.

현재 테이블에서 홍길동이라는 사람의 데이터를 지우는 방법은 여러 가지가 될 수도 있습니다. 중복된 값이 없을 경우에는 다른 방법으로도 지우기가 가능하겠죠...

하지만 보통은 유일한 값을 이용하여 지우는 것이 가장 안전하고 좋습니다.

mysql 서버운영하기

mysql서버를 설치하면 기본적으로 생겨나는 mysql이라는 데이터 베이스가 있습니다. 이 mysql이라는 데이터 베이스는 사용자 관리 db관리등 mysql서버에 관한 전반적인 관리를 하는 데이터베이스입니다. 이 mysql데이터 베이스를 이용하여 데이터베이스를 관리하는 방법을 알아보겠습니다.

아래의 예제는 mysql에 있는 테이블을 보는 예제입니다.

실제로 사용되는 테이블은 db 테이블과 user 테이블입니다.

db 테이블에는 어떤 데이터 베이스를 누가 어떻게 사용할 수 있는지에 대한 설정을 해주는 테이블입니다.

user 테이블은 어떤 사용자가 어떻게 접근할 수 있는지에 대한 설정을 해줍니다.

가정) web이라는 데이터 베이스를 생성하여 web이라는 데이터 베이스에 대해서 stone이라는 사용자가 사용을 할 수 있도록 셋팅한다.

1. 먼저 web 이라는 데이터 베이스를 만듭니다.

① mysqladmin을 이용하여 web 데이터베이스를 만듭니다.

② mysql에 접속한 상태에서 web이라는 데이터 베이스를 생성합니다.

아래의 예제는 mysql서버에 접속한 다음 web이라는 데이터 베이스를 생성하고 확인하는 과정입니다.

2. 만들어둔 web이라는 데이터 베이스를 stone이라는 사용자가 사용할 수 있도록 해주기

① 먼저 데이터베이스의 주인이 누구인지를 알려주어야 합니다. mysql이라는 데이터베이스에 자료를 입력해주면 데이터베이스 서버에서 그 정보를 가지고 작동을 합니다. 데이터베이스의 소유자가 누구인지 알려주기 위해서는 mysql데이터베이스의 db라는 테이블에 정보를 기록해주면 됩니다.

아래의 예제는 web이라는 데이터베이스를 stone이라는 사용자에게 사용할 수 있도록 해주는 과정입니다.

먼저 mysql데이터베이스의 db라는 테이블이 어떻게 생겼는지 보겠습니다.

이제 web이라는 데이터베이스를 stone이라는 사용자가 쓸 수 있도록 해봅시다.

stone이라는 사용자가 web이라는 데이터베이스를 자유롭게 사용할 수 있도록 모든 권한을 주겠습니다.

stone이라는 유저가 데이터베이스 서버에 접속할 수 있도록  설정을 해줍니다.

아래의 예제는 stone이라는 사용자의 권한을 설정하는 예제입니다. 기본적으로 접근할 수 있는 호스트, 유저명, 패스워드만 설정해 주는 것이 좋습니다.

아래는 stone이라는 사용자는 localhost(데이터베이스서버가 설치된 곳)에서만 접속이 가능하고 password는 stone을 사용하여 접속할 수 있다는 설정입니다.

원격지에서도 mysql 접속클라이언트 프로그램인 mysql을 이용하여 접속할 수 있게 하고 싶다면 localhost대신에 접속 가능한 도메인이나 아이피를 적어주시면 됩니다. 참고로 어떤 호스트에서라도 접속이 가능하게 하고 싶다면 %로 입력을 해주시면 모든 호스트에서 접속이 가능하게 됩니다.

위의 설정은 현재 root관리자의 패스워드가 설정이 안되어 있는 상태입니다. mysql서버를 설치하고 나서는

반드시 root패스워드를 설정해 주시는 것이 좋습니다. root 패스워드 설정은 mysqladmin을 이용하시거나

update 문을 이용하여 설정해 주시면 됩니다.

① mysqladmin password 패스워드

② mysql 서버에 접속한 후에 update user set password=password('패스워드□) where user='root'

이런 식으로 데이터베이스 서버관리자의 패스워드를 설정해 주기 바랍니다.

데이터 베이스에 대한 내용은 이것으로 대충 마무리하도록 하겠습니다.