Руководство для начинающих по серверной веб-разработке с Node.js / Habr
Большую часть своей веб-карьеры я работал исключительно на стороне клиента. Проектирование адаптивных макетов, создание визуализаций из больших объемов данных, создание инструментальных панелей приложений и т. Д. Но мне никогда не приходилось иметь дело с маршрутизацией или HTTP-запросами напрямую. До не давнего времени.Этот пост представляет собой описание того, как я узнал больше о веб-разработке на стороне сервера с помощью Node.js, и краткое сравнение написания простого HTTP-сервера с использованием 3 разных сред, Express, Koa.js и Hapi.js.
Примечание: если вы опытный разработчик Node.js, вы, вероятно, подумаете о том, что это все элементарно/просто. ¯\_(ツ)_/¯.
Некоторые основы сети
Когда я начал работать в веб-индустрии пару лет назад, я наткнулся на курс по компьютерным сетям профессора Дэвида Ветерала на Coursera. К сожалению, он больше не доступен, но лекции по-прежнему доступны на веб-сайте Pearson.
Мне очень понравился этот курс, потому что он объяснял, что происходило под капотом, в понятной форме, поэтому, если вы можете взять в руки учебник «Компьютерные сети», прочитайте все подробности о чудесах сети.
Здесь, однако, я собираюсь лишь кратко рассказать о контексте. HTTP (Hypertext Transfer Protocol) — это протокол связи, используемый в компьютерных сетях. В Интернете их много, таких как SMTP (простой протокол передачи почты), FTP (протокол передачи файлов), POP3 (протокол почтового отделения 3) и так далее.
Эти протоколы позволяют устройствам с совершенно разным аппаратным / программным обеспечением связываться друг с другом, поскольку они предоставляют четко определенные форматы сообщений, правила, синтаксис и семантику и т.д. Это означает, что, пока устройство поддерживает определенный протокол, оно может связываться с любым другим устройством. в сети.
От TCP / IP против OSI: в чем разница между двумя моделями?
Операционные системы обычно поставляются с поддержкой сетевых протоколов, таких как HTTP, из коробки, что объясняет, почему нам не нужно явно устанавливать какое-либо дополнительное программное обеспечение для доступа в Интернет. Большинство сетевых протоколов поддерживают открытое соединение между двумя устройствами, что позволяет им передавать данные туда и обратно.
HTTP, на котором работает сеть, отличается. Он известен как протокол без установления соединения, потому что он основан на режиме работы запрос / ответ. Веб-браузеры отправляют на сервер запросы на изображения, шрифты, контент и т.д., но после выполнения запроса соединение между браузером и сервером разрывается.
Servers and Clients
Термин сервер может слегка сбивать с толку людей, впервые знакомых с отраслью, поскольку он может относиться как к аппаратному обеспечению (физические компьютеры, на которых размещены все файлы и программное обеспечение, требуемое веб-сайтами), так и к программному обеспечению (программе, которая позволяет пользователям получать доступ к этим файлам в Интернете). Сегодня мы поговорим о программной стороне вещей. Но сначала несколько определений. URL обозначает Universal Resource Locator и состоит из 3 частей: протокола, сервера и запрашиваемого файла.
Структура URL адреса
Протокол HTTP определяет несколько методов, которые браузер может использовать, чтобы попросить сервер выполнить кучу различных действий, наиболее распространенными из которых являются GET и POST. Когда пользователь щелкает ссылку или вводит URL-адрес в адресную строку, браузер отправляет GET-запрос на сервер для получения ресурса, определенного в URL-адресе.
Сервер должен знать, как обрабатывать этот HTTP-запрос, чтобы получить правильный файл, а затем отправить его обратно браузеру, который его запросил. Наиболее популярное программное обеспечение веб-сервера, которое обрабатывает это Apache и NGINX.
Веб-серверы обрабатывают входящие запросы и отвечают на них соответственно
Оба представляют собой полнофункциональные пакеты программного обеспечения с открытым исходным кодом, которые включают в себя такие функции, как схемы аутентификации, перезапись URL-адресов, ведение журнала и проксирование, и это лишь некоторые из них. Apache и NGINX написаны на C. Технически, вы можете написать веб-сервер на любом языке. Python, golang.org/pkg/net/http, Ruby, этот список может продолжаться довольно долго. Просто некоторые языки лучше выполняют определенные вещи, чем другие.
Создание HTTP сервера с Node.js
Node.js — это среда выполнения Javascript, построенная на движке Chrome V8 Javascript. Он поставляется с модулем http, который предоставляет набор функций и классов для построения HTTP-сервера.
Для этого базового HTTP-сервера мы также будем использовать файловую систему, путь и URL-адрес, которые являются собственными модулями Node.js.
Начните с импорта необходимых модулей.
const http = require('http') // Чтобы использовать HTTP-интерфейсы в Node.js
const fs = require('fs') // Для взаимодействия с файловой системой
const path = require('path') // Для работы с путями файлов и каталогов
const url = require('url') // Для разрешения и разбора URL
Мы также создадим словарь типов MIME, чтобы мы могли назначить соответствующий тип MIME запрашиваемому ресурсу на основе его расширения. Полный список типов MIME можно найти в Internet Assigned Numbers Authority (интернет-центре назначенных номеров).
const mimeTypes = { '.html': 'text/html', '.js': 'text/javascript', '.css': 'text/css', '.ico': 'image/x-icon', '.png': 'image/png', '.jpg': 'image/jpeg', '.gif': 'image/gif', '.svg': 'image/svg+xml', '.json': 'application/json', '.woff': 'font/woff', '.woff2': 'font/woff2' }
Теперь мы можем создать HTTP-сервер с функцией
http.createServer()
, которая будет возвращать новый экземпляр http.Server
.const server = http.createServer()
Мы передадим функцию-обработчик запроса в
createServer()
с объектами запроса и ответа. Эта функция вызывается один раз каждый раз, когда к серверу поступает HTTP-запрос.server.on('request', (req, res) => {
// здесь нужно сделать больше
})
Сервер запускается путем вызова метода
listen
объекта server
с номером порта, который мы хотим, чтобы сервер прослушивал, например, 5000
.server.listen(5000)
Объект
request
является экземпляром IncomingMessage и позволяет нам получать доступ ко всей информации о запросе, такой как статус ответа, заголовки и данные.Объект response
является экземпляром ServerResponse, который является записываемым потоком и предоставляет множество методов для отправки данных обратно клиенту.
В обработчике запросов мы хотим сделать следующее:
- Разобрать входящий запрос и обработать его без расширений
const parsedUrl = new URL(req.url, 'https://node-http.glitch.me/') let pathName = parsedUrl.pathname let ext = path.extname(pathName) // Для обработки URL с конечным символом '/', удаляем вышеупомянутый '/' // затем перенаправляем пользователя на этот URL с помощью заголовка 'Location' if (pathName !== '/' && pathName[pathName.length - 1] === '/') { res.writeHead(302, {'Location': pathName.slice(0, -1)}) res.end() return } // Если запрос для корневого каталога, вернуть index.html // В противном случае добавляем «.html» к любому другому запросу без расширения if (pathName === '/') { ext = '.html' pathName = '/index.html' } else if (!ext) { ext = '.html' pathName += ext }
- Выполните некоторые элементарные проверки, чтобы определить, существует ли запрошенный ресурс, и ответить соответственно
// Создаем правильный путь к файлу, чтобы получить доступ к соответствующим ресурсам const filePath = path.join(process.cwd(), '/public', pathName) // Проверяем, существует ли запрошенный ресурс на сервере fs.exists(filePath, function (exists, err) { // Если запрошенный ресурс не существует, ответим 404 Not Found if (!exists || !mimeTypes[ext]) { console.log('Файл не найден: ' + pathName) res.writeHead(404, {'Content-Type': 'text/plain'}) res.write('404 Not Found') res.end() return } // В противном случае отправим ответ со статусом 200 OK, // и добавляем правильный заголовок типа контента res.writeHead(200, {'Content-Type': mimeTypes[ext]}) // Считать файл и передать его в ответ const fileStream = fs.createReadStream(filePath) fileStream.pipe(res) })
Весь код размещен на Glitch, и вы можете сделать ремикс на проект, если хотите. https://glitch.com/edit/#!/node-http
Создание HTTP-сервера с фреймворками Node.js
Фреймворки Node.js, такие как Express, Koa.js и Hapi.js, поставляются с различными полезными функциями промежуточного программного обеспечения, в дополнение к множеству других удобных функций, которые избавляют разработчиков от необходимости писать самим.
Лично я чувствую, что лучше сначала изучать основы без фреймворков, просто для понимания того, что происходит под капотом, а затем после этого сходить с ума с любым фреймворком, который вам нравится.
В Express имеется собственный встроенный плагин для обслуживания статических файлов, поэтому код, необходимый для выполнения тех же действий, что и в собственном Node.js, значительно короче.
const express = require('express') const app = express() // Укажем директорию в которой будут лежать наши файлы app.use(express.static('public')) // Отправляем index.html, когда пользователи получают доступ к // корневому каталог с использованием res.sendFile() app.get('/', (req, res) => { res.sendFile(__dirname + '/public/index.html') }) app.listen(5000)
Koa.js не имеет подобного плагина внутри своего ядра, поэтому любой требуемый плагин должен быть установлен отдельно. Последняя версия Koa.js использует асинхронные функции в пользу обратных вызовов. Для обслуживания статических файлов вы можете использовать плагин
koa-static
.const serve = require('koa-static')
const koa = require('koa')
const app = new koa()
// Укажем директорию в которой будут лежать наши файлы
// По умолчанию koa-static будет обслуживать файл index.html в корневом каталоге
app.use(serve(__dirname + '/public'))
app.listen(5000)
Hapi.js поддерживает настройку и вращается вокруг настройки объекта
server
. Он использует плагины для расширения возможностей, таких как маршрутизация, аутентификация и так далее. Для обслуживания статических файлов нам понадобится плагин с именем inert
.const path = require('path')
const hapi = require('hapi')
const inert = require('inert')
// Маршруты могут быть настроены на объекте сервера
const server = new hapi.Server({
port: 5000,
routes: {
files: {
relativeTo: path.join(__dirname, 'public')
}
}
})
const init = async () => {
// server.register() команда добавляет плагин в приложение
await server.register(inert)
// inert добавляет обработчик каталога в
// указатель маршрута для обслуживания нескольких файлов
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: '.',
redirectToSlash: true,
index: true
}
}
})
await server.start()
}
init()
У каждой из этих платформ есть свои плюсы и минусы, и они будут более очевидными для более крупных приложений, а не просто для обслуживания одной HTML-страницы. Выбор структуры будет сильно зависеть от реальных требований проекта, над которым вы работаете.
Завершение
nginx — Википедия
Nginx (engine x — по-русски произносится как э́нгинкс[8] или э́нжин-и́кс[9], также энджи́нкс) — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, macOS, AIX и HP-UX). Начиная с версии 0.7.52 появилась экспериментальная[10] бинарная сборка под Microsoft Windows.
Игорь Сысоев начал разработку в 2002 году[11]. Осенью 2004 года вышел первый публично доступный релиз. С июля 2011 работа над nginx продолжается в рамках компании Nginx.
Nginx позиционируется производителем как простой, быстрый и надёжный сервер, не перегруженный функциями.
Применение nginx целесообразно прежде всего для статических веб-сайтов и как обратного прокси-сервера перед динамическими сайтами[источник не указан 2726 дней].
HTTP-сервер[править | править код]
- обслуживание неизменяемых запросов, индексных файлов, автоматическое создание списка файлов, кеш дескрипторов открытых файлов
- акселерированное проксирование без кэширования, простое распределение нагрузки и отказоустойчивость
- поддержка кеширования при акселерированном проксировании и FastCGI
- акселерированная поддержка FastCGI и memcached серверов, простое распределение нагрузки и отказоустойчивость
- модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, HTTP-аутентификация, SSI-фильтр
- несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно
- поддержка SSL
- поддержка PSGI, WSGI
- экспериментальная поддержка встроенного Perl
SMTP/IMAP/POP3-прокси сервер[править | править код]
- перенаправление пользователя на SMTP/IMAP/POP3-бэкенд с использованием внешнего HTTP-сервера аутентификации
- простая аутентификация (LOGIN, USER/PASS)
- поддержка SSL и STARTTLS
В nginx рабочие процессы обслуживают одновременно множество соединений, мультиплексируя их вызовами операционной системы select, epoll (Linux) и kqueue (FreeBSD). Рабочие процессы выполняют цикл обработки событий от дескрипторов (см. Событийно-ориентированное программирование). Полученные от клиента данные разбираются с помощью конечного автомата. Разобранный запрос последовательно обрабатывается цепочкой модулей, задаваемой конфигурацией. Ответ клиенту формируется в буферах, которые хранят данные либо в памяти, либо указывают на отрезок файла. Буферы объединяются в цепочки, определяющие последовательность, в которой данные будут переданы клиенту. Если операционная система поддерживает эффективные операции ввода-вывода, такие как writev и sendfile, то nginx применяет их по возможности.
Алгоритм работы HTTP сервера выглядит следующим образом[12]:
- получить очередной дескриптор из kevent(2);
- прочитать данные из файла и записать в socket, используя либо write(2)/read(2), например, так[13]:
while ( ( cnt = read ( read_file_descriptor, buffer, block_size ), write ( socket_file_descriptor, buffer, count ) == cnt ) ) byte_count += count;
- либо используя системный вызов sendfile(2), выполняющий те же действия, что приведённый выше код, но в пространстве ядра;
- перейти к шагу 1.
Конфигурация HTTP-сервера nginx разделяется на виртуальные серверы (директива «server»). Виртуальные серверы разделяются на location’ы («location»). Для виртуального сервера возможно задать адреса и порты, на которых будут приниматься соединения, а также имена, которые могут включать «*» для обозначения произвольной последовательности в первой и последней части, либо задаваться регулярным выражением.
location’ы могут задаваться точным URI, частью URI либо регулярным выражением. location’ы могут быть сконфигурированы для обслуживания запросов из статического файла, проксирования на fastcgi/memcached сервер.
Для эффективного управления памятью nginx использует пулы. Пул — это последовательность предварительно выделенных блоков динамической памяти. Длина блока варьируется от 1 до 16 килобайт. Изначально под пул выделяется только один блок. Блок разделяется на занятую область и незанятую. Выделение мелких объектов выполняется путём продвижения указателя на незанятую область с учётом выравнивания. Если незанятой области во всех блоках не хватает для выделения нового объекта, то выделяется новый блок. Если размер выделяемого объекта превышает значение константы NGX_MAX_ALLOC_FROM_POOL либо длину блока, то он полностью выделяется из кучи.
Таким образом, мелкие объекты выделяются очень быстро и имеют накладные расходы только на выравнивание.
nginx содержит модуль географической классификации клиентов по IP-адресу. В его основу входит база данных соответствия IP-адресов географическому региону, представленная в виде radix tree (сжатое префиксное дерево или сжатый лес) в оперативной памяти. nginx предварительно распределяет первые несколько уровней дерева таким образом, чтобы они занимали ровно 1 страницу памяти. Это гарантирует, что при поиске IP-адреса для первых нескольких узлов при трансляции адреса всегда найдётся запись в TLB.
По данным Netcraft на декабрь 2019 года, число сайтов, обслуживаемых nginx, превышает 479 миллионов, что делает его первым по популярности веб-сервером в мире. Доля среди активных сайтов — 19,14 %, что ставит nginx на второе место после веб-сервера Apache[14].
По данным W3Techs, nginx наиболее часто используется на высоконагруженных сайтах[15], занимая первое место по частоте использования среди 100 000 самых посещаемых сайтов в мире — больше трети из них работает на nginx.
По данным российского регистратора REG.RU, nginx является самым популярным веб-сервером доменных зон .ru[16], .рф[17] и .su[18], обслуживая более половины каждого сегмента.
NGINX — самый популярный веб-сервер в России с долей рынка 65,90 %[19].
Среди известных проектов, использующих nginx: Рамблер[20], Яндекс[21], ВКонтакте[22], Facebook, Netflix[23], Instagram[24], Mail.ru, Хабр[25], Живой Журнал[26], Avito.ru[27], Badoo[28], Ukr.net, Begun, WordPress.com, SourceForge.net[29], Qiwi.com[30], Groupon, Rutracker.org[31], Pinterest[32], Tumblr[33], Superjob.ru[34], HeadHunter[35], 2ГИС[36] и многие другие[14].
Для разработки коммерческих продуктов Игорь Сысоев создал в июле 2011 года компанию Nginx[37]. Разработка ведётся в офисе, находящемся в Москве, для продаж создана американская «дочка» — Nginx Inc[38]. В феврале 2012 компания начала предоставлять платные услуги[39], были введены три пакета технической поддержки — Premium, Advanced и Essential, в рамках которых подписчики получали услуги по установке, настройке производительности, конфигурации, сопровождению, содействию в проектировании, окончательной оптимизации.
В декабре 2011 года компания привлекла 3 млн долларов от пула инвесторов (в раунде лидировал фонд BV Capital[en]; соинвесторами выступили фонды Runa Capital и семейный фонд Майкла Делла MSD Capital[en][38][40].
В октябре 2013 компания привлекла ещё 10 млн долларов. Ведущим инвестором выступил фонд New Enterprise Associates[en]; соинвесторами выступили все фонды предыдущего раунда, а также Аарон Леви, глава Box.com[41].
9 декабря 2014 было объявлено о привлечении дополнительных инвестиций в размере 20 млн долларов. Возглавил раунд венчурный фонд New Enterprise Associates при участии фондов Index Ventures[en], Runa Capital, E.ventures (бывший BV Capital) и гендиректора Nginx Гуса Робертсона[42][43][44].
11 марта 2019 года компания F5 Networks объявила[45] о покупке Nginx за 670 млн долларов, сделка была завершена 9 мая 2019 года[46][47].
12 декабря 2019 года стало известно, что корпорация Rambler (46,5 % которой принадлежит Сбербанку России[48]) заявила исключительные права на исходные тексты nginx, отдельные СМИ сообщали о проведении обыска в офисе компании Nginx и об уголовном деле по ст. 146 УК РФ (Нарушение авторских и смежных прав).[49][50][51][52]
Как быстро поднять HTTP сервер
В интернете существует масса статей про настройку тех или иных HTTP серверов. равно как существует и огромное множество самих HTTP серверов, поэтому принять решение в пользу того или иного решения зачастую бывает непросто.
В этой статье мы не будем заниматься вопросом выбора сервера — ведь слишком много условий надо учесть. Одни сервера заточены под работу в Unix/Linux системах, но не работать на Windows платформе, другие быстрые и производительные, но не поддерживают определенные языки программирования, на которых может быть написан ваш сайт.
Мы задались другой задачей — как можно быстрее и легче развернуть HTTP сервер, который будет достаточно производителен, стабилен и защищен при доступе из интернета. Но для начала краткая характеристика имеющихся серверных решений.
Обзор HTTP рынка серверов
Итак, все HTTP сервера можно разделить на продуктивные и локальные. Первые можно и нужно использовать для публикации web контента в интернет или публикации web-приложений. К таким серверам относятся мировые лидеры, занимающие основную долю рынка — Apache, Microsoft IIS и nginx. Первый — мировый лидер для публикации веб сайтов на хостингах в мире. IIS чаще всего используется для публикации web-приложений, написанных для Windows или на языках платформы .NET, с использованием VBScript и JScript, Sharepoint сайтов и для публикации корпоративных порталов, например онлайн-банков. Для остальных дачах применение IIS неоправдено. nginx — отечественная разработка, которую все чаще применяют на web-хостингах, потому что этот сервер отличается от Apache большей масштабируемостью и производительностью. Зачастую, их можно применять вместе.
Но все эти решения — это долго, сложно для развертывания и требует полноценного сервера на Linux или Windows Server. Нас в данном случае это не интересует.
Также существует группа локальных серверов: Denwer, XAMPP, VertigoServ, Open Server, WAMP и другие. Что такое локальный сервер? Это не одна программа (не один конкретный веб сервер), а специальный сборник, куда входят облегченные варианты сложных серверных программ. Обычно в сборку входят: сам сервер (в основном Apache, но могут быть и другие), компилятор PHP (с его помощью браузер может прочитать коды и собрать страницу), компоненты для работы с базами данных, различные установщики и многие другие программы. Все это нужно разработчикам веб-приложений для тестирования их разработок на локальных машинах. Действительно, удобно и быстро можно развернуть пакет «все в одном», но это совершенно незащищенные решения, не предназначенные для публикации сайтов в интернет. К слову говоря, из локальных серверов я предпочитаю Vertigo (простой и производительный) и Open Server (отличный портативный отечественный продукт, достойная замена Denwer-у ).
Не могу не рассказать о еще одном отечественном полнофункциональном сервере для предприятий — Eserv. Это мощный почтовый, HTTP сервер FTP-сервер, DNS-сервер, статистика, SNMP-agent и SNMP-монитор, видеомониторинг в одном. Возможности почтового сервера просто безграничны: Поддержка групповой работы — WIKI, форумы, общие IMAP-папки, блоги, чат, NNTP-сервер, сервер календарей и задач, общая адресная книга (LDAP-сервер), поддержка Exchange ActiveSync (EAS) для синхронизации мобильных клиентов. Поддерживаются любые способы авторизации (ActiveDirectory, WinNT local, ODBC, текстовые списки, встроенная БД, X.509-сертификаты и т.д.), SSL/TLS. И это платный коммерческий продукт. Но мы рассматриваем HTTP в этой статье, поэтому… HTTP Сервер, входящий в комплект — acWEB — совершенно бесплатное Open Source решение. Это достойная замена IIS под Windows, которая поддерживает:
- HTTP server with SSL/TLS
- Built-in Forth translator
- CGI support
- ISAPI support
- FastCGI support
Все домены, A-записи в DNS которых указывают на веб-сервер под управлением Eserv, автоматически получают готовую к использованию систему групповой работы, включающую и управление содержимым сайта (см. следующий раздел), основой которой являются wiki и общие папки. Но можно продолжать использовать Eserv и для обычных сайтов (статические страницы, различные CMS, форумы, магазины на PHP и Perl, и т.д.), если того требуют обстоятельства. Поддержка FastCGI включена в Eserv по умолчанию, и режим работы PHP (CGI, ISAPI или FastCGI) под acWEB задается опцией настройки.
Надо сказать, что сервер это очень малотребователен к ресурсам.
Но это было лирическое отступление.
Легкие HTTP сервера
Долгое время я считал самым легким и быстрым в развертывании еще один бесплатный отечественный продукт Макса Феоктистова — Small HTTP server, который на самом деле был больше, чем веб сервер. Web, почтовый сервер, DNS сервер, FTP сервер, Proxy сервер… Все в одном! И все это весит 146 Кбайт и не требует установки. С точки зрения HTTP, это полноценный веб сервер, поддерживающий:
- Server Side Includes (включения на стороне сервера), регулярные выражения в SSI.
- CGI интерфейс для скриптов (Запуск исполняемых файлов; Perl, PHP, и других внешних интерпретаторов)
- ISAPI интерфейс.
- Виртуальные хосты и каталоги.
К сожалению, для исполнения скриптов требуются внешние интерпретаторы для Perl и PHP соответственно, но это и понятно при таком размере сервера. Обработка phtml-страниц через запуск внешнего PHP-интерпретатора. Сервер может поддерживать несколько виртуальных хостов. Каждый хост имеет собственный корневой каталог и также может включать виртуальные каталоги общие для всех.
Все это звучит круто, но… требует достаточно хорошего понимания того, как работает сервер и умения конфигурировать файл php.ini, если вам требуется исполнение PHP. Хотя кому это нужно для Sql!? Строго говоря, настроек миллион, а интерфейс очень неудобный, отсталый, написанный много лет назад. Чтобы запустить сервер вам потребуется минут 5, а чтобы его настроить под себя — не один день. Ну а самое главное, что с 2012 года сервер не обновлялся, документация тоже оставляет желать лучшего.
Поэтому этот сервер вы можете иметь ввиду, если вам хочется что-то надежное, потребляющее очень мало ресурсов, но которое потребует от вас много усилий по изучению настроек.
Самый легкий и простой HTTP сервер
То, на чем я остановился и пользуюсь до сих пор — HTTP File Server. Как следует из названия, этот HTTP сервер предназначен, в первую очередь для расшаривания файлов по интернет. Но точно также легко, можно и выкладывать HTML сайт у себя на сервере.
Строго говоря, почти ничего делать не нужно, кроме как указать папку, в которой находится контент сайта («bind root to real-folder») и первый файл сайта, если он отличается от index.htm. Да, исполнение серверных скриптов, таких как PHP и ASP, не поддерживается в HFS. Если для вас это главное — можете дальше не читать, а выбрать что-то из серверов выше. Если же вам требуется публиковать статические страницы или файлы для скачивания и загрузки, то HFS — удобное решение.
HFS поддерживает концепцию виртуальной файловой системы, но сервер может работать и с реальными папками на диске. В виртуальную структуру можно включать реальные папки с их содержимым. Очень удобно.
Преимущества HFS:
- не требует установки, состоит из одного маленького исполняемого файла.
- почти не требует ресурсов, нет утечки памяти.
- вся конфигурация хранится или в реестре или в одном ini-файле, на выбор.
- Можно запустить сервере как службу Windows.
- Вся настройка производится через достаточно простой GUI интерфейс. Чтоб запустить сайт, требуется 2 минуты. Вся первичная настройка описана здесь.
- Вывод можно настроить через кастомизированные шаблоны (файлы .tpl), которые полностью доступны для редактирования, как и весь код, впрочем. Можно написать шаблон, в котором добавлены любые произвольные кнопки и меню. Это при условии, если вы не хотите публиковать готовый сайт.
Стандартный шаблон достаточен в большинстве случаев: в нем есть возможность логина, поиска по файлам и папкам сервера, групповой работы с файлами. Подробнее здесь. - Начиная с версии 2.3 поддерживаются макросы, которые заменяют серверные скрипты, которые используются совместно с шаблонами (templates). Больше о HFS макросах в wiki.
- Поддерживается полноценное скачивание и закачка файлов на сервер. Вам только требуется указать папки для этого в вашей виртуальной файловой системе и настроить на них права.
- Сервер поддерживает настройку прав доступа для пользователей и групп. На каждую папку можно настроить права отдельно или унаследовать их.
- Поддерживается тонкая настройка ограничения пропускной способности для групп и пользователей на скачивания и закачку.
- Сервер постоянно мониторит доступные IP адреса. Вы можете указать порт и IP, на котором вы хотите, чтобы сервер отвечал.
- Естественно поддерживается ограничение на количество различных подключений и скачиваний для групп и пользователей.
- Продвинутые могут настроить свои MIME типы.
- Поддерживается сжатая отдача контента.
- Доступа подробная система логирования любых событий на севере. Из текущего лога в окне можно прямо забанить пользователей по IP или другим критериям.
- Поддерживается работа с Dynamic DNS
- Поддержка HTTPS с помощью внешнего модуля Stunnel
Из недостатков по сути — только отсутствие возможности работы с внешними интерпретаторами и SQL. На сайте разработчика представлена очень подробная документация в wiki. С её помощью вы сможете быстро начать.
Пример работающего сайта со стандартным шаблоном — http://localserv.ru
(Посещений: 3 408, из них сегодня: 8)
Понравилась публикация? Почему нет? Оставь коммент ниже или подпишись на feed и получай список новых статей автоматически через feeder.
сервер — это… Что такое Интернет-сервер?
- Интернет-сервер
- Архитектура серверов Wikimedia
Веб-сервер — это сервер, принимающий веб-браузеров, и выдающий им HTML-страницей, изображением, файлом, медиа-потоком или другими данными. Веб-серверы — основа Всемирной паутины.
Веб-сервером называют как программное обеспечение, выполняющее функции веб-сервера, так и компьютер, на котором это программное обеспечение работает.
Клиенты получают доступ к веб-серверу по веб-страницы или другого ресурса.
Дополнительные функции
Дополнительными функциями многих веб-серверов являются:
- ведение журнала обращений пользователей к ресурсам,
- аутентификация пользователей,
- поддержка динамически генерируемых страниц,
- поддержка
Программное обеспечение
На сегодня двумя наиболее распространёнными веб-серверами, вместе занимающими около 85 % рынка [1][2], являются:
- свободный веб-сервер, наиболее часто используется в Unix-подобных ОС
- IIS от компании ОС семейства Windows NT
Также на текущий момент известны такие сервера как:
- свободный веб-сервер, разработанный Игорем Сысоевым в 2002 году. В текущий момент пользуется большой популярностью на крупных сайтах.
- свободный веб-сервер, разрабатываемый с расчётом на быстроту и защищённость, а также соответствие стандартам.
- GWS (Google Web Server) — веб-сервер разработанный компанией Resin — свободный высокопроизводительный веб-сервер приложений включающий в себя такие черты как масштабируемость, и распределение нагрузки.
Клиенты
В качестве клиентов для обращения к веб-серверам могут использоваться совершенно различные устройства:
Примечания
- ↑ Наиболее популярные веб-серверы на 2007 по данным netcraft.com
- ↑ June 2008 — Netcraft Web Server Survey
См. также
Ссылки
Wikimedia Foundation. 2010.
- Интернасьональ (футбольный клуб)
- Интернет-сайт
Смотреть что такое «Интернет-сервер» в других словарях:
WEB-сервер (или Интернет-сервер) — – компьютер на котором размещена информация, предоставляемая для доступа из Интернета. Web сервер также называют Web узлом … Энциклопедический словарь СМИ
Сервер Интернет — компьютер, подключенный к сети, или выполняющаяся на нем программа, предоставляющие клиентам доступ к общим ресурсам и управляющие этими ресурсами. Каждый компьютер, подключенный к сети Интернет имеет два равноценных уникальных адреса: цифровой… … Финансовый словарь
Интернет-вещание — Интернет радио или веб радио группа технологий передачи потоковых аудиоданных через сеть Интернет. Также в качестве термина интернет радио или веб радио может пониматься радиостанция, использующая для вещания технологию потокового вещания в… … Википедия
Интернет вещание — Интернет радио или веб радио группа технологий передачи потоковых аудиоданных через сеть Интернет. Также в качестве термина интернет радио или веб радио может пониматься радиостанция, использующая для вещания технологию потокового вещания в… … Википедия
Интернет радио — или веб радио группа технологий передачи потоковых аудиоданных через сеть Интернет. Также в качестве термина интернет радио или веб радио может пониматься радиостанция, использующая для вещания технологию потокового вещания в Интернет.… … Википедия
Интернет-радио — или веб радио группа технологий передачи потоковых аудиоданных через сеть Интернет. Также в качестве термина интернет радио или веб радио может пониматься радиостанция, использующая для вещания технологию потокового вещания в Интернет.… … Википедия
Интернет-принтер — Интернет принтер принтер с функцией подключения к интернету, без необходимости подключения к компьютеру. Содержание 1 Особенности интернет принтеров 2 Примеры интерне … Википедия
Интернет Тольятти — Основная статья: Тольятти Интернет Тольятти история появления и развития Интернет в Тольятти. Содержание 1 Преамбула 2 1980 1990 годы 2.1 1986 … Википедия
Интернет-портал — (portal от лат. porta ворота) веб сайт, предоставляющий пользователю Интернета различные интерактивные сервисы, работающие в рамках одного веб сайта, такие как почта, поиск, погода, новости, форумы, обсуждения, голосования… … Википедия
СЕРВЕР — [англ. server Словарь иностранных слов русского языка
Книги
- ELASTIX– общайтесь свободно, Владислав Юров. Юров Владислав – профессиональный IT-менеджер с более чем 20-тилетним стажем. Труд, вложенный автором в создание книги, будет по достоинству оценен ИТ специалистамисредних и крупных компаний… Подробнее Купить за 450 руб электронная книга
- Устанавливаем и настраиваем Ubuntu Server 2012-2015 и офисные ПК с Ubuntu, Филипп Резников. Известно, что большинство идей и технологий, используемых платформой Windows, пришли из мира Unix и Linux. Поэтому компьютер с операционной системой Linux на предприятиях может делать всё… Подробнее Купить за 199 руб электронная книга
- Осваиваем популярные системы управления сайтом (CMS), Станислав Горнаков. Пытаясь создать свой интернет-проект, вы, вероятно, не раз задавались различными вопросами относительно систем управления сайтом (Content System Management – CMS). Смоделируем примерный… Подробнее Купить за 159 руб электронная книга