Server Error (CGI Error) 원인 및 조치하는 방법


500 Server Error (Server Error or Internal Server Error)

원인 1) syntax error 확인하기


조치방법 1) Telnet으로 웹서버상에 로그인후 쉘 상태에서 다음을 실행시킨다.

Ex) perl test.cgi (해당 cgi)

스크립트상에 syntax error가 있으면 perl interpreter 가 그 문법적인 오류에 대하여 해당 line과

함께 오류를 출력합니다. Syntax error가 있는 line번호도 같이 표시됩니다. 만약 그 line이 수정

작업을 하셨던 부분이라면 그 줄을 다시 살펴 보아서 어떤 문법적인 오류가 있는지 체크하여

보십시오.




원인 2) 퍼미션 지정이 잘못된 경우


조치방법 2) 퍼미션을 잘못 조정하면 읽기나 쓰기 또는 실행이 금지되어 cgi error가 발생합니다

기본 설정은 755이며, 수정방법은 다음과 같습니다.

Ex) chmod 755 test.cgi




원인 3) 전송방식을 잘못 지정한 경우


조치방법 3) 윈우즈(Windows 95/98/2000/NT)를 사용하시는 분은 펄스크립트를 FTP로 파일을 전송할 때 반드시 아스키 모드로 해야 합니다. 유닉스와 도스는 텍스트 파일을 표현하는 형식이 다르기 때문 에 파일포맷을 바꿔주어야 합니다. 




원인 4) 각종 변수정의가 잘못 된 경우


조치방법 4) 각종 변수정의는 각 스크립트의 압축 파일내에 포함된 readme.txt를 참조하십시오.

정의된 변수의 기정치를 사용하지 않는 경우, 즉 스크립트가 있는 디렉토리가 나머지 파일들이 

있는 디렉토리와 다른 경우나, cgiwrap을 사용하는 경우에는 특히 변수정의 에 주의해야 합니다. (readme.txt를 반드시 읽어보십시오.) 

또 변수정의 중에 특히 많이 범하기 쉬운 오류는 절대경로를 사용하는 변수입니다. 

절대경로는 말 그대로 그 시스템 내에서 그 디렉토리의 (상대경로가 아닌) 절대 경로(full path)를 의미합니다. 절대 경로는 반드시 / 로 시작해야 합니다. 이것을 빠뜨리는 것이 흔히 저지르는 일 반적인 실수중의 하나 입니다. 

즉, 반드시 '/home2/cgklyk/public_html/guestbook/guestbook.html' 등의 형태가 되어 있어야 합니다. 그리고 끝날 때는 위의 경우와 같이 마지막에 / 를 붙이지 않아야 됩니다. 




원인 5) 특수문자의 처리가 잘못된 경우


조치방법 5) Perl에서는 @ $ " ; &등의 특수문자들을 문법의 일부로 사용합니다. 펄에서 쓰는 특수문자를 브라우저에서 일반 문자로 인식 시키려면 반드시 문자 앞에 백슬래쉬(backslash, \)를 붙여줘야 합니다. 가장 흔히 에러가 나는 경우는 전자우편 주소이며 예를 들어 hosting@gabia.com은 hosting\@gabia.com으로 해주어야 하고 HTML 태그를 쓸 때,

href="http://gabia.com"이면 href=\"http://gabia.com\" 으로 해주어야 에러가 나지 않습니다




원인 6) 서버상의 perl 위치


조치방법 6) 스크립트상의 펄의 위치와 웹 서버상의 펄의 위치가 다른 경우에도 에러가 일어납니다. 스크립트상에 #!/usr/local/bin/perl등으로 perl경로가 정의되어 있으면 !/usr/bin/perl로 경로를 변경해줍니다.

 

  501 Not Implemented Error (혹은 Not Supported Error)

웹브라우즈에서 요청한 Form METHOD가 웹서버에서 허용하는 것이 아닐 경우에 발생하는 에러코드 입니다. 이 에러는 크게 두 가지의 이유로 나타납니다. 


원인 1) 시스템에서 CGI를 지원하지 못하도록 막아 두었거나 CGI설정이 제대로 되어 있지 않는 경우에 일어납니다. 


