Pure Bash Легкий веб -сервер.
Легкое решение для настройки локального веб -сайта без какой -либо конфигурации сервера !!!
Это вдохновлено Bashttpd. Хотя поведение совершенно другое. Смотрите ниже для получения дополнительной информации.
Презентация
Как использовать
Как использовать (эксперт)
Пример
О безопасности
Почему Шервер?
Лицензия?
Просто клонировать и беги ./sherver.sh . Затем вы должны быть в состоянии подключиться к Localhost: 8080. Вы можете передать порт, чтобы прослушать как параметр: ./sherver.sh 8080 (по умолчанию 8080 ).
Это сделано для бега с Bash . Это может не работать в другой оболочке. Следующие инструменты должны присутствовать в системе (обратите внимание, что все они являются частью установки Debian по умолчанию):
envsubst , если вы хотите сделать шаблонsocat для запуска сервера.netcat , но он не работает с одновременными HTTP -запросамиШервер - это веб -сервер, который реализует часть HTTP 1.0. Даже если он написан в нескольких строках Bash, он может многое сделать:
scripts , либо в папках filestdoutВсе это делает Шервер идеальным инструментом для запуска небольшого сервера, который будет обслуживать несколько страниц в вашей локальной сети.
Даже если это звучит потрясающе, у Шервера все еще есть следующие ограничения:
Вот почему Шервер должен оставаться в частной и контролируемой среде. Не выставляйте Шервера в Интернете !!! Если вы хотите разоблачить свой сайт в Интернете, вам следует использовать инструмент, который знает о безопасности и параллелизме (например, Nginx или другой).
Всегда управляйте Шервером за брандмауэром, которые предотвращают любые вторжения снаружи .
Быстрая документация о том, как использовать Шервер для собственного использования. Все переменные и функции, упомянутые здесь, имеют полное описание в Scripts/readme.md.
Самое простое, что вы можете сделать, это обслуживать статические страницы: чистые HTML -файлы, которые не нуждаются в обработке.
Для этого вам нужно только поместить свои HTML -файлы в подкаталовый файл/страницы. Затем вы можете получить доступ к своим страницам с помощью URL -адреса, например /file/pages/index.html (если, например, имя вашего файла index.html ).
Обратите внимание, что вам придется дать полное имя файла в URL, чтобы Шервер мог найти его.
Это так просто! Если Шервер сможет найти файл, он будет обслуживать его. В противном случае он вернет ошибку 404.
Вы можете обслуживать любой тип файлов из Шервера. От текстового такого как CSS или JavaScript до двоичных файлов, таких как изображения, видео, zip ...
Просто поместите файлы в подкаталог. Затем вы можете ссылаться на них через URL -адрес /file/venise.webp . Обратите внимание, что предпочтительно дать полный путь, а не относительные пути.
Шервер автоматически будет обслуживать файл, если он сможет его найти, с правильным типом MIME. Это даже позволит браузеру кэшировать файл и будет обслуживать его снова, только если файл изменился. Если Шервер не сможет найти файл, он вернет ошибку 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 ++, скомпилированные исполняемые ...), как только Шервер сможет выполнить его (у него должен быть набор executable флага).
Как только у вас есть исполняемый файл, Шервер запустит его и будет служить своей выходе. Обратите внимание, что index.sh является конкретным именем, поскольку оно будет выполнено диспетчером, если вы получите доступ к корню веб -сайта (см. Раздел диспетчеры ниже). Если Шервер не сможет запустить какие -либо файлы, он вернет ошибку 404. Если исполняемый файл не удастся (код возврата не 0 ), он вернет ошибку 500.
Чтобы связать исполняемый файл, вы должны опустить scripts папок в URL: /page.sh будут искать исполняемый ./scripts/page.sh .
Исполняемый файл запускается из папки scripts .
Сценарии Bash
Шервер в основном заставляется работать со сценариями Bash. Если вы создаете сценарий BASH, первое, что вы должны сделать, это запустить функцию init_environment . Тогда у вас будет доступ ко всем следующим переменным:
REQUEST_FULL_STRINGREQUEST_METHODREQUEST_URLREQUEST_HEADERSREQUEST_BODYURL_BASEURL_PARAMETERSDATERESPONSE_HEADERSHTTP_RESPONSEА также много полезных функций, таких как:
add_headersend_responsesend_filesend_error Проверьте всю документацию о библиотеке SHERVER_UTILS.sh в Scripts/readme.md.
Все, что написано на стандартном выводе, будет отправлено клиенту. Вот очень простой сценарий, который возвращает запросы в текстовом формате:
#! /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 ) будет передаваться в качестве первого аргумента.
Все, что написано на выводе Standart, будет отправлено клиенту. Хотя вы должны написать заголовки ответа самостоятельно.
Для сценариев Bash существует базовый шаблонный двигатель, интегрированный с Шервером (LOL). На самом деле он использует envsubst для замены любого возникновения $VARIABLE на переменную из среды, если есть.
Вы можете поместить свои шаблоны в сценарии/шаблоны подпапки, хотя это не обязательно.
Вот шаблон для Text File 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 в примере ниже.
Запросы публикации поддерживаются. Вы можете проверить значение переменной REQUEST_METHOD , которое будет либо GET , либо POST , так что вы можете иметь различное поведение в зависимости от типа запроса.
Содержание запроса POST может быть повторно введено в variable REQUEST_BODY . Если данные кодируются клиентом URL, вы можете использовать функцию parse_url с некоторыми уловками, чтобы получить ассоциативный массив параметров.
Любой контент может быть отправлен обратно клиенту. Вы можете добавить правильный тип MIME благодаря методу add_header .
Все переменные и функции, упомянутые здесь, имеют полное описание в Scripts/readme.md.
Все, что записано в стандартную ошибку, может быть зарегистрировано. Чтобы облегчить журналы, вы можете использовать log функций.
Чтобы сохранить журналы в файле, вы можете перенаправить вывод ошибки sherver.sh в файле:
./sherver.sh 2> logs.txtПо умолчанию заголовки как запросов, так и ответов регистрируются, но не тела.
Диспетчер отвечает за то, чтобы попросить либо обслужить файл, либо запустить сценарий, в зависимости от запрошенного UTL. Он реализован в файле Dispatcher.sh.
В настоящее время у него 4 действия:
/ ), то он выполняет scripts/index.shindex.htm или index.html , он выполняет scripts/index.sh/file/ , он обслуживает файл, который спросил/test/dummy.sh будет запускать scripts/test/dummy.sh если он существует).Все это поведение может быть изменено путем редактирования файла Dispatcher.sh.
Прежде всего, вам нужно создать конкретного пользователя, который будет работать sherver.sh с низкими привилегированными. Мы позвоним в нашего пользователя sherver , и мы поместим весь веб -сайт в его каталог Hone.
Нам нужно добавить нашего пользователя в группы sudo и netdev , поэтому он способен управлять VPN (очевидно, не очень хорошая идея, чтобы дать sudo пользователю, поэтому вы не должны выставлять веб -сайт в Интернете).
useradd -mUG sudo,netdev -s /usr/bin/bash sherver
passwd sherver
... Обратите внимание, что вы можете добавить своего текущего пользователя в группу sherver по практическим причинам (вам придется переехать, чтобы сделать его эффективным):
adduser USER sherverТеперь давайте получим веб -сайт в своем домашнем каталоге
su sherver
cd ~
git clone https://github.com/remileduc/sherver.git
cd sherver
git checkout perso Наконец, нам нужно включить службу, чтобы он sherver.sh автоматически. Для этого скопируйте файл sherver.service в /usr/share/systemd/ , а затем включите службу:
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. Он доступен на филиале Персо. Обратите внимание, что вам нужен сценарий vpn-mgr.sh, чтобы иметь возможность правильно его использовать.
Смотрите Bashttpd. Очевидно сказать, что это происходит без каких -либо функций безопасности. Не выставляйте Шервера в Интернете .
Если вам нужно разоблачить сайт в Интернете, вам нужен настоящий сервер, который был создан специально, чтобы столкнуться с всеми этими проблемами.
Тем не менее, это идеально использовать в локальной сети. Это будет столь же безопасно, как и ваше соединение Wi -Fi и ваш брандмауэр.
Я хотел быстро настроить сервер, который будет служить динамическим страницам, и который может выполнить некоторые сценарии Bash, чтобы контролировать мой медиацентр через веб -страницы.
Я не хотел устанавливать и настраивать Apache или Nginx. На самом деле, я не хотел никакой конфигурации.
Шервер может работать без какой -либо конфигурации. Вам просто нужно добавить файлы в нужном месте. Он может работать без того, чтобы быть установленным (все используемые инструменты являются частью установки Debian по умолчанию, за исключением, может быть, для SOCAT).
Вы можете увидеть мой вариант использования в филиале perso .
Все находится под лицензией MIT.
Мы используем сценарий mimetype , поставляемый в Scripts/Utils/MimeType, который находится под лицензией Perl.