Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit8e4785932449fa1d8897a4d81e7712be6329936b (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-11-30 20:09:40 +0200
Committer
 Syndamia <kamen@syndamia.com>
2024-11-30 20:09:40 +0200
Filesb30aa90416ff243558da5581e186b264fd859cfd
uni-projects-8e4785932449fa1d8897a4d81e7712be6329936b.tar
uni-projects-8e4785932449fa1d8897a4d81e7712be6329936b.tar.gz
uni-projects-8e4785932449fa1d8897a4d81e7712be6329936b.zip
Parente56ceca9351f207c96a65d05a753f24034931050 (diff)
referat(WT): Add initial implementation
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
new file mode 100644
index 0000000..9035c8d
--- /dev/null
+++ b/Year 4/Web technologies/referat/img/02kew01.gif
Binary files differ
diff --git a/Year 4/Web technologies/referat/img/9001001_01.jpg b/Year 4/Web technologies/referat/img/9001001_01.jpg
new file mode 100644
index 0000000..9290a6c
--- /dev/null
+++ b/Year 4/Web technologies/referat/img/9001001_01.jpg
Binary files differ
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>