순수한 배쉬 가벼운 웹 서버.
서버 구성없이 로컬 웹 사이트를 설정하는 쉬운 솔루션 !!!
이것은 Bashttpd에서 영감을 얻었습니다. 그러나 행동은 완전히 다릅니다. 자세한 내용은 아래를 참조하십시오.
프레젠테이션
사용 방법
사용 방법 (전문가)
예
보안에 대해
왜 셔버인가?
특허?
복제하고 달리기 ./sherver.sh . 그런 다음 LocalHost : 8080에 연결할 수 있어야합니다. 포트를 전달하여 매개 변수로들을 수 있습니다 : ./sherver.sh 8080 (기본값은 8080 ).
이것은 Bash 와 함께 실행되도록 만들어졌습니다. 다른 쉘에서는 작동하지 않을 수 있습니다. 다음 도구는 시스템에 있어야합니다 (Debian의 기본 설치의 일부 임) :
envsubstsocat .netcat 사용할 수 있지만 동시 HTTP 요청과 잘 작동하지 않습니다.Sherver는 HTTP 1.0의 일부를 구현하는 웹 서버입니다. 몇 줄의 배쉬로 작성 되더라도 많은 일을 할 수 있습니다.
scripts 또는 file 폴더에 파일을 추가 할 수 있습니다.stdout 에서 무언가를 출력하자마자 모든 스크립트 나 모든 언어 실행 파일을 실행할 수 있습니다.이 모든 것이 셔버가 로컬 네트워크에서 몇 페이지를 제공 할 작은 서버를 실행하는 완벽한 도구입니다.
굉장히 들리더라도 Sherver는 여전히 다음과 같은 한계가 있습니다.
이것이 셔버가 개인적이고 통제 된 환경에 남아 있어야하는 이유입니다. 인터넷에 셔버를 노출시키지 마십시오 !!! 인터넷에 사이트를 노출하려면 보안 및 동시성에 대해 알고있는 도구 ( NGINX 또는 기타)를 사용해야합니다.
외부에서 침입을 방지하는 방화벽 뒤에서 셔버를 항상 실행하십시오 .
자신의 용도로 Sherver를 사용하는 방법에 대한 빠른 문서. 여기에 언급 된 모든 변수 및 함수는 스크립트/readme.md에 전체 설명이 있습니다.
가장 간단한 작업은 정적 페이지를 제공하는 것입니다. 처리가 필요하지 않은 순수한 HTML 파일.
그렇게하려면 HTML 파일을 하위 디렉토리 파일/페이지에만 넣어야합니다. 그런 다음 /file/pages/index.html 과 같은 URL을 통해 페이지에 액세스 할 수 있습니다 (예를 들어 파일 이름이 index.html 인 경우).
Sherver가 찾을 수 있도록 URL의 전체 파일 이름을 제공해야합니다.
그렇게 간단합니다! Sherver가 파일을 찾을 수 있다면 파일을 제공합니다. 그렇지 않으면 404 오류를 반환합니다.
Sherver에서 모든 유형의 파일을 제공 할 수 있습니다. CSS 또는 JavaScript와 같은 텍스트 기반에서 이미지, 비디오, Zip과 같은 바이너리에 이르기까지
파일을 하위 디렉토리 파일에 넣으십시오. 그런 다음 /file/venise.webp 와 같은 URL을 통해 참조 할 수 있습니다. 상대 경로보다는 전체 경로를 제공하는 것이 바람직합니다.
Sherver는 파일을 찾을 수있는 경우 파일을 자동으로 제공합니다. 브라우저가 파일을 캐시 할 수 있으며 파일이 변경된 경우에만 다시 제공합니다. Sherver가 파일을 찾을 수 없으면 404 오류가 반환됩니다.
CSS, JavaScript, Favicon과 같은 리소스의 경우 ... 할 필요는 없지만 하위 폴더 파일/리소스에 넣는 것이 좋습니다.
CSS 파일을 연결하는 방법에 대한 예 :
< link rel =" stylesheet " type =" text/css " href =" /file/resources/ugly.css " >HTML에서 사진을 통합하는 방법에 대한 예 :
< img src =" /file/venise.webp " alt ="" >셔버가 유용하게되는 곳입니다. 컨텍스트에 따라 서버 측면을 구축 한 동적 페이지를 제공 할 수 있습니다.
그렇게하려면 하위 폴더 스크립트에 실행 파일을 추가하면됩니다. 실행 파일은 모든 유형 (Bash 스크립트, Python 스크립트, 기타 스크립트, C ++와 같은 이진과 같은 이진을 c ++ 컴파일 한 실행 executable ...)이 될 수 있습니다.
실행 파일이있는 즉시 Sherver는 그것을 실행하고 출력을 제공합니다. index.sh 웹 사이트의 루트에 액세스 할 경우 디스패처가 실행하는 특정 이름입니다 (아래 디스패처 섹션 참조). Sherver가 파일을 실행할 수 없으면 404 오류가 반환됩니다. 실행 파일이 실패하면 (반환 코드가 0 아님) 500 오류가 반환됩니다.
실행 파일을 연결하려면 url : /page.sh 에서 폴더 scripts ./scripts/page.sh 해야합니다.
실행 파일은 scripts 폴더에서 실행됩니다.
강타 스크립트
Sherver는 주로 Bash 스크립트와 함께 작동하도록 만들어졌습니다. Bash 스크립트를 만들면 가장 먼저해야 할 일은 init_environment 함수를 실행하는 것입니다. 그러면 다음 모든 변수에 액세스 할 수 있습니다.
REQUEST_FULL_STRINGREQUEST_METHODREQUEST_URLREQUEST_HEADERSREQUEST_BODYURL_BASEURL_PARAMETERSDATERESPONSE_HEADERSHTTP_RESPONSE또한 많은 유용한 기능이 다음과 같습니다.
add_headersend_responsesend_filesend_error 스크립트/readme.md에서 SHERVER_UTILS.sh 라이브러리에 대한 전체 문서를 확인하십시오.
표준 출력에 작성된 모든 것이 클라이언트에게 전송됩니다. 다음은 요청을 텍스트 형식으로 반환하는 매우 간단한 스크립트입니다.
#! /bin/bash
init_environment
if [ " $REQUEST_METHOD " != ' GET ' ] ; then
send_error 405
fi
add_header ' Content-Type ' ' text/plain '
send_response 200 " $REQUEST_FULL_STRING "다른 스크립트 나 바이너리
bash를 사용하지 않으면 문자열로 전체 요청을 포함하는 환경 변수 REQUEST_FULL_STRING 에만 액세스 할 수 있습니다. 요청 된 URL ( REQUEST_URL )은 첫 번째 인수로 전달됩니다.
Sandart Output에 작성된 모든 것이 클라이언트에게 전송됩니다. 하지만 응답의 헤더를 직접 작성해야합니다.
Bash 스크립트의 경우 Sherver (LOL)와 통합 된 기본 템플릿 엔진이 있습니다. 실제로 envsubst 사용하여 환경에서 변수별로 $VARIABLE 의 발생을 대체합니다.
필수는 아니지만 템플릿을 하위 폴더 스크립트/템플릿에 넣을 수 있습니다.
다음은 텍스트 파일 template.txt 에 대한 템플릿입니다 (이전 Bash 스크립트 예제를 개선).
You entered the following request:
$REQUEST
다음 스크립트와 함께 사용합니다.
#! /bin/bash
init_environment
if [ " $REQUEST_METHOD " != ' GET ' ] ; then
send_error 405
fi
REQUEST= " $REQUEST_FULL_STRING "
# put REQUEST in the environment so we can use it in our template
export REQUEST
# load the template
response= $( envsubst < ' templates/template.txt ' )
add_header ' Content-Type ' ' text/plain '
send_response 200 " $response "아래 예제의 전체 HTML 예제.
게시물 요청이 지원됩니다. GET 또는 POST 할 변수 REQUEST_METHOD 의 값을 확인할 수 있으므로 요청 유형에 따라 다른 동작을 가질 수 있습니다.
게시물 요청의 내용은 변수 REQUEST_BODY 에서 리테레리 할 수 있습니다. 클라이언트가 데이터를 인코딩 한 URL 인 경우 몇 가지 트릭과 함께 함수 parse_url 사용하여 매개 변수의 연관 배열을 얻을 수 있습니다.
모든 컨텐츠는 클라이언트로 다시 보낼 수 있습니다. 메소드 add_header 덕분에 올바른 Mime 유형을 추가 할 수 있습니다.
여기에 언급 된 모든 변수 및 함수는 스크립트/readme.md에 전체 설명이 있습니다.
표준 오류에 기록 된 내용을 기록 할 수 있습니다. 로그를 용이하게하려면 함수 log 사용할 수 있습니다.
로그를 파일로 유지하려면 파일에서 Sherver.sh 의 오류 출력을 리디렉션 할 수 있습니다.
./sherver.sh 2> logs.txt기본적으로 요청과 응답의 헤더는 신체가 아닙니다.
디스패처는 요청 된 UTL에 따라 파일을 제공하거나 스크립트를 실행하도록 요청할 책임이 있습니다. 파일 Dispatcher.sh에서 구현됩니다.
현재 4 가지 작업이 있습니다.
/ ) 인 경우 스크립트 scripts/index.sh 실행합니다.index.htm 또는 index.html 요청하면 스크립트 scripts/index.sh 실행합니다./file/ 로 시작하면 요청한 파일이 제공됩니다./test/dummy.sh 는 스크립트 scripts/test/dummy.sh 존재하는 경우 실행합니다).파일 Dispatcher.sh를 편집 하여이 모든 동작을 변경할 수 있습니다.
우선, 특권이 낮은 sherver.sh 실행하는 특정 사용자를 만들어야합니다. 우리는 사용자 sherver 전화 할 것이며 전체 웹 사이트를 호소 디렉토리에 넣을 것입니다.
우리는 사용자를 sudo 와 netdev 그룹에 추가해야하므로 VPN을 관리 할 수 있습니다 ( sudo 사용자에게 제공하는 것이 좋지 않습니다. 이것이 인터넷에 웹 사이트를 노출해서는 안된 이유입니다).
useradd -mUG sudo,netdev -s /usr/bin/bash sherver
passwd sherver
... 실질적인 이유로 현재 사용자를 sherver Group에 추가 할 수 있습니다 (효과적으로 효과를 얻으려면 재 등전해야합니다).
adduser USER sherver이제 웹 사이트를 홈 디렉토리에 가져 오겠습니다
su sherver
cd ~
git clone https://github.com/remileduc/sherver.git
cd sherver
git checkout perso 마지막으로 sherver.sh 자동으로 시작할 수 있도록 서비스를 활성화해야합니다. 이렇게하려면 /usr/share/systemd/ 에서 파일 Sherver.service를 복사 한 다음 서비스를 활성화하십시오.
cp sherver.service /usr/share/systemd/
ln -s /usr/share/systemd/sherver.service /etc/systemd/system/sherver.service
systemctl daemon-reload
systemctl enable sherver.service예를 들어 집에서 VPN을 관리하기 위해 사용하는 스크립트를 볼 수 있습니다. Perso 지점에서 액세스 할 수 있습니다. 스크립트 vpn-mgr.sh를 올바르게 사용할 수 있으려면 스크립트가 필요합니다.
Bashttpd를 참조하십시오. 보안 기능이 없다고 말하는 것은 분명합니다. 인터넷에 셔버를 노출시키지 마십시오 .
인터넷에 사이트를 노출 해야하는 경우 특히 이러한 모든 문제에 직면하기 위해 구축 된 실제 서버가 필요합니다.
그러나 로컬 네트워크에서 사용하는 것이 완벽합니다. Wi -Fi 연결과 방화벽만큼 안전합니다.
웹 페이지를 통해 미디어 센터를 제어하기 위해 동적 페이지를 제공 할 수있는 서버를 신속하게 설정하고 싶었고 일부 Bash 스크립트를 실행할 수있었습니다.
Apache 또는 Nginx를 설치하고 구성하고 싶지 않았습니다. 사실, 나는 어떤 구성도 원하지 않았습니다.
Sherver는 구성없이 실행할 수 있습니다. 올바른 장소에 파일을 추가하면됩니다. 아무 것도 설치하지 않고 실행할 수 있습니다 (사용 된 모든 도구는 Socat을 제외한 Debian의 기본 설치의 일부입니다).
perso Branche에서 내 사용 사례를 볼 수 있습니다.
모든 것은 MIT 라이센스에 따라 있습니다.
Perl 라이센스에 따라 스크립트/utils/mimetype로 배송되는 mimetype 스크립트를 사용합니다.