조치 1) 이것을 처리하는 방법은 자신이 시스템을 운영하거나 시스템의 구성파일을 사용할 수 있는 분이면 그 구성파일을 고쳐 주면 됩니다.

이 고치는 방법은 사용하는 웹서버에 따라서 모두 다르므로 언급하기가 힘듭니다만 NCSA 서버의 경우 를 예로 들면 구성파일이 들어 있는 디렉토리인 /usr/local/httpd/conf 디렉토리에서 srm.conf 파일 중 AddType application/x-httpd-cgi .cgi 로 설정해 주면 됩니다.

자신이 시스템을 운영하지 않고 계정을 부여 받아 사용하는 경우에는 해당 시스템의 웹마스터에게 CGI 사용여부를 문의해 보는 것이 빠를 것입니다.




원인 2) 시스템의 구성(srm.conf)파일에서 CGI에 대해 .pl로 설정되어 있으면 .cgi 확장자를 가지는 파일을 실행 시켰을 때, 이런 에러가 나게 되며 그 반대로 .cgi로 설정된 시스템에서 .pl 확장자를 가지는 파일을 실행 했을 때도 일어납니다. 또 이 경우는 일부 시스템에서는 501에러로 처리하지 않고 바로 스크립트 그 자체가 화면에 디스플레이 되는 곳도 있습니다. 


조치 2) 시스템 사용자일 경우에는 첫번째 경우처럼 구성파일(srm.conf)을 수정해 줍니다. 그렇지 않은 부분은 . pl 파일을 .cgi로, 혹은 .cgi파일을 .pl로 바꾸어 주는 것도 한 방법이 되겠습니다

  502 : Bad Gateway

요청한 웹서버가 프락시서버나 게이트웨이서버로 실행되고 있을 경우에 발생할 수 있는 에러코드

  503 : Server Unavailable

웹브라우저의 요청에 웹서버가 제대로 처리하지 못할 경우에 발생하는 에러로서 일반적으로 다른 작업처리로 인하여 요청한 처리를 하지 못할 경우에 발생하는 하게 됩니다.

  400 : Bad request

HTTP의 규약에 맞지않는 요청을 했을 경우에 발생하는 에러입니다.

  401 (Unauthorized)

이 코드는 스크립트가 웹 서버의 보호 지역에 위치해 있고 확인이 실패했음을 의미합니다. 

스크립트는 문서를 읽기 위해서 특정 IP 주소나 인터넷 호스트를 허가함으로써 보호됩니다. 즉, 사용자 이름/ 패스워드 조합으로 제한됩니다.

이 문제에 대한 해결책은 스크립트를 비보호 지역에 놓거나 보안 제한을 안정화 시키는 방법을 알아내는 것입니다.

  403 Forbidden Error

이 에러코드를 보내게 되는 경우는 다음의 두 가지 경우이며 요청한 CGI파일에 대한 권한이 없거나 실행 가능한 파일이 아님에도 실행하려 할 경우에 발생하는 에러입니다.


- 의미 : 액세스하고자 하는 파일의 사용이 금지되었음을 말함

- 원인 : 파일에 엑세스 할 수 있는 권한 문제로 사용하고자 하는 CGI 프로그램이 들어있는 디렉

   토리에 대한 사용권한이 없거나 스크립트 자체의 권한이 없는 경우에 발생 합니다.

- 수정 : 사용하고자 하는 스크립트가 있는 디렉토리를 읽을 수 있도록 chmod 751로 설정변경

   하고 스크립트 자체가 실행할 수 있도록 chmod 751로 설정을 변경해야 합니다.

  404 Not found Error

다음과 같은 두가지 경우에 나타나는 에러 입니다.


1. 요청한 cgi파일이 디렉토리에 존재하지 않는 경우에 발생하는 에러

이유 : 파일이 발견되지 않았음. 즉, 사용자가 요청한 HTML 파일이나 CGI 스크립트가 없음

원인 : 대부분의 경우 URL을 잘못 입력하였거나 링크를 잘못 걸었을 때 나타남

수정 : URL이나 링크가 제대로 되었는지 확인

