'Apache'에 해당되는 글 7건
- 2011/01/17 Mac Server에서 ulimit 에러 날 경우...
- 2008/09/08 웹 URL에서 맨 뒤에 / 않붙으면 페이지 열리지 않는 상황
- 2008/09/08 PHP의 설정파일 내용 분석 php.ini
- 2008/09/08 아파치 웹서버 사용 시 무단 링크 방지법
- 2008/09/08 도메인 포워딩으로 이제 서브도메인을 사용하자!
- 2008/09/08 Apache Error Code
- 2008/09/08 아파치 튜닝 가이드
Posted on 2011/01/17 02:41
Filed Under 분류없음
위와 같은 에러가 날 경우 아래와 같이 편집을 해주시면 됩니다.
/usr/sbin/apachectl의 64번째 줄을 확인해보시면
위와 같이 있을 것입니다. 위의 내용을 아래와 같이 바꾸어 주신뒤 apachectl restart
해주시면 해결이 된답니다.
Posted on 2008/09/08 16:20
Filed Under [1] IT 관련/2. Linux
많은 분들이 http://xx.xx.xx.xx/domain 와 같은 페이지가 열리지 않고 http://xx.xx.xx.xx/domain/ 을 해야 열리는 경우가 발생된 적이 있을 것입니다.
이는 CanonicalName이 켜져 있어서 페이지가 열리지 않는 것이므로 아파치 설정에서
수정을 해 주어야 합니다.
httpd.conf 안에 "UseCanonicalName On" 부분은 "UseCanonicalName Off"로 변경
해주게 되면 정상적으로 페이지가 열릴 것입니다.
Posted on 2008/09/08 12:57
Filed Under [1] IT 관련/2. Linux
1. engine - PHP가 아파치 모듈로 설치 되었을 경우 특정 디렉토리에서만 스크립트가
동작하게 합니다. 이것은 아파치 httpd.conf 파일에 아래 항목을 추가합니다.
php_admin_flag engine on(PHP3의 경우 php3_engine on)
2. short_open_tag - php tag 사용여부를 정합니다. XML과 같이 사용할 경우
이 부분은 on으로 해야 합니다.
3. asp_tags - ASP 태그의 사용 여부를 설정합니다.
4. y2k_compliance - y2k 문제에 해당하는 브라우저를 위한 설정입니다.
5. safe_mode - php를 안전 모드로 동작 하게끔 하는 설정입니다.
safe_mode_exec_dir 지시자의 해당 디렉토리에 존재하는 실행 파일이 아닌 경우 실행 되지 않습니다.
(root에 있는 파일만 참조하게 합니다.)
6. safe_mode_exec_dir - 실행 프로그램이 있는 디렉토리 명을 적어 줍니다.
"5번"참고
7. max_execution_time - 스크립트 실행 시간을 초단위로 설정합니다.
8. memory_limit - 스크립트 실행 때 메모리 사용을 설정합니다.
9. error_reporting - 에러 출력을 설정합니다.
에러의 종류
- 일반적인 에러 출력(Normal function errors)
- 일반적인 에러 출력(Normal warnings)
- 문법적인 에러 출력(Parser errors)
- 버그의 가능성이 있으며 무시할 수 있는 에러 출력(Notices)
10. display_errors - 에러 상황을 html 양식으로 보여줍니다.
11. log_errors - 여러 가지 에러를 로고 파일에 저장합니다.
12. track_errors - $php_errormsg에 마지막의 에러나 경고 메시지를 저장합니다.
13. warn_plus_overloading - 스크립트에서 문자열 결합사용 때 " . " 연산자를 사용하지만 만약
" + "를 사용했을 경우 경고 메시지 출력 여부를 설정합니다.
14. track_vars - GET, POST, COOKIE 등으로 전달된 변수 값을 각각의 $HTTP_GET_VARS ,
$HTTP_POST_VARS , $HTTP_COOKIE_VARS의 배열 변수로 자동 저장 여부를 설정합니다.
15. magic_quotes_gpc - GET , POST , COOKIE 등으로 전달된 데이터에 ‘ " / 등의 문자가 존재할 경우
자동으로 (\)역슬래쉬를 붙일지 여부를 설정합니다. 이것은 각 문자를 스크립트와 구별해서
인식시키기 위해 필요한 부분입니다.
16. magic_quotes_runtime - 외부 스크립트나 여타 소스로부터 돌아오는 데이터에 대해 (\)역슬래쉬를
붙일지 여부를 설정합니다.
17. auto_prepend_file - INCLUDE와 비슷한 부분이고, 스크립트의 처음 부분에 포함될 파일명을
적어 줍니다.
18. auto_append_file - "17번"과 같으며 마지막 부분에 포함될 파일명을 적어 줍니다.
19. include_path - INCLUDE, REQUIRE 문의 파일 경로를 설정합니다.
20. doc_root - 서버의 루트 디렉토리를 설정합니다. 안전 모드로 동작할 경우 해당 디렉토리를 벗어나
다른 쪽으로 접근을 할 수 없습니다.
21. user_dir - 서버의 계정을 가진 일반 유저에 PHP 스크립트의 사용을 허가할 수 있습니다.
22. upload_tmp_dir - 파일이 업로드 될 디렉토리를 설정합니다. 기본적으로 /tmp 디렉토리로
업로드됩니다.
23. upload_max_filesize - 업로드 할 수 있는 최대 파일 크기를 설정합니다.
24. SMTP - mail( ) 함수의 사용을 위해 현 서버의 DNS , IP를 적어줍니다.
25. sendmail_from - 보내는 메일 주소를 설정할 수 있습니다.
26. sendmail_path - sendmail 서버가 있는 위치를 적어 줍니다.
27. debugger.host - 디버거로 사용하는 호스트 명을 적어 줍니다.
28. debugger.port - 디버거로 사용하는 포트 번호를 적어 줍니다.
29. debugger.enabled - 디버거의 사용 여부를 설정 합니다.
30. session.save_handler - 세션과 해당 데이터를 저장하는 방식을 설정하는 부분입니다.
기본적으로 파일 방식 입니다. 세션 항목은 이 책에 사용되는 회원제 부분에서 사용됩니다.
31. session.save_path - 세션 전달 인수를 정의 하는 부분이며 디폴트인 파일 방식일 경우 해당
파일의 경로를 적어 줍니다.
32. session.name - 쿠키 이름으로 사용되어질 세션 이름을 설정합니다. 디폴트는 PHPSESSID입니다.
33. session.auto_start - 세션 요청 시에 자동 모듈 생성 여부를 설정합니다.
0 - off , 1 - on
34. session.lifetime - 해당 세션이 유지 되는 시간을 설정 합니다.
디폴트의 경우 0이며 사용자의 브라우저가 종료 될 때까지 유지됩니다.
35. session.gc_probability - 해당 세션 값이 제거 될 경우 낭비 되는 시스템 메모리 자원을 반납하는
시점을 설정합니다.
36. session.gc_maxlifetime - 해당 세션의 시스템 메모리 자원 반납을 가질 수 있는 시간을 설정합니다.
Posted on 2008/09/08 12:52
Filed Under [1] IT 관련/2. Linux
그러니까 아래 "아파치 웹서버 사용 시 무단 링크 방지법"은 홈페이지 첫 화면에서 쿠키를 생성하고, 그 쿠키값을 체크한 후에 링크 허용 유무를 결정 합니다.
하지만 링크를 허용하지 않을 파일 확장자가 이미지 이거나, 음악 파일이고 홈페이지 첫 화면에서 이미지 혹은 음악을 올려 놓았을 경우, 쿠키값이 없기 때문에 (다들 아시겠지만 쿠키는 생성하고 난 후에 바로 사용을 하지 못하고 새로고침을 해야만이 사용할 수 있기 때문에 홈페이지 첫 화면에 올려 놓은 이미지 혹은 음악 파일은 보여주지 못하거나, 재생하지 못합니다.)
따라서 아래 방법은 쿠키 값을 체크하는 것이 아니라 현재 접속한 도메인을 체크해서 서버 관리자가 정해준 도메인명과 일치했을 경우, 링크를 허용하는 방법입니다. ^^
역시 아파치 웹서버 환경설정 파일인 "httpd.conf" 파일을 찾아서 메모장으로 열고, 다음 소스를 추가한 후 아파치 웹서버를 재실행 하시면 됩니다.
Options FollowSymLinks
AllowOverride None
SetEnvIF Referer "http://daum.net" pass // 도메인명을 코딩합니다. (즉, 설정한 도메인명과 현재 접속한 도메인명이 같을 경우 pass 를 반환합니다.)
// 무단 링크 방지할 파일 확장자를 코딩합니다.
Order deny,allow
deny from all
allow from env=pass // pass 값이 존재할 경우 링크를 허용합니다.
다음 방법은 아래 제가 올려 놓은 "아파치 웹서버 사용 시 무단 링크 방지법" 에서 약간의 문제점이 있어 또 다른 방법을 올려 놓습니다.
그러니까 아래 "아파치 웹서버 사용 시 무단 링크 방지법"은 홈페이지 첫 화면에서 쿠키를 생성하고, 그 쿠키값을 체크한 후에 링크 허용 유무를 결정 합니다.
하지만 링크를 허용하지 않을 파일 확장자가 이미지 이거나, 음악 파일이고 홈페이지 첫 화면에서 이미지 혹은 음악을 올려 놓았을 경우, 쿠키값이 없기 때문에 (다들 아시겠지만 쿠키는 생성하고 난 후에 바로 사용을 하지 못하고 새로고침을 해야만이 사용할 수 있기 때문에 홈페이지 첫 화면에 올려 놓은 이미지 혹은 음악 파일은 보여주지 못하거나, 재생하지 못합니다.)
따라서 아래 방법은 쿠키 값을 체크하는 것이 아니라 현재 접속한 도메인을 체크해서 서버 관리자가 정해준 도메인명과 일치했을 경우, 링크를 허용하는 방법입니다. ^^
역시 아파치 웹서버 환경설정 파일인 "httpd.conf" 파일을 찾아서 메모장으로 열고, 다음 소스를 추가한 후 아파치 웹서버를 재실행 하시면 됩니다.
Options FollowSymLinks
AllowOverride None
SetEnvIF Referer "http://daum.net" pass // 도메인명을 코딩합니다. (즉, 설정한 도메인명과 현재 접속한 도메인명이 같을 경우 pass 를 반환합니다.)
// 무단 링크 방지할 파일 확장자를 코딩합니다.
Order deny,allow
deny from all
allow from env=pass // pass 값이 존재할 경우 링크를 허용합니다.
추가된 내용:
쾌변님 SetEnvIF Referer "http://daum.net | http://yahoo.com" pass -> SetEnvIF Referer "http://daum.net|http://yahoo.com" pass 이렇게 코딩하시면 됩니다. 즉, 도메인과 "|" 사이를 붙여서 코딩하시면 됩니다.
따옴표 안은 정규식입니다.
"^http://(www.)?daum.net" 이런식이 되어야 할것 같네요.
맨앞에 ^가 없으면
http://nanum.net/?d=http://daum.net
이런주소도 허용될겁니다.
#RewriteEngine on
#RewriteCond %{HTTP_REFERER} !^http://-_-.com/.*$ [NC]
#RewriteCond %{HTTP_REFERER} !^http://www.-_-.com/.*$ [NC]
#RewriteRule .*\.(.*)$ http://-_-.com [R,NC]
env는 어려워ㅠㅠ 호스팅 사용자는 .htaccess ↑
# 깜박하고 주석 제거를 안했다-_- 앞에 #는 없에시길 env대신 rewrite모듈인가 그거 사용-_-
Posted on 2008/09/08 12:49
Filed Under [1] IT 관련/2. Linux
많은 홈페이지들이 www.domain.com이나 domain.com만을 사용하고 있습니다.
허나 포워딩을 이용하여 여러가지 서브 도메인을 사용할 수 있습니다.
DocumentRoot /home/aaa/html
ServerName aaa.com
ServerAlias *.aaa.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.aaa\.com$
RewriteRule ^(.+)$ %{HTTP_HOST}$1 [C]
RewriteRule ^(.+)\.aaa\.com(.*) /home/aaa/html$2
RewriteCond %{HTTP_HOST} !^www\.aaa\.com$
RewriteCond %{HTTP_HOST} ^[^.]+\.aaa\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.aaa\.com(.*) /home/aaa/html/sub_domain/$1$2
CustomLog logs/access_log combined env=!CodeRed
위와 같이 할 경우 asf.aaa.com과 같은 디렉토리는 home/aaa/html/sub_domain안에 서브디렉토리로
들어가게 됩니다. 이는 아파치 설정파일에서 rewrite 파일로 설정하거나 혹은 .htaccess 파일로
수정을 하실 수 있습니다.
Posted on 2008/09/08 12:02
Filed Under [1] IT 관련/2. Linux
100 : Continue
101 : Switching protocols
200 : OK, 에러없이 전송 성공
201 : Created, POST 명령 실행 및 성공
202 : Accepted, 서버가 클라이언트 명령을 받음
203 : Non-authoritative information, 서버가 클라이언트 요구 중 일부만 전송
204 : No content, 클라언트 요구을 처리했으나 전송할 데이터가 없음
205 : Reset content
206 : Partial content
300 : Multiple choices, 최근에 옮겨진 데이터를 요청
301 : Moved permanently, 요구한 데이터를 변경된 임시 URL에서 찾았음
302 : Moved temporarily, 요구한 데이터가 변경된 URL에 있음을 명시
303 : See other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음
304 : Not modified
305 : Use proxy
400 : Bad request, 클라이언트의 잘못된 요청으로 처리할 수 없음
401 : Unauthorized, 클라이언트의 인증 실패
402 : Payment required, 예약됨
403 : Forbidden, 접근이 거부된 문서를 요청함
404 : Not found, 문서를 찾을 수 없음
405 : Method not allowed, 리소스를 허용안함
406 : Not acceptable, 허용할 수 없음
407 : Proxy authentication required, 프록시 인증 필요
408 : Request timeout, 요청시간이 지남
409 : Conflict
410 : Gone, 영구적으로 사용할 수 없음
411 : Length required
412 : Precondition failed, 전체조건 실패
413 : Request entity too large,
414 : Request-URI too long, URL이 너무 김
415 : Unsupported media type
500 : Internal server error, 내부서버 오류(잘못된 스크립트 실행시)
501 : Not implemented, 클라이언트에서 서버가 수행할 수 없는 행동을 요구함
502 : Bad gateway, 서버의 과부하 상태
503 : Service unavailable, 외부 서비스가 죽었거나 현재 멈춤 상태
504 : Gateway timeout
505 : HTTP version not supported
Posted on 2008/09/08 12:01
Filed Under [1] IT 관련/2. Linux
#time -pa lynx -source http://www.gwise.com > /dev/null
real 0.74
user 0.16
sys 0.09
-------------
실제 접속시간 : 0.74-(0.16+0.09)=0.49초
2. 아파치 벤치 마킹
#man ab 사용법 보기
-n requests 요청을 수행할 개수
-c concurrency 요청을 만들 개수로 동시 사용자 개념으로 이해하면 되겠다.
-v verbosity 얼마나 자세한 정보를 화면에 출력해 줄 것인지 결정
-w HTML 문서형식으로 테이블로 만들어 결과를 화면에 출력
-k HTTP 프로토콜의 지속연결 (KeepAlive) 기능을 사용
#./ab -n 100 -c 10 http://www.gwise.com:80/
10 명의 유저가 동시에 http://www.gwise.com/index.html 을 요청하는 것을 모
의 실험.
각각의 시뮬레이트 유저는 요청을 10 번씩 하게 됩니다
# ab -n 1500 -c 50 http://www.apache.kr.net:80/
요청을 30 x 50 (50 명의 사용자가, 각각 30 번의 요청)
Requests per second: 80.48
초당 80.48개를 요청 했음.
'MaxRequestsPerChild’ 는 메모리 누수현상(?) 등이 발생하지 않는다면 가능
한 이 값을 높게 설정하시고요(파라미터의 값을 0 으로 설정해 무한대로 하실
수도 있습니다) StartServers’ 는 프로세스가 active 되어 있는 경우가 적을
경우 값을 낮게 설정하시고, 접속량이 아주 많을 경우는 MaxClients 에 가깝
게 조절하시기 바라며, MaxSpareServers 를 MaxClients 와 같게 설정합니다.
MaxClients 는 너무 낮게 설정하지 않도록 주의하시기 바라며, 그렇다고 또 너
무 크게 잡으셔도 안됩니다
3. 웹 서버 삽질 막기
BrowserMatch "WebZip" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out
<Directory "/home/gwise/public_html">
....
Deny from env=go_out
</Directoyr>
4. 아파치 튜닝
일반 서버에서는 다른것은 그냥 Default 값으로 둔다.
(대형 서버의 경우 말고는 특히 쓸 일어 없을 것이다.)
증가 시킬 경우 배수로 한다. 꼭 이렇게 해야 한다가 아니라
이렇게 하면 좋다.
Timeout 300
클라이언트의 요청에 의해서 Server와 연결 되었을때
클라이언트와 서버간의 아무런 메시지가 발생하지 않았을때
오류로 처리하는 시간
네트워크 속도가 나쁠수록 수치값을 높게 한다.
KeepAlive on
지속적인 접속, 즉 서버 연결에 대하여 한번 이상의 요청을 허용 여부.
MaxKeepAliveRequests 100
클라이언트가 접속된 시간동안 아파치 서버에 요청할 수 있는 처리 process 개
수
StartServers 5 X ? =20 -> 초반에 뜰 process 그 이상 그이하의 의미도 없
다.
MinSpareServers 5 X ? =20 -> Spare 프로세스가 이것 이하 일때 끌어 올려
준다.
MaxSpareServers 10 X ? =40 -> Spare 프로세스가 이것 이상 일때 진정(?)시
켜 준다.
말 그대로 Spare.... 언제 있을지 모를 요청에 대해서 컴퓨터 스스로가
조절해 준다.
MaxClients 150
클라이언트들이 동시에 최대로 접속했을때 가능한 최대 서버이 수를 지정.
Ulimit -a ~~~ max process...이 수치 이상 증가 못함.
httpd.h
HARD_SERVER_LIMIT=250 조정해서 다시 컴파일 가능
MaxClient 150 -> 동시에 떠 있을수 있는 최대 process
더 많은 수를 원할시 httpd.h 소스 파일의
HARD_SERVER_LIMIT 값을 수정 한 다음 다시 컴파일 해야 한다.
#ulimit -a
core file size (blocks) 0
data seg size (kbytes) unlimited
file size (blocks) unlimited
max memory size (kbytes) unlimited
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 2048
pipe size (512 bytes) 8
open files 1024
virtual memory (kbytes) 2105343
-----------------------
위의 max user processes 의 수를 초과 할 수 없다.
MaxRequestPerChild 100
한 프로세스가 몇 번의 서비스를 하고 소멸될 것인지 정한다.
M$계열에서는 별 의미가 없으므로 0을 한다.
하지만 Unix 계열은 0을 사용하지 않는 것이 좋다.
가장 중요한 것은Timeout 설정입니다. 위에서 keep-alive 를 설정해 놓은
경우, 하나의 connection에서 계속해서 다음 request를 처리할 수 있기 때문
에 효율적
이라고 하지만, 실제로는 그렇지 않습니다. keep-alive 를 허용하고 그
timeout을
5초로만 설정해도, 하나의 request를 처리한 후 적어도 5초동안은 그 httpd가
다른
작업을 하지 못하고 다음 request를 기다리게 됩니다.
보통 웹브라우저들은 서버로 동시에 4개의 connection을 만들게 됩니다. 한 페
이지를
보는데 이미지 등등 해서 보통 4개의 connection을 만드는 것은 기본이죠. 이
렇게 되면
httpd가 100개 떠 있다고 해도, 실제로는 동시에 25명의 방문자밖에 처리하지
못합니다.
그리고 keep-alive timeout이 5초인 경우, 한 명의 방문자를 처리한 후 적어
도 5초동안은
계속해서 기다리면서 httpd가 놀게 됩니다.(그렇다고 해서 httpd의 수를 늘여
주면 앞의
문제 때문에 load가 몰릴 때 순간적으로 부하가 지나치게 많이 걸리게 됩니
다. 어떤
request는 수초가 지난 후 답을 받는 등 quality of service가 많이 떨어지
죠.)
결국 한 명의 방문자를 처리하는데 4개의 httpd가 5초동안 작업한다는 뜻이
고, 100개의
httpd를 띄워봐야 1초에 5명의 방문자밖에 처리하지 못하는 셈입니다. ( 1
명 / 5 sec /
4 httpd = 5 / 1 sec / 100 httpd )
그래서 검색엔진 서비스 등 traffic이 많은 사이트에서는 keep-alive 옵션을
반드시 꺼
놓게 됩니다. 그리고 connection timeout도 상당히 짧게 설정해 놓죠. 4~5초
이내로 말입니다
5. 아피치 튜닝-2(로그기록 로테이트로)
/home/apache/conf/httpd.conf
CustomLog /home/apache/logs/access_log common
TransferLog "|/home/apache/bin/rotatelogs /home/apache/logs/access_log
86400"
TransferLog "|/home/apache/bin/rotatelogs /home/apache/logs/error_log
86400"
--------------
24시간 마다 로그 화일을 갱신해 준다.
24X60X60=86400초
6. 아파치 에러 메시지 바꾸기
httpd.conf
Customizable error response (Apache style)
2) local <B><U>redirect</U></B>s
ErrorDocument 404 /cgi-bin/missing404.pl
missing404.pl
---------------
#!/usr/bin/perl
print<<"(END_HTML)";
Content-type: text/html\n\n
<head><title> 요청한 URL 이 없습니다. </title>
<meta http-equiv="content-type" content="text/html;charset=EUC-KR">
</head>
<body>
<br><br><center>
<b><h2>요청하신 ;http://www.gwise.com$ENV{'REQUEST_URI'} 이 <br>
존재 하지 않습니다.<br></h2></b>
<br><br><h4>
<a href="mailto:gwise\@orgio.net"> 서버관리자 </a>
에게 문의 바랍니다.</h4><br>
(END_HTML)
exit;
---------------
