Apache 는 전세계 웹 서버로 가장 많이 쓰이는 HTTP 서버 입니다.
Apache 는 최신 2.4 으로 넘어오면서 많은 변화를 겪었습니다.
이 문서는 리눅스 아파치 설치 하는 방법을 설명한 것입니다.
1. 개요
CentOS 7 배포판은 RHEL 7 을 재컴파일해서 만들어진 배포판 입니다. 이전 버전과 달리 서비스 데몬 관리로 Systemd 를 채용했고 기본 파일 시스템으로 XFS 를 채용하는등 많은 변화를 겪었습니다.
CentOS 7 에 서버 프로그램을 설치하게 될 경우에 이 Systemd 와 결합을 시키는 것도 중요한 일로 떠올랐습니다. Systemd 는 단순하게 서비스 데몬을 관리하는 것뿐만 아니라 시스템의 전반적인 인프라자체이므로 매우 중요한 요소가 되었습니다.
이 문서에 Apache 2.4.10 은 바로 Systemd 와 통합하는 방법을 포함 합니다. 이 문서의 내용은 Fedora 22 배포판을 많이 채용한 것입니다.
2. Apache 2.4.10
2.4.10 버전에서는 이전과 달리 기본 MPM으로 Event 입니다. 별도로 MPM을 지정해주지 않으면 Event 로 지정되었습니다. 하지만, 이 기본 Event 가 라이브러리 의존성을 가지고 있기 때문에 라이브러리가 갖추어지지 않았다면 Prefork 와 Worker 가 공유라이브러리로 컴파일되고 설치 이후에 무엇을 쓸것인지를 지정해줘야 합니다.
2.4.10 버전의 경우에 Event 를 활성화하기 위해서는 Apr, Apr-utils 의 버전이 1.5 이상이여 합니다. 하지만 CentOS 7 배포판에서는 현재 1.4 버전임으로 컴파일 설치할때에 1.5 이상을 같이 컴파일 해줘야 합니다.
3. Download and Unpack
Apache 2.4.10 을 Event 로 동작하도록 컴파일 하기위해서 다운로드 합니다.
- Httpd-2.4.10
- Apr-1.5.1
- Apr-utils-1.5.4
다운로드한 후에 압축을 해제하고 apr, apr-utils 는 srclib 디렉토리에 압축을 해제하고 버전을 제거한 패키지 이름으로 변경해 줍니다.
|
# httpd-2.4.10 압축해제 tar xjf httpd-2.4.10.tar.bz2 # apr-1.5.1, apr-util-1.5.4 이동. mv apr-* httpd-2.4.10/srclib/ # 디렉토리 변경 cd httpd-2.4.10/srclib # 압축해제 tar xjf apr-1.5.1.tar.bz2 tar xjf apr-util-1.5.4.tar.bz2 # 디렉토리 이름 변경 mv apr-1.5.1 apr mv apr-util-1.5.4 apr-util # httpd-2.4.10 디렉토리로 이동 mv ../ |
4. Patch Download and Patch
이 패치는 Fedora 22 에 httpd-.2.4.10 패키지에 있는 것을 가지고 온 것 입니다. 여기에는 보안 패치와 더불어 Systemd 와 통합되는 모듈이 들어있습니다.
패치는 다음과 같이 다운로드 받습니다.
download: httpd-2.4.10_patch.tar.bz2
httpd-2.4.10 디렉토리에서 다운로드 받은 파일을 압축해제하고 패치를 적용합니다.
|
# 압축해제 tar xvjf httpd-2.4.10_patch.tar.bz2 # 패치적용 ./patch_run.sh |
5.Configure and Compile and install
프로그램에 설정을 할때는 어떤 기능을 쓸것인지를 결정해야 합니다. 어떤 역활로 서버를 사용할 것인지를 고민한 후에 프로그램을 설정하는 것이 좋습니다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
export CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_LARGEFILE64_SOURCE' # lib64 Link export LDFLAGS=-Wl,-z,relro,-z,now,-L/usr/lib64 ./configure --prefix=/usr/local/apache2.4.10 \ --enable-pie \ --with-pcre \ --enable-mods-static='dir unique_id vhost_alias log_config logio mime mime_magic alias headers status http negotiation allowmethods include setenvif ssl cache socache_shmcb' \ --enable-mods-shared='cache_disk file_cache deflate expires usertrack actions userdir autoindex cgi auth_digest auth_basic rewrite remoteip ratelimit reqtimeout socache_memcache proxy proxy-fcgi proxy-balancer proxy-ajp proxy-http' \ --enable-mime-magic \ --enable-cern-meta \ --enable-cache \ --enable-data \ --enable-env \ --enable-so \ --enable-mpms-shared=all \ --disable-dir \ --disable-imagemap \ --disable-charset-lite \ --disable-cgid \ --disable-asis \ --disable-authn-socache \ --disable-socache-dbm \ --disable-session_dbd \ --disable-ldap \ --disable-authnz-ldap \ --disable-authz-dbd \ --disable-authn-dbm \ --disable-authn-anon \ --disable-dav \ --disable-dav-fs \ --disable-isapi \ --disable-proxy-connect \ --disable-proxy-ftp \ --disable-proxy-scgi \ --disable-proxy-fdpass \ --disable-proxy-express \ --disable-ext-filter \ --disable-authnz-ldap \ --disable-lbmethod-byrequests \ --disable-lbmethod-bytraffic \ --disable-lbmethod-bybusyness \ --disable-lbmethod-heartbeat \ --disable-dav-lock \ --with-included-apr |
위 configure 는 다음과 같은 기능을 제공하지 않습니다.
이제 컴파일과 설치를 해줍니다.
|
# 컴파일 make # 설치 make install |
6. mod_systemd 설치.
httpd-2.4.10 에 Systemd 와 통합을 위한 패치를 했지만 컴파일할때에 모듈설치 옵션을 ‘all’이나 ‘most’ 로하지 않는 이상 컴파일 설치가 되지 않습니다. 이는 apxs 를 이용해서 모듈 설치를 해줍니다.
|
# mod_systemd 모듈 파일이 있는 위치로 이동 cd modules/arch/unix # apxs 를 이용한 mod_systemd 설치 /usr/local/apache2.4.10/bin/apxs -c mod_systemd.c /usr/local/apache2.4.10/build/libtool --silent --mode=compile gcc -std=gnu99 -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_LARGEFILE64_SOURCE -DLINUX -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/local/apache2.4.10/include -I/usr/local/apache2.4.10/include -I/usr/local/apache2.4.10/include -c -o mod_systemd.lo mod_systemd.c && touch mod_systemd.slo /usr/local/apache2.4.10/build/libtool --silent --mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64 -o mod_systemd.la -rpath /usr/local/apache2.4.10/modules -module -avoid-version mod_zystemd.lo |
위에 잘 보면 link 시에 systemd_daemon 링킹이 되지 않습니다. 이것을 다음과 같이 수동으로 다시 만들어 줍니다.
|
/usr/local/apache2.4.10/build/libtool --silent --mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64 -o mod_systemd.la -rpath /usr/local/apache2.4.10/modules -module -avoid-version mod_systemd.lo -lsystemd-daemon |
그리고 다음과 같이 설치해 줍니다.
|
/usr/local/apache2.4.10/bin/apxs -i -a -n systemd mod_systemd.la |
7. systemd 파일 등록.
이제 httpd 의 systemd 파일을 등록해 줍니다. 파일은 다음과 같습니다.
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 32 33
|
# It's not recommended to modify this file in-place, because it will be # overwritten during package upgrades. If you want to customize, the best # way is to create a file "/etc/systemd/system/httpd.service", # containing # .include /lib/systemd/system/httpd.service # ...make your changes here... # For more info about custom unit files, see # http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F # For example, to pass additional options (for instance, -D definitions) to the # httpd binary at startup, you need to create a file named # "/etc/systemd/system/httpd.service" containing: # .include /lib/systemd/system/httpd.service # [Service] # Environment=OPTIONS=-DMY_DEFINE [Unit] Description=The Apache HTTP Server After=network.target remote-fs.target nss-lookup.target [Service] Type=notify Environment=LANG=C ExecStart=/usr/local/apache2.4.10/bin/httpd $OPTIONS -DFOREGROUND ExecReload=/usr/local/apache2.4.10/bin/httpd $OPTIONS -k graceful # Send SIGWINCH for graceful stop KillSignal=SIGWINCH KillMode=mixed PrivateTmp=true [Install] WantedBy=multi-user.target |
‘httpd.service’ 파일로 저장하고 다음과 같이 systemd 디렉터리로 옮겨 줍니다.
|
mv httpd.service /usr/lib/systemd/system |
httpd.service 를 systemd 에 등록하고 시작해주면 됩니다.
|
# systemd 에 httpd 를 활성화 systemctl enable httpd # systemd 릴로드 systemctl daemon-reload # httpd 시작 systemctl start httpd |
실행상태는 다음과 같이 확인 가능 합니다.
|
systemctl status httpd httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) Active: active (running) since 토 2014-09-27 19:55:20 KST; 49s ago Main PID: 18166 (httpd) Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec: 0 B/sec" CGroup: /system.slice/httpd.service ├─18166 /usr/local/apache2.4.10/bin/httpd -DFOREGROUND ├─18167 /usr/local/apache2.4.10/bin/httpd -DFOREGROUND ├─18168 /usr/local/apache2.4.10/bin/httpd -DFOREGROUND └─18169 /usr/local/apache2.4.10/bin/httpd -DFOREGROUND 9월 27 19:55:20 localhost.localdomain httpd[18166]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' dir... this message 9월 27 19:55:20 localhost.localdomain systemd[1]: Started The Apache HTTP Server. Hint: Some lines were ellipsized, use -l to show in full. |
추가 관련내용