목차
CGI란?
CGI란 Common Gateway Interface의 약자로 HTML 문서의 수동적인 정보 전달 보완을 위해서 만들어진 동적 변환 방식으로 CGI는 동적으로 동작하기 위해 정한 표준 규약(Protocol) 입니다.
동작 순서는 아래와 같습니다.
1. 클라이언트(Client)가 웹 브라우져(Web Browser)를 통해 동적인 웹 문서를 요청 합니다.
2. 웹 서버(Web Server)에서는 동적 웹 문서에 대해 CGI 프로그램 스크립트에게 CGI를 요청 합니다.
3. CGI 스크립트에 프로그램된 동적인 동작을 웹 서버를 통해 웹 브라우져로 전달 합니다.
즉, CGI를 웹서버에서 실행하기 위해서는 웹서버에 CGI에 대한 정의가 있어야 하고 CGI Script가 따로 작성되어 정의된 방식에 따라 해당 CGI Script를 실행 합니다.
앞서 CGI는 프로토콜이라고 하였습니다. 이러한 CGI를 실행해주는 Script는 아래와 같은 언어로 작성이 가능 합니다.
- C/C++
- Perl
- Tcl
- Python
- Javascript
제 블로그에서는 주로 Python과 Javascript로 윈도우 환경에서 CGI를 작성하는 방법에 대해 포스트를 작성했으니 관심있으시면 카테고리를 통해 확인하시면 됩니다.
이번 포스트는 라즈베리파이의 리눅스(Linux) 환경에서 CGI를 파이썬으로 작성하는 방법에 대해 알아보겠습니다.
라즈베리파이 CGI 실습하기
이번에는 리눅스(Linux) 환경에서 CGI를 실행하는 방법에 대해 알아보겠습니다.
1. 아래와 같이 /var/www/html/cgi-bin 폴더를 만들고 실행 권한을 775로 변경 합니다.
sudo mkdir /var/www/html/cgi-bin
sudo chmod 775 /var/www/html/cgi-bin
2. 이때 주의할 점은 아래와 같이 아래와 같이 nano를 사용해서 000-default.conf 파일에서 html 문서의 경로를 확인해야 합니다. 경로를 확인 후 cgi-bin 폴더 위치를 아래와 같이 수정 해줍니다.
sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/
<Directory "/var/www/html/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
위에서 DocumentRoot가 /var/www/html로 설정되어 있음을 알 수 있습니다. 그러므로 거기에 맞춰서 cgi-bin 폴더 위치도 맞춰 줍니다. 위와 같이 변경 합니다.
설정이 잘못되면 아래와 같은 에러메세지가 발생합니다.
Not Found
The requested URL was not found on this server.
Apache/2.4.54 (Raspbian) Server at 192.168.0.2 Port 80
3. 폼(form)을 실행할 html 파일을 /var/www/html에 login.html로 만들고 권한을 775로 변경해줍니다.
login.html>>
<html>
<body>
<form name="name" method="POST" action="/cgi-bin/login.py">
Name : <input type="text" name="name">
<input type="submit" name="send">
</form>
</body>
</html>
html 코드는 간단하게 이름을 작성하면 /cgi-bin/login.py 로 전달 합니다.
sudo chmod 775 /var/www/html/login.html
4. login.py 파일을 아래와 같이 작성하고 cgi를 실행해줍니다. 파일은 /var/www/html/cgi-bin 에 작성합니다.
login.py>>
#!/usr/bin/python3
import cgi, cgitb
from unicodedata import name
form = cgi.FieldStorage()
name = form.getvalue("name")
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<body>")
print("Your Name is " % (name))
print("</body>")
print("</html>")
sudo chmod 775 /var/www/html/cgi-bin/login.py
5. a2enmod로 cgi를 실행하고 service restart로 apache2를 다시 실행합니다.
sudo a2enmod cgi
service apache2 restart
6. 라즈베리파이 아이피(ip)를 hostname -I 로 아래와 같이 확인하고 동일 네트워크에 접속된 외부 PC를 통해 login 페이지에 접속해봅니다.
hostname -I
결과 확인하기>>
'라즈베리파이(Raspberrypi)' 카테고리의 다른 글
[라즈베리파이] flask와 sqlite 연동해서 데이터베이스 값 웹 출력 (0) | 2022.11.05 |
---|---|
[라즈베리파이] flask 기본 웹 서버 실행하기(외부에서 접속해보기) (0) | 2022.10.29 |
[라즈베리파이] 웹 서버(Web Server)란? 아파치(Apache) 설치 및 실행하기 (0) | 2022.08.29 |
[Linux]리눅스 find로 파일 검색하기(size, exec, name, 별표* 사용) (0) | 2022.08.18 |
[라즈베리파이]Raspbery Pi에서 파이썬 처음 실행해보기(Python) (0) | 2022.08.16 |