2. 브라우저에서 해당 CGI파일의 URL 떠는 링크를 정확히 입력하였는데 이 ERROR이 뜬다면 이것도 퍼미션 문제중의 하나입니다. 즉 해당 CGI파일이나 디렉토리의 퍼미션이 755로 되어 있지 않기 때문이므로 퍼미션을 755로 수정하셔야 합니다.

 

  CGI의 디렉토리에 있는 index.html을 실행시켰는데 디렉토리에 있는 파일들의 

   리스트가 나열되는 경우

이 경우, 보통 해당 디렉토리의 퍼미션을 잘못 설정한 경우입니다. 해당 디렉토리를 755로 열어 줍니다. (해당 스크립트의 readme.txt파일참조)

  스크립트가 실행되지 않고 코딩내용이 그대로 화면에 나올 경우

CGI가 설정되어 있지 않거나, 또는 CGI설정시에 CGI파일을 .pl파일로 설정한 경우에 .cgi확장자를 가진 파일을 실행시키면, 그 파일을 cgi파일로 인식하지 못하므로 이렇게 나올 수가 있습니다. 그 반대로 .cgi확장자가 CGI 파일로 설정된 시스템에서 .pl 확장자를 가지는 파일을 실행했을 때도 일어납니다. (해결 방법은 위의 501 에러의 원인 2) 경우를 참조하십시오.)

  기타 upload관련

1. upload20에서 다른 스크립트는 이상이 없는데 upload.cgi만 서버에러가 나는 경우 이것은 perl과의 궁합 문제입니다. perl 5.001이나 5.002에서는 서버에러가 나며 5.003과 5.004에서는 문제가 없다고 합니다. 그러므로 perl을 업그레이드 하는 것이 이것을 해결하는 한 방법입니다. 


2. load 스크립트에서 파일의 최대 크기를 늘리고 싶은 경우 . upload 1.1에서는 cgi-lib.pl에서 $cgi_lib'maxdata 의 값을 늘려줍니다. (2의 몇 제곱으로 표시) upload20에서는 up_lib.pl에서 $file_max_size 의 값을 늘려 줍니다. 단 이 값은 post에 의해 서버로 전송되는 환경 변수들을 포함한 모든 입력 변수들의 값을 포함한 것이므로 실제 업로드 가능한 파일의 최대 크기는 이것보다 약간 적습니다.

  CGI에러코드(3자리 숫자로 된 코드)

여기서 첫 번째의 errors는 CGI의 에러뿐 아니라 홈페이지 로딩이 되지 않았을 때의 모든 에러를 포함하고 있습니다. 웹호스팅서비스에 가입한 저희 고객께서는 고객의 홈디렉토리 밑에 있는 www_log라는 디렉토리 안에 . access_log라는 파일과 함께 쌓이게 됩니다. .그리고 이 디렉토리 내에 error_log라는 파일이 있으며 CGI의 에러들은 대부분 이 파일에 그 원인 등을 저장하게 됩니다. 그리고 두 번째의 3자리로 된 에러코드는 CGI프로그램이 정상적으로 실행이 되지 않았을 때 아래의 그림과 같이 웹서버에서 웹브라우저로 에러원인이나 조치 사항들에 대한 정보를 보여주게 됩니다.


 


위의 예는 웹서버에 있는 CGI프로그램을 웹브라우저에서 실행시킨 것으로 정상적인 실행이 되지 않았다는 것과 에러조치에 필요한 정보를 보내준 것입니다. 다음은 이런 에러메시지에 포함되는 에러코드 들에 대한 설명이며 의미하는 바는 다음과 같습니다. 


- 2로 시작되는 에러코드 : 웹서버에서 정상적으로 실행이 되었을 경우에 보내지는 것이며 

- 3으로 시작하는 상태코드는 웹브라우저의 요청한 작업의 수행을 위한 다른 작업의 필요성이 있음을 알려주는 코드이므로 에러코드는 아닙니다.

- 4로 시작하는 에러코드 : 실행시킨 CGI에 에러가 발생하여 웹서버에서 웹브라우저로 보내주는 에러

- 5로 시작하는 에러코드 : 실행시킨 CGI가 웹서버에서 실행도중 발생한 에러코드



Posted by esource :