Category Archives: Apache

Home »  Apache

undefined symbol: unixd_config

apache 시동시 에러 “undefined symbol: unixd_config”
[root@localhost bin]# ./httpd -t
httpd: Syntax error on line 150 of /usr/local/apache/conf/httpd.conf: Cannot load modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: undefined symbol: unixd_config
아파치 시동시에 위와 같은 에러가 뜬다.
버전정보는
Server version: Apache/2.4.9 (Unix)
PHP 5.2.17 (cli)
보통 위 에러는 apache2와 php4.x로 컴파일 할때에 생기는 오류지만 apache2.4와 php5.2에서도 발생이 되기도 한다.
php압축해제경로/sapi/apache2handler/에서 php_functions.c 파일을 일부 수정한다.
>line 386
#if !defined(WIN32) && !defined(WINNT) && !defined(NETWARE)
AP_DECLARE_DATA extern unixd_config_recap_unixd_config;
#endif
>line 417
#if !defined(WIN32) && !defined(WINNT) && !defined(NETWARE)
snprintf(tmp, sizeof(tmp), “%s(%d)/%d”, ap_unixd_config.user_name, ap_unixd_config.user_id, ap_unixd_config.group_id);
php_info_print_table_row(2, “User/Group”, tmp);
#endif
다시 컴파일 후 Syntax 테스트
[root@localhost bin]# ./httpd -t
Syntax OK
펌 : http://rootrator.tistory.com/112

history log

local1.notice /var/log/historycmd.log

Snoopy logger : 사용자 세부 사항 및 커맨드 기록.
snoopy

서버 관리를 하다 보면, 다른 사용자는 쉘에서 어떤 작업을 하는지 어떤 명령어를 내렸는지에 대한 의문을 품게 됩니다.
혹, 이상한 명령어로 중요파일을 삭제해 놓고, 나몰라라하는 경우도 있습니다.
물론 history 커맨드나, 사용자 .bash_history 파일을 열어보면 나오지만 로그인한 사용자를 킬하거나 로그오프해야 기록이 되는 불편한 부분이있습니다.
이런 부분을 한번에 해결할 수 있는 유틸을 소개해드립니다.
Snoopy logger 는 쉘 또는 백그라운드에서 실행되는 커맨드 로그를 제공하는 굉장히 유용한 도구입니다.
해당 로그는 /var/log/secure 로그에 기록 되어 집니다.
아래는 해당 도구 인스톨 방법입니다.
설치법은 굉장히 단순합니다.
> Sourceforge 에서 다운로드 할수있습니다.
http://sourceforge.net/projects/snoopylogger/
> 또는 페도라 프로젝트 레포지에도 등록되어있습니다
wget http://pkgs.fedoraproject.org/repo/pkgs/snoopy/snoopy-1.9.0.tar.gz/809b8503ab795893e0f931cfdac34cbf/snoopy-1.9.0.tar.gz
=======================================================
tar zxvf snoopy-1.9.0.tar.gz
make
make install
=======================================================
해당 유틸 설치시 확인할 수 있는 로그입니다.
유용하게 사용하시기 바랍니다.

apache – TIME_WAIT 줄이기

1. Apache Keep Alive 옵션 조절
Apache 같은 web server로 운영한다면, KeepAlive Option 을 고려할 수 있습니다.
KeepAlive Option을 On 으로 해놓을 경우 Client를 접속시킨 채로 특별한 요청없이 지속적인 연결을 허용하게 됩니다. 이경우 KeepAliveTimeout 설정으로 연결유지 타임을 설정할 수 있습니다.
(이경우 web server에서 응답시 헤더에 Connection : close 의 정보가 없이 날라가게 됨)
하지만 위의 설정은 약이되고 독이될 수 있어 보입니다.
Client 가 정해져있는 server to server http 연동 I/F 용으로 사용되는 웹서버의 경우 위 설정으로 TIME_WAIT 을 줄이는 효과를 기대할 수 있을거 같습니다.
하지만 web 서비스 를 하는 용도라면 불필요하게 커넥션을 유지하여 오히려 http thread 갯수만 늘어나서 독이될 수 있습니다.
(최대 용량은 아직 놀고있으면서 커넥션이 안되어서 TPS가 현저하게 떨어질 것으로 예상..)
용도별로 Apache Port 분리하여 KeepAlive Option을 적절히 이용하는게 해법일 수 있겠습니다.
2. 커널 파라미터 튜닝net.ipv4.tcp_fin_timeout = 30
: FIN_TIMEOUT 대기 시간을 줄이면 끊어진 소켓의 소거 시간을 줄일 수 있음
net.ipv4.tcp_rfc1337 = 1
: 클라이언트의 소켓으로부터 RST를 받아 TIME_WAIT 상태로 가는 경우 즉시 소켓을 종료시킴
net.ipv4.tcp_max_tw_buckets =2000000
: 동시에 유지 가능한 timewait 소켓의 […]

