[완료]busybox 에서 httpd으로 cgi 파일 실행되게 하는 방법좀 알려주세요
busybox(1.11.2) 컴파일할 때
Networking Utilities -> httpd(*)
[*] Support Common Gateway Interface (CGI)
[*] Support for runing scripts through an interpreter
[*] Set REMOTE_PORT environment variable for CGI
[*] Enable -e option (useful for CGIs written as shell scripts)
위에 옵션을 모두 선택했습니다.
httpd.conf는 busybox가 아닌 리눅스의 아파치에서 cgi 동작하는거 확인하고 복사했고요.
데몬 실행은 이와같이 했습니다.
#httpd -h /www -c /etc/httpd.conf
//html파일과 cgi파일은 전부 /www 안에 있습니다.
파이어폭스에서 ip어드래스 넣고 실행하면 html 파일은 열리는데 cgi파일은 다운 받는 창이 떠버리네요
콘솔상에서 ./main.cgi 하면
Set-Cookie:........
Content-Type: text/html
{html}......
..........{html}
이와 같이 출력됩니다. 제대로 되는 것같은데...웹상에서만 안되네요
httpd.conf에서 ExecCGI 옵션 안넣어줬을때도 저런식이었는데 busybox httpd는 설정이 다르가요...
구글링 해봐도 안나와있고... 좀 도와주세요
두서없이 쓰긴 했는데 요점은
웹상에서 busybox httpd의 cgi파일 열리게 하는 방법좀 알려주세요
BusyBox가 참으로
BusyBox가 참으로 유용한 프로그램임은 틀림없는데...
각종 설정파일에 대한 설명이 많이 부족하죠!~
예전에 저는 boa 웹서버를 사용했었는데... 아마도 BusyBox 것도 비슷할듯...
ScriptAlias /cgi-bin/ /www/cgi-bin/
cgi-bin 디렉토리를 따로 분리해서 사용해 보십시오!
아마도 cgi-bin 디렉토리는 기본적으로 cgi 로 인식할겁니다!
cgi-bin 디렉토리
cgi-bin 디렉토리 바꾸는건 벌써 부터 해봤습니다.
다시 해봐도 여전히 안되는건 마찬가지네요.
501 Not Implemented 에러가 나는데
그러면 BusyBox의 httpd가 cgi 기능을 지원하지 않는다??라고 생각해야 되는건가요?
그렇다면 BusyBox에서 컴파일을 어떻게 다시 건드려봐야한다는건데...
cgi 옵션으 전부 설정해놨는데...정말 난감하네요.
웹서핑과 예전
웹서핑과 예전 기억을 떠 올려보니,,,
busybox의 httpd 는 cgi를 지원합니다. (BOA 대신 쓰려고 간단히 테스트했던 기억이.. 나는군요!)
구글에서 검색하니,,, 아래와 같은 내용이 보이네요... 한번 보시고... 찬찬히 다시 확인해 보심이...
http://wiki.openwrt.org/OpenWrtDocs/httpd_CGI_scripts
시간적 여유가
시간적 여유가 있어서,,, 제가 사용하는 busybox 1.0 버전으로 확인해 보았습니다!
아래와 같이 cgi 기능만 활성화 하였습니다.
그리고 아무런 설정도 하지 않고,,, 디렉토리 만들고 실행하였습니다.
마지막으로 간단히 test.cgi 만들고 실행권한 주었습니다!
아래 결과와 같이 별다른 문제없이,,, 잘 되는군요!!!
찬찬히... 한번 살펴보세요... 실수한 부분이 없는지... busybox 버전을 바꿔 보셔도 좋고요...
글 작성하고,,, 질문의 글을 찬찬히 읽어보았는데,,,
혹시,,, 혹시,,,
아파치의 httpd.conf 파일을 그대로 busybox httpd 에서 사용하셨나요?
설정 형식이 좀 많이 다를텐데,,, 제가 위에 한것처럼 설정파일 없이 구동해 보세요!~
좀 많이 다른 정도가
좀 많이 다른 정도가 아니라... 비슷하지도 않을 정도로 완전히 다른 형식이죠.
OTL
그대로 따라했는데도
도움을 많이 주셨는데...여전히 결과는...
그대로 따라했는데도 안되네요 ㅠ.ㅠ
BusyBox 컴파일 위에처럼 다시하고,
httpd.conf 없는 상태에서
httpd -h /www
실행하고
index.html -> login.cgi
http://192.168.0.126/index.html 에서 로그인 아이콘 누르면 501 에러나고
주소창에 직접 http://192.168.0.126/login.cgi 라고 치면
다운로드 창이 뜹니다.
머가 잘못됐는지를 모르겠네요.
커널컴파일을 잘못하면 이런경우가 생길 수도 있나요?
도대체 이유를 모르겠습니다..
커널 컴파일과 CGI는
커널 컴파일과 CGI는 아무런 관계가 없습니다!
그리고...
http://192.168.0.126/login.cgi (?)
위에 제가 알려드린데로 한다면... 아래와 같은 주소가 나와야 할텐데요...
http://192.168.0.126/cgi-bin/login.cgi
busybox httpd는 특정 디렉토리에 ExecCGI 권한을 주는 설정을 보질 못했는데...
cgi-bin 디렉토리를 이용하세요!
아무리 생각해도... 단순한 사용자의 부주의가 문제인 듯 싶은데요...
그대로 따라하지
그대로 따라하지 않으셨는데요.
cgi 는 REQUEST_URI 에 /cgi-bin/ 이 포함되어 있을 경우에만 실행됩니다.
그러므로, cgi 파일은 $serverroot/cgi-bin/ 에 있어야 합니다.
index.html 이 없을 경우 /cgi-bin/index.cgi 를 시도합니다.
이 경우 REQUEST_URI 는 바뀌지 않고 원본 그대로 전달됩니다.
login 을 처리하던가 directory index 를 그냥 보여주던가 default.html 등의 다른 이름으로 Location 만 재지정하던가.
잘 하면 됩니다.
OTL
/www/cgi-bin 폴더
/www/cgi-bin 폴더 만들어놓고
login.cgi 파일 옮겨놓았습니다.
http://192.168.0.126/index.html 로그인 아이콘 클릭하면 바로 login.cgi다운로드 창 뜨네요.
주소창에 http://192.168.0.126/cgi-bin/login.cgi 넣어도 마찬가지로 다운로드 창 뜨고요.
다운로드 창 뜨는게 cgi를 지원하지 않아서 그런게 아닌가요?
맞습니다. 그 httpd 는
맞습니다. 그 httpd 는 cgi 를 지원하지 않는 상태입니다.
OTL
됐습니다~~ 다들 너무
됐습니다~~ 다들 너무 감사힙니다.
BusyBox 1.11.2
컴파일시에 밑에 두개만 설정하고
[*] Support Common Gateway Interface (CGI)
[*] Support for runing scripts through an interpreter
http루트는 /www
cgi파일은 /www/cgi-bin 에 넣어두니
제대로 cgi파일도 열어주네요 ㅠ.ㅠ 감격...
하지만cgi-bin 폴더 내에 있는 html파일은 열리지가 않는군요..
링크들을 다 수정해야겠지만 그래도 감격입니다.
댓글 달기