This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
средства_программирования_shell [2022/09/23 14:07] val [Web сервер на shell] |
средства_программирования_shell [2023/01/08 09:05] val [Web сервер на shell] |
||
---|---|---|---|
Line 11: | Line 11: | ||
===== Проверка синтаксиса ===== | ===== Проверка синтаксиса ===== | ||
+ | |||
+ | * [[https://www.shellcheck.net/wiki/]] | ||
+ | |||
<code> | <code> | ||
# apt install shellcheck | # apt install shellcheck | ||
Line 379: | Line 382: | ||
* [[Сервис HTTP]] | * [[Сервис HTTP]] | ||
+ | * [[Переменные окружения#Чтение значений переменных окружения]] | ||
<code> | <code> | ||
Line 385: | Line 389: | ||
#!/bin/bash | #!/bin/bash | ||
base=/var/www | base=/var/www | ||
- | log=/var/log/webd.log | + | #log=/var/log/webd.log |
read request | read request | ||
- | #echo $request >> $log | + | #echo "$request" >> $log |
+ | |||
+ | filename="${request#GET }" | ||
+ | filename="${filename% HTTP/*}" | ||
+ | |||
+ | test $filename = "/" && filename="/index.html" | ||
+ | |||
+ | filename="$base$filename" | ||
while : | while : | ||
do | do | ||
read -r header | read -r header | ||
- | # echo $header >> $log | + | # echo "$header" >> $log |
[ "$header" == $'\r' ] && break; | [ "$header" == $'\r' ] && break; | ||
done | done | ||
- | |||
- | url="${request#GET }" | ||
- | url="${url% HTTP/*}" | ||
- | |||
- | test $url = "/" && url="/index.html" | ||
- | |||
- | filename="$base$url" | ||
if [ -e "$filename" ] | if [ -e "$filename" ] | ||
then | then | ||
- | echo `date` OK $url >> $log | + | # echo `date` OK $filename >> $log |
echo -e "HTTP/1.1 200 OK\r" | echo -e "HTTP/1.1 200 OK\r" | ||
echo -e "Content-Type: $(/usr/bin/file -bi \"$filename\")\r" | echo -e "Content-Type: $(/usr/bin/file -bi \"$filename\")\r" | ||
Line 412: | Line 416: | ||
/bin/cat "$filename" | /bin/cat "$filename" | ||
else | else | ||
- | echo "$(date)" ERR $url >> $log | + | # echo "$(date)" ERR $filename >> $log |
echo -e "HTTP/1.1 404 Not Found\r" | echo -e "HTTP/1.1 404 Not Found\r" | ||
echo -e "Content-Type: text/html;\r" | echo -e "Content-Type: text/html;\r" | ||
echo -e "\r" | echo -e "\r" | ||
- | ip=$(awk '/32 host/ { print f } {f=$2}' /proc/net/fib_trie | sort -u | grep -v 127.0.0.1) | + | echo -e "<h1>File $filename Not Found</h1>" |
- | echo -e "<h1>$url Not Found in container $(hostname) with ip $ip</h1>" | + | # ip=$(awk '/32 host/ { print f } {f=$2}' /proc/net/fib_trie | sort -u | grep -v 127.0.0.1) |
- | echo "ver 1.1" | + | # echo -e "Host: $(hostname), IP: $ip, ver 1.1" |
fi | fi | ||
</code> | </code> |