mod_rpaf 설치

apache log상에 프록시 IP만 찍힐때 apache 모듈을 추가!
apache 2.2 에 설치함.
wget msnote.co.kr/file/mod_rpaf-0.6.tar.gz
tar zxvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6.tar.gz
/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
– httpd.conf 추가 > LoadModule rpaf_module modules/mod_rpaf-2.0.so
– vhost추가 >
RPAFenable On
RPAFsethostname On
RPAFproxy_ips xxx.xx.xx.12 << 프록시IP
RPAFheader X-Forwarded-For
 

301 redirect

1. PHP redirect

1
2
3
4

<?php
header( “HTTP/1.1 301 Moved Permanently” );
header( “Location: http://www.msnote.co.kr” );
?>

2. JSP(Java) redirect

1
2
3
4
5

< %
response.setStatus(301);
response.setHeader( “Location”, “http://www.msnote.co.kr/” );
response.setHeader( “Connection”, “close” );
%>

3. ASP.NET redirect

1
2
3
4
5
6
7

<script runat=”server”>
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = “301 Moved Permanently”;
Response.AddHeader(“Location”,”http://www.msnote.co.kr”);
}
</script>

4. ASP redirect

1
2
3
4
5

< %@ Language=VBScript %>
< %
Response.Status=”301 Moved Permanently”
Response.AddHeader “Location”,”http://www.msnote.co.kr/”
%>

5. Ruby on Rails redirect

1
2
3
4

def old_action
headers[“Status”] = “301 Moved Permanently”
redirect_to “http://www.msnote.co.kr/”
end

6. CGI Perl redirect

1
2

$q = new CGI;
print $q->redirect(“http://www.msnote.co.kr/”);

7. .htaccess mod_rewrite

1
2

RewriteEngine on
RewriteRule (.*) http://www.msnote.co.kr/$1 [R=301,L]

apache , php 세션시간 설정

1. Apache 환경 설정 파일

vi /usr/local/apache/conf/httpd.conf
변경전 Timeout 300
변경후 Timeout 1200클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와  서버간에 아무런 메시지가 발생하지 않았을 때
오류로 처리될 시간을 초단위로 설정 합니다.
초기값은 1200이며 보통은 300초로 지정을 합니다. 네트웍의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋습니다..
변경전 KeepAliveTimeout 15
변경후 KeepAliveTimeout 30
아파치 서버는 같은 접속상태의 클라이언트에서 여기서 지정한 초만큼의 요청이 없었을 때 접속을 끊게 됩니다.
2. PHP 환경 설정 파일

vi /etc/php.ini
변경 전 session.gc_maxlifetime = 1440
변경 후 session.gc_maxlifetime = 10800
변경 전 session.cookie_lifetime = 0
변경 후 session.cookie_lifetime = 86400
변경 전 session.cache_limiter = nocache
변경 후 session.cache_limiter = nocache, must-revalidate

정정

mod_rewrite

[출처]http://www.linuxchannel.net/board/read.php?table=alpha&no=249

[apache] rewrite 설정 설명

1. mod_rewrite reference
http://httpd.apache.org/docs/2.0/en/mod/mod_rewrite.html

2. URL Rewriting Guide
http://httpd.apache.org/docs/2.0/ko/misc/rewriteguide.html
or
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

아래 내용 출처: http://www.gnunix.co.kr/4

.htaccess – RewriteCond, RewriteRule

.htaccess 에 대해서 알고싶었다. 약간의 공부가 필요했다. 검색했다.
없다…
아주 간단한 예제만 나와있거나 이럴경우 저럴 경우만 나와있다.
조금이라도 자세히 들어가려 한 내용은 찾기 힘들었다.

그래서 내가 준비했다.
이거.. 원… 완성할떄쯤 또 딴데서 먼저 나오는거 아닌가 몰라 ㅎㅎ

인터넷에 정보가 너무나도 부족했다.
영문사이트외엔-

이하 모두 Apache사이트를 참고했다.

1. .htaccess

.htaccess
그래 맞다. 앞에 .이 붙으면 숨겨있는 파일이다.
열어보자.

{code}
php_flag register_globals on
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^(www)\.gnunix\.co\.kr$ [NC]
RewriteRule (.*) http://www.gnunix.co.kr/$1 [R=301,L]
ErrorDocument 401 http://www.gnunix.co.kr/401error.html
{code}

간단하게 요정도?

난 RewriteCond와 RewriteRule에 대해서만 언급해보려한다.
RewriteEngine On은 Rewrite모듈의 사용을 위해 기본적으로 On으로 설정해두는것이
좋다.
RewriteBase는 기본적으로 .htaccess가 위치안 물리적 경로로 설정하지만 Rewrite의
쓰임이 너무
광범위하기에 다르게 쓰이는 경우도 많다.

그 외에 RewriteOptions, RewriteLog, RewriteLogLevel, RewriteLock, RewriteMap등은
심화과정이므로 취급하지 않습니다 ^^;;

이 글은 완벽하지 않다. 잘쓴 글도 아니고 잘 되어있는 글도 아니다.
하지만 당신이 컴퓨터에 대한 열정이 있고 그만큼의 노력이 있었으며 독학에 재능이
있다면 이정도의
글로도 만족할것이라 믿는다. (쓸데없는 잡담이 너무 많은거 뺴고… ㅡㅡ;;)

이제 본론으로 […]

openssh 5.x 설치

oenSSH 4.4 이전 버전은 GSSAPI 인증에 취약점이 존재합니다.
만약 GSSAPI를 이용하여 Keberos 인증을 구성하셨다면 반드시 업데이트를 해주시기 바랍니다.
하지만, yum update로 제공되는 openSSH 버전은 4.3p2 까지 밖에 없기 때문에
파일을 내려받아 컴파일을 해주셔야 합니다.
 
기존 openssh
rpm -qa | grep openssh
openssh-clients-4.3p2-82.el5
openssh-xinetd-0.2-2.2.el5.rf
openssh-4.3p2-82.el5
openssh-askpass-4.3p2-82.el5
openssh-server-4.3p2-82.el5

rpm -e  명령어로 지워줍니다
의존성에 걸리면
rpm -e –nodeps openssh-clients-4.3p2-82.el5 이런식으로 지워줍니다

버젼은 선택가능
wget http://www.legendry.co.kr/sh/openssh-5.6p1.tar.gz
wget http://www.legendry.co.kr/sh/openssh-5.3p1.tar.gz
wget http://www.legendry.co.kr/sh/openssh-6.2p1.tar.gz
wget http://www.legendry.co.kr/sh/openssh-6.4p1.tar.gz
 
tar xvf openssh-5.6p1.tar.gz
컴파일옵션 2개중 선택
./configure –prefix=/usr/local/openssh –with-tcp-wrappers –with-pam –with-md5-passwords
or 
./configure –prefix=/usr/local/openssh
make && make install
 
설치 디렉토리에서 init.d 스크립트 복사
cd (설치디렉토리)/openssh-5.6p1/contrib/redhat
cp /usr/local/src/openssh-5.3p1/contrib/sshd.pam.generic /etc/pam.d/sshd
cp sshd.init /etc/init.d/sshd
 
 
vi /etc/init.d/sshd
 
 
아래 내용으로 수정해 줍니다.
 
 
ln -s /usr/local/openssh/bin/* /usr/bin
ln -s /usr/local/openssh/sbin/* /usr/sbin
ln -s /usr/local/openssh/etc/ /etc/ssh
chkconfig –add sshd
 
설정파일 경로
/usr/local/openssh/etc/sshd_config
 
ssh 및 sshd PATH 추가
vi /etc/profile
export PATH=/usr/loca/openssh/bin:/usr/local/openssh/sbin:$PATH
 

warning  : 1 client is using or hasn’t closed the table properly

서버가 다운되면서….아래와 같은 메세지를 확인햇을경우..
Mar 24 13:23:04 localhost kernel: INFO: task httpd:18362 blocked for more than 120 seconds.
Mar 24 13:23:05 localhost kernel: “echo 0 > /proc/sys/kernel/hung_task_timeout_secs” disables this message.
정확한 이벤트를 확인하기위하여 아래와 같이 실행
[root@localhost log]# echo 1 > /proc/sys/kernel/hung_task_panic
[root@localhost log]# echo 0 > /proc/sys/kernel/hung_task_timeout_secs
주기적인 모니터링으로 원인분석