관리 메뉴

tapito.tistory.com

CentOS Minimal Intallation으로부터 서버 구축 방법 #3 (Perl 설치 및 Apache 연동) 본문

Operating System Theme/Unix/Linux

CentOS Minimal Intallation으로부터 서버 구축 방법 #3 (Perl 설치 및 Apache 연동)

Tapito 2017.07.22 09:25

Perl 설치

 이전 포스트(http://tapito.tistory.com/546)에서 Apache를 설치했다면, 마찬가지로 이번에는 perl을 설치해 본다.

# yum --disablerepo=\* --enablerepo=c7-media install perl_

 다음, perl 실행 파일이 어디에 위치해 있는지 확인한다. 이 경로는 perl 소스의 첫 줄을 작성할 때 중요하다.

# whereis perl_

경로가 /usr/bin/perl 또는 이에 준하는 경로를 확인할 수 있다. 실행이 잘 되는지를 보기 위해 홈 디렉터리(~)에 테스트 파일을 작성하여 실행해보기로 한다.

# cd ~
# cat > hello.pl
#!/usr/bin/perl
print "Hello, World!\n";
[^C] (=Ctrl + C를 의미한다.)

이 파일에 실행 속성을 부여 한 후 실행해 보자.

# chmod +x hello.pl
# ./hello.pl_

Hello, World!가 뜨면 정상이다. 이제 이 Perl을 Apache에 연동해 본다.

Perl을 Apache에 연동시키기

 Apache(httpd)의 설정 파일 이름은 httpd.conf이다. 이 파일은 일반적으로 /etc/httpd/conf 디렉터리에 있다. vi로 이 파일을 열어보자.

# vi /etc/httpd/conf/httpd.conf_

 Perl은 웹 언어이기 이전에 쉘 스크립트로 기능할 수 있는 언어이다. 이 때문에 웹으로 perl을 노출시킬 경우 보안을 위해서 cgi-bin이라는 특정 디렉터리에 몰아넣을 것을 권장하고 있고, httpd.conf파일에는 이미 /var/www/cgi-bin이라는 로컬 디렉터리가 /cgi-bin/이라는 가상 디렉터리로 ScriptAlias 설정되어 있다. 즉 웹에서 http://somewhere/cgi-bin/foo.cgi를 접근한다면 이 설정을 통해 /var/www/cgi-bin/foo.cgi를 보여주게 된다는 뜻이다.

ScriptAlias "/cgi-bin/" "/var/www/cgi-bin/"

httpd.conf를 잘 찾아보면 다음과 같은 부분이 있다.

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
AllowOverride
각 디렉터리에는 .htaccess라는 이름의 파일을 생성해서 그 파일에 httpd.conf의 내용을 기술할 수 있다. 즉, 특정 디렉터리에는 별도의 Apache 설정을 적용할 수 있다는 뜻이다. AllowOverrideNone으로 되어 있으면 디렉터리에 .htaccess 등의 설정 파일이 있어도 이를 무시하라는 뜻이다. 이 항목에 올 수 있는 값은 None, All, AuthConfig, FileInfo, Indexes, Options, Limit 중 하나이며, 자세한 내용은 http://webdir.tistory.com/178를 참고한다.
Options
접근 제어(권한)와 관련된 설정이다. None, All, Indexes, Includes, IncludesNOEXEC, FollowSymlinks, ExecCGI, MultiViews 중에서 몇 가지를 고를 수 있다. 자세한 내용은 http://webdir.tistory.com/178를 참고한다.
Require / Deny
특정 IP의 허용/차단을 지정한다. 화이트리스트는 Required all denied
Require ip <허용할 IP>
, 블랙리스트는 Require all granted
Require not ip <차단할 IP>
이다.

이 부분을 Perl이 연동할 수 있게 아래와 같이 약간의 수정을 해 본다. Options 항목은 CGI를 실행할 수 있도록 +ExecCGI로 고치고, .pl.cgi를 Perl 스크립트로 인식할 수 있도록 AddHandler 항목을 추가한다.

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options +ExecCGI
    AddHandler cgi-script .pl .cgi
    Require all granted
</Directory>

다음, Apache를 재시작한다.

# service httpd restart_

Perl이 Apache와 잘 연동되고 있는지를 확인하기 위해 테스트 페이지를 작성한다. cat를 사용하든 vi를 사용하든 아무거나 좋다.

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<!doctype html>\n";
print "<html>\n";
print "\t<head>\n";
print "\t\t<meta charset=\"utf-8\" />\n";
print "\t\t<title>First Example</title>\n";
print "\t</head>\n";
print "\t<body>\n";
for ($num = 1; $num <= 10; $num++) {
    print "\t\t<p>Hello, World!</p>\n";
}
print "\t</body>\n";
print "</html>\n";

작성한 파일을 /var/www/cgi-bin 경로에 저장한다. 파일명을 여기에서는 hello.cgi로 하겠다.

 

chmod 명령으로 이 파일을 실행 가능하도록 설정한다. 여기서 +x는 실행 가능, a는 불특정 사용자에게 적용되도록 하는 옵션이다.

# chmod a+x hello.cgi_

 

그 다음 로컬에서 실행해 보아 이 파일에 구문 오류가 있는지 검사해 본다.

# ./hello.cgi_

 

lynx로 이 페이지를 열어본다. 아래와 같이 "Hello, World!" 문구가 10번 출력되면 정상이다.

# lynx http://127.0.0.1/cgi-bin/hello.cgi_

 

이번에는 wget으로 이 페이지를 다운로드 받아본다. 정상적이라면 perl 코드는 보이지 않고 html 소스만이 보일 것이다.

# cd ~
# wget http://127.0.0.1/cgi-bin/hello.cgi
# cat hello.cgi_


0 Comments
댓글쓰기 폼