diff options
| Commit | 8e4785932449fa1d8897a4d81e7712be6329936b (patch) | |
|---|---|---|
| Author | 2024-11-30 20:09:40 +0200 | |
| Committer | 2024-11-30 20:09:40 +0200 | |
| Files | b30aa90416ff243558da5581e186b264fd859cfd | |
| uni-projects-8e4785932449fa1d8897a4d81e7712be6329936b.tar uni-projects-8e4785932449fa1d8897a4d81e7712be6329936b.tar.gz uni-projects-8e4785932449fa1d8897a4d81e7712be6329936b.zip | ||
| Parent | e56ceca9351f207c96a65d05a753f24034931050 (diff) | |
referat(WT): Add initial implementation
5 files changed, 431 insertions, 0 deletions
| -rw-r--r-- | Year 4/Web technologies/referat/css/layout.css | 36 | ||||
| -rw-r--r-- | Year 4/Web technologies/referat/css/style.css | 102 | ||||
| -rw-r--r-- | Year 4/Web technologies/referat/img/02kew01.gif | bin | 0 -> 8684 bytes | |||
| -rw-r--r-- | Year 4/Web technologies/referat/img/9001001_01.jpg | bin | 0 -> 448803 bytes | |||
| -rw-r--r-- | Year 4/Web technologies/referat/referat.html | 293 |
diff --git a/Year 4/Web technologies/referat/css/layout.css b/Year 4/Web technologies/referat/css/layout.css new file mode 100644 index 0000000..2b3d0ff --- /dev/null +++ b/Year 4/Web technologies/referat/css/layout.css @@ -0,0 +1,36 @@ +.centered { + text-align: center; +} + +.right-aligned { + float: right; + display: inline-block; +} + +img { + max-height: inherit; + max-width: inherit; +} + +.size-small { + max-height: 10em; + max-width: 10em; +} + +.size-large { + max-height: 20em; + max-width: 20em; +} + +ol.sources { + list-style: none; + counter-reset: num; +} + +ol.sources > li { + counter-increment: num; +} + +ol.sources > li::before { + content: "[" counter(num) "]"; +} diff --git a/Year 4/Web technologies/referat/css/style.css b/Year 4/Web technologies/referat/css/style.css new file mode 100644 index 0000000..c7c6db8 --- /dev/null +++ b/Year 4/Web technologies/referat/css/style.css @@ -0,0 +1,102 @@ +:root { + --level1: #f89b24; + --level2: #df5b2b; + --level3: #c91f39; + --level4: #802779; + --level5: #444176; + --gray: #f0f0f0; +} + +body { + font: 17px sans-serif; + background-color: var(--gray); +} + +#content, #contents { + max-width: 70em; + margin-left: auto; + margin-right: auto; + padding: 1em; + box-sizing: border-box; +} + +#content { + background-color: white; + border-radius: 0.5em; + max-width: 70em; + margin-left: auto; + margin-right: auto; + box-shadow: 0 0.5em 1em lightgray; +} + +#contents { + display: flex; + background-color: var(--level5); + border-radius: 0.5em 0.5em 0 0; + margin-bottom: 1em; + position: sticky; +} + +#contents > a { + text-decoration: none; + color: var(--level1); +} + +#contents > a:not(:last-child) { + border-right: 5px double var(--level3); + padding-right: 0.5em; + margin-right: 0.5em; +} + + +h1 { + color: white; + background: linear-gradient(20deg, var(--level1) 13%, var(--level2) 33%, var(--level3) 66%, var(--level4) 86%, var(--level5) 100%); + padding: 0.75em 0; + border-radius: 1em 0; +} + +h2 { + color: var(--level1); + border-bottom: 2px solid var(--level1); +} + +h3 { + color: var(--level2); + text-decoration: underline; +} + +h4 { + color: var(--level3); +} + +h5 { + color: var(--level4); + margin-bottom: 0.5em; +} + +figure { + box-sizing: border-box; + margin: 1em; +} + +a, a:visited { + color: var(--level5); + text-decoration: none; +} + +pre { + font-size: 0.85em; +} + +pre > code { + border: 2px solid var(--level4); + padding: 0.5em; + display: inline-block; + width: 100%; + box-sizing: border-box; +} + +ol.sources > li::before, sup a, sup a:visited { + color: var(--level4); +} diff --git a/Year 4/Web technologies/referat/img/02kew01.gif b/Year 4/Web technologies/referat/img/02kew01.gif Binary files differnew file mode 100644 index 0000000..9035c8d --- /dev/null +++ b/Year 4/Web technologies/referat/img/02kew01.gif diff --git a/Year 4/Web technologies/referat/img/9001001_01.jpg b/Year 4/Web technologies/referat/img/9001001_01.jpg Binary files differnew file mode 100644 index 0000000..9290a6c --- /dev/null +++ b/Year 4/Web technologies/referat/img/9001001_01.jpg diff --git a/Year 4/Web technologies/referat/referat.html b/Year 4/Web technologies/referat/referat.html new file mode 100644 index 0000000..d08d3b1 --- /dev/null +++ b/Year 4/Web technologies/referat/referat.html @@ -0,0 +1,293 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" href="./css/layout.css"> + <link rel="stylesheet" href="./css/style.css"> + <title> + Apache: архитектура, инсталиране, конфигуриране, виртуални хостове + </title> + </head> + <body> + <nav id="contents"> + <a href="#introduction">Въведение</a> + <a href="#installing">Инсталиране</a> + <a href="#configuring">Конфигуриране</a> + <a href="#architecture">Архитектура</a> + <a href="#virtual-hosts">Виртуални хостове</a> + </nav> + <article id="content"> + <h1 class="centered"> + Apache: архитектура, инсталиране, конфигуриране, виртуални хостове + </h1> + <section id="introduction"> + <h2>Въведение</h2> + <figure class="right-aligned size-small"> + <img src="./img/9001001_01.jpg" alt="Екранна снимка на NeXT уеб браъзърът"> + <figcaption class="centered">Фигура 1. Екранна снимка на NeXT уеб браузърът</figcaption> + </figure> + <p> + Оригиналната визия на Тим Бърнърс-Лии е била да създаде хипер-текстова система. + Програма, с която не само могат да се създават форматирани документи, но и да има мрежова свързаност между всички тях (т.н. хипер-връзки).<sup><a href="#src1">[1]</a></sup> + </p> + <p> + В модерно време, браузърът е главния компонент с който един потребител е запознат: "устройството" чрез което форматираните документи могат да се преглеждат и мрежови данни да се пренасят. + Обаче зад всички уеб браузъри стоят едни по-важни системи: уеб сървърите. + Това са местата при които всички уебстраници се съхраняват, разпространяват и понякога генерират. + Разбира се, първата реализация на световната мрежа от ЦЕРН е дошла с браузъри и сървър.<sup><a href="#src2">[2]</a></sup> + На фигура 1 е предоставена екранна снимка на точно този софтуер.<sup><a href="#src3">[3]</a></sup> + </p> + <p> + С времето, разнообразни екипи разработили свои реализации. + В едно бурно море от новости се зародил и Apache. + Оригиналната цел е била един вече съществуващ сървър да се подобри, но с наслагването на подобрения и надстройки, нещо много по-съществено се случило.<sup><a href="#src4">[4]</a></sup> + </p> + <p> + В днешно време, над 28% от всички уебсайти се предоставят от Apache. + Сред тях се включват едни от най-големите медийни доставчици: Netflix и Spotify, високо-класни униврситети като MIT и правителствени организации като Американския Национални институти на Здравеопазването.<sup><a href="#src5">[5]</a></sup> + </p> + </section> + <section id="installing"> + <h2>Инсталиране</h2> + <p> + За разлика от много други популярни софтуерни проекти, Apache не предоставя прекомпилирани изпълними файлове! + Това, което те предоставят, е самият изходен код.<sup><a href="#src6">[6]</a></sup> + Всеки човек има свободата да го изтегли и сам да си го компилира. + </p> + <p> + Разбира се, не всеки има техническото знание, време и/или интерес да поеме такава задача. + Затова голяма група ентусиасти споделят своите резултати с потребителите на всички популярни операционни системи. + Все пак, в тази глава ще разгледаме и двете възможности. + </p> + <section id="installing-binaries"> + <h3>Прекомпилирани изпълними файлове</h3> + <section> + <h4>Microsoft Windows</h4> + <p> + От над 15 години, Apache Lounge осигуряват изпълними файлове, които освен че са актуални, предоставят най-новите компилационни оптимизации и подобрения за Windows.<sup><a href="#src7">[7]</a></sup> + Инсталацията е като всяка друга под тази операционна система: + </p> + <ol> + <li> + Навигиране до уебстраницата им за изтегляне: <a href="https://www.apachelounge.com/download/">www.apachelounge.com/download/</a> + </li> + <li> + Изтегляне най-скорошния наличен ZIP файлов архив + </li> + <li> + Разрахивиране чрез някой разраховиатор. + По-модерни версии на Windows такъв уред е директно вграден. + </li> + <li> + Следване стъпките в ReadMe.txt, почти винаги се свеждат до това се изтегли съответна версия на Visual C++ Redistributable for Visual Studio и да се преместят разрахивираните файлове. + </li> + </ol> + </section> + <section> + <h4>Apple MacOS</h4> + <p> + Най-употребяваната система за инсталиране на потребителско-предоставени програми на MacOS се нарича Homebrew. + Разбира се, екипът зад нея поддържат и Apache уеб-сървърът. + Инсталацията се свежда до една проста команда:<sup><a href="#src8">[8]</a></sup> + </p> + <pre><code>brew install httpd</code></pre> + </section> + <section> + <h4>Linux</h4> + <p> + Най-популярните безплатни операционни системи и главният избор за сървърни пространства са системи, базиран на Linux ядрото. + Броят на активно-разработвани ОС от този клас наближава трицифрено число, поради което в тази секция ще се разгледат само най-популярните.<sup><a href="#src9">[9]</a></sup> + Обаче действието е практически същото при всички тях и наподобява този под MacOS: изпълнява се команда, извикваща вградения пакетен мениджър да свръши работата.<sup><a href="#src10">[10]</a></sup> + </p> + <h5>Ubuntu/Debian</h5> + <pre><code>sudo apt install -y apache2</code></pre> + <h5>CentOS/Red Hat Enterprise Linux</h5> + <pre><code>sudo yum install -y apache2</code></pre> + <h5>Gentoo</h5> + <pre><code>sudo emerge apache</code></pre> + <h5>Arch Linux</h5> + <pre><code>sudo pacman -S apache</code></pre> + </section> + </section> + <section id="compiling-source"> + <h3>Компилиране от изходния код</h3> + <section> + <h4>Microsoft Windows</h4> + <p> + Windows е най-употребяваната настолна операционна система. + Нейният дизайн и архитектура е прецизно разработен да предоставя най-доброто потребителско изживяване за средния човек. + За жалост, това е за сметка на изживяването на разработчици. + Поради тази причина, стъпките са най-дълги:<sup><a href="#src11">[11]</a></sup> + </p> + <ol> + <li> + Изтегляне на зависимости: + <ul> + <li>Microsoft Visual C++ 6.0 или по-нови</li> + <li>perl и awk</li> + </ul> + </li> + <li> + Изтегляне на Unix източници (по-късно те ще бъдат настроени за употреба под Windows): + <ul> + <li>Изтегляне и разрахивиране на сорс кода</li> + <li>Изтегляне на APR, AR-Util и APR-Iconv и разархириане съответно в <code>httpd-2.x.x\srclib</code></li> + </ul> + </li> + <li> + Отваряне на команден ред и навигиране до директорията с разархивирания изходен код на Apache + </li> + <li> + Изпълняване на конвертиращия инструмент: + + <pre><code>perl srclib\apr\build\lineends.pl</code></pre> + </li> + <li> + Изпълняване на компилиращия скрипт: + + <pre><code>nmake /f Makefile.win _apacher</code></pre> + </li> + <li> + Изпълняване на инсталиращия скрипт: + + <pre><code>nmake /f Makefile.win installr</code></pre> + </li> + </ol> + </section> + <section> + <h4>MacOS/Linux</h4> + <p> + Поради приликите в архитектурите си и по-благоприятният дизайн за разработчици, стъпките за MacOS и Linux-базирани ОС са на практика идентични. + Разбира се, пакетният мениджър чрез който се инсталират зависимости се различава, но на практика те винаги са инсталирани като зависимости на други програми. + Стъпките са значително по-прости:<sup><a href="#src12">[12]</a></sup> + </p> + <ol> + <li> + Изтегляне и разрахвириане на изходния код + </li> + <li> + Конфигуриране на средата: + + <pre><code>./configure</code></pre> + </li> + <li> + Компилиране: + + <pre><code>make</code></pre> + </li> + <li> + Инсталиране: + + <pre><code>sudo make install</code></pre> + </li> + </ol> + </section> + </section> + </section> + <section id="architecture"> + <h2>Архитектура</h2> + <p> + Като всеки друг сървър, Apache работи като услуга: програма, която е оставена да се изпълнява на заден план. + Първоначалното пускане е бавно, но след това самото изпълнение е бързо. + В сървърна среда, най-често Apache е настроен да се пуска когато хардуера се включва. + </p> + <figure class="right-aligned size-large"> + <img src="./img/02kew01.gif" alt="Архитектура на Apache"> + <figcaption class="centered">Фигура 2. Архитектура на Apache</figcaption> + </figure> + <p> + Това което отличава Apache, особено спрямо неговата конкуренция в началото на съществуването си, е неговият модулярен дизайн. + В самия софтуер присъства едно малко ядро, което действа повече като лепилото за модули. + Модулите съдържат същинските реализации на почти всички компоненти, които се използват от сървъра по време на експлоатация. + Самите модули се зареждат по време на изпълнение, което означава че могат да се добавят и премахват без нужда от рестартиране. + </p> + <p> + Обаче, това изявява един проблем при писането на модули: всяка операционна система е различна и всеки модул ще трябва да се съобразява с нея. + За щастие този проблем е елиминиран с друг жизненоважен компонент: Apache Portable Runtime (APR) библиотеки. + Те стоят като посредник между операционните системи и модули, позволявайки модулна разработка да бъде преизползваема и лесна. + </p> + <p> + За жалост, това добавя още един проблем: ефикасност. + APR библиотеките са малко на брой, и действат като бариери през които мрежовият трафик трябва да минава. + Това щеше да е ок ако това им беше единствената роля, но истински забавания се случват когато се налага да менижират работата на модулите и интернет данни. + От там са се породили Multi-Processing модулите (MPM). + На дадена машина може само един от тях да бъде пуснат, обаче те говорят с ОС хем през APR, хем директно. + Разбира се, тяхната роля е добре дефинирана, затова на практика никой освен The Apache Software Foundation не ги разработва.<sup><a href="#src13">[13]</a></sup> + </p> + </section> + <section id="virtual-hosts"> + <h2>Виртуални хостове</h2> + <p> + В една интернет мрежа, всяко хардуерно устройство се идентифицира чрез така наречен "Internet Protocol Address". + Това е едно дълго число (често представяно като четири малки числа, разделени с точка), което по уникален начин идентифицира даден участник в мрежата.<sup><a href="#src14">[14]</a></sup> + Под контекста на уеб документи, този тип идентификация е полезна когато се говори за клиенти. + Обаче, при доставчиците се оформя проблем: не можем от един и същ сървър да достъпим няколко "сайта", или по-точно, няколко документа под различно сървърно (домейн) име. + </p> + <p> + На ниво компютърни мрежи този проблем се оправя с портове, на ниво Apache този проблем се оправя с виртуални хостове. + Виртуалния хост е една малка структура от данни, която описва релацията между определено сървърно име, достъпено на определен порт и документи на този сървър. + Стандартно е портовете да са номер 80, когато потребителя се е свързал към сървъра по несигурен протокол, и 443 когато се е свързал по сигурен метод. + </p> + <p> + Разбира се, Apache позволява тази релация да бъде значително по-комплексна. + В един виртуален хост може допълнително да се дефинират какви конкретни документи да се връщат спрямо върнатия сървърен статус, разнообразни ограничения на достъп, пренасочване. + Дори се поддържа, в случаите когато една машина има няколко мрежови интерфейса и съответно общо няколко адреса, релация между сървърно име и порт + адрес.<sup><a href="#src14">[15]</a></sup> + </p> + </section> + <section id="configuring"> + <h2>Конфигуриране</h2> + </section> + <section id="sources"> + <h2>Източници</h2> + <ol class="sources"> + <li id="src1"> + Tim Berners-Lee, "WorldWideWeb: Proposal for a HyperText Project", публикувано 12 Ноември 1990, последно посетено 30.11.2024, <a href="http://info.cern.ch/hypertext/WWW/Proposal.html">http://info.cern.ch/hypertext/WWW/Proposal.html</a> + </li> + <li id="src2"> + Tim Berners-Lee, "WorldWideWeb wide-area hypertext app available", публикувано 20 Август 1991, последно посетено 30.11.2024, <a href="https://groups.google.com/g/comp.sys.next.announce/c/avWAjISncfw?pli=1">https://groups.google.com/g/comp.sys.next.announce/c/avWAjISncfw?pli=1</a> + </li> + <li id="src3"> + CERN, "World Wide Web images gallery", публикувано, последно посетено 30.11.2024, <a href="https://home.cern/resources/image/computing/world-wide-web-images-gallery">https://home.cern/resources/image/computing/world-wide-web-images-gallery</a> + </li> + <li id="src4"> + The Apache Software Foundation, "About Apache", публикувано, последно посетено 30.11.2024, <a href="https://httpd.apache.org/ABOUT_APACHE.html">https://httpd.apache.org/ABOUT_APACHE.html</a> + </li> + <li id="src5"> + W3Techs, "Usage statistics of Apache", публикувано 3 Януари 2023, последно посетено 30.11.2024, <a href="https://w3techs.com/technologies/details/ws-apache">https://w3techs.com/technologies/details/ws-apache</a> + </li> + <li id="src6"> + The Apache Software Foundation, "Apache HTTP Server Documentation", версия 2.4, последно посетено 30.11.2024, страница "Using Apache HTTP Server on Microsoft Windows", <a href="https://httpd.apache.org/docs/current/platform/windows.html">https://httpd.apache.org/docs/current/platform/windows.html</a> + </li> + <li id="src7"> + Apache Lounge, "Apache 2.4 VS17 Windows Binaries and Modules", публикувано, последно посетено 30.11.2024, <a href="https://www.apachelounge.com/download/">https://www.apachelounge.com/download/</a> + </li> + <li id="src8"> + Homebrew Formulae, "httpd", публикувано, последно посетено 30.11.2024, <a href="https://formulae.brew.sh/formula/httpd">https://formulae.brew.sh/formula/httpd</a> + </li> + <li id="src9"> + TrueList, "Linux Statistics - 2024", публикувано 17 Февруари 2024, последно посетено 30.11.2024, <a href="https://truelist.co/blog/linux-statistics/">https://truelist.co/blog/linux-statistics/</a> + </li> + <li id="src10"> + DigitalOcean, "How To Install Apache", публикувано, последно посетено 30.11.2024, <a href="https://www.digitalocean.com/community/tutorial-collections/how-to-install-apache">https://www.digitalocean.com/community/tutorial-collections/how-to-install-apache</a> + </li> + <li id="src11"> + The Apache Software Foundation, "Apache HTTP Server Documentation", версия 2.4, последно посетено 30.11.2024, страница "Compiling Apache for Microsoft Windows", <a href="https://httpd.apache.org/docs/current/platform/win_compiling.html">https://httpd.apache.org/docs/current/platform/win_compiling.html</a> + </li> + <li id="src12"> + The Apache Software Foundation, "Apache HTTP Server Documentation", версия 2.4, последно посетено 30.11.2024, страница "Compiling and installing", <a href="https://httpd.apache.org/docs/current/install.html">https://httpd.apache.org/docs/current/install.html</a> + </li> + <li id="src13"> + Nick Kew, "Apache Modules Book, The: Application Development with Apache", 1во издание, публикувано 26 Януари 2007, глава "The Apache Platform and Architecture", <a href="https://www.informit.com/articles/article.aspx?p=705689">https://www.informit.com/articles/article.aspx?p=705689</a> + </li> + <li id="src14"> + Information Sciences Institute, University of Southern California, "DOD STANDARD INTERNET PROTOCOL", 1во издание, публикувано Януари 1980, <a href="https://datatracker.ietf.org/doc/html/rfc760">https://datatracker.ietf.org/doc/html/rfc760</a> + </li> + <li id="src15"> + Ken A. L. Coar, Rich Bowen, "Apache Cookbook", 1во издание, публикувано 28 Ноември 2003, глава 4 "Virtual Hosts", <a href="https://www.oreilly.com/library/view/apache-cookbook/0596001916/ch04.html">https://www.oreilly.com/library/view/apache-cookbook/0596001916/ch04.html</a> + </li> + </ol> + </section> + </article> + </body> +</html> |
