По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Firebase - это платформа для разработки приложений, запущенная в 2012 году и двумя годами позже приобретенная Google. Изначально Firebase задумывалась как база данных для приложений реального времени, но Google увидел ее потенциал и решил добавить к ней дополнительные сервисы.
В настоящее время Firebase представляет собой систему BaaS (Backend as as Service) для упрощения создания веб-приложений и мобильных приложений с 18 службами. Среди компаний, использующих услуги BaaS Firebase, - Accenture, Alibaba Travels, Stack, Twitch и Instacart, а также более 2300 других.
Преимущества использования Firebase
Первой из услуг, предлагаемых Firebase, была база данных в реальном времени, и она остается одной из самых привлекательных. Real-time базы данных Firebase размещаются в облаке, хранят данные в формате JSON и синхронизируются в реальном времени с каждым подключенным к ним клиентом. Независимо от того, используете ли вы iOS SDK, Android SDK или JavaScript SDK, все приложения, подключенные к Realtime базе данных Firebase, совместно используют один экземпляр базы данных, всегда работают с последними данными.
Cloud Firestore - еще один интересный сервис Firebase. Это NoSQL база данных документов, предназначенная для облегчения хранения, синхронизации и выполнения запросов для мобильных и веб-приложений в глобальном масштабе. Создание иерархий для хранения связанных данных и запросов для получения данных позволяет полностью реализовать потенциал Cloud Firestore. В свою очередь, запросы масштабируются в зависимости от размера результатов, а не от размера набора данных. Это позволяет приложениям масштабироваться с самого начала, не дожидаясь момента, когда запрашиваемые ресурсы превысят имеющиеся.
В дополнение к вышеупомянутым службам баз данных Firebase также предлагает услуги хостинга, хранилища файлов, функции (в стиле AWS Lambda) и многое другое.
Создание API
API-интерфейсы - это способ предоставления услуг для использования вашими собственными или сторонними приложениями. Firebase позволяет предоставлять настраиваемые службы, которые, в свою очередь, используют собственные службы Firebase, без необходимости настраивать серверную часть для этих служб. Вы можете, например, предложить доступ к базе данных Firebase в реальном времени для сторонних приложений для запроса информации, собираемой промышленными датчиками.
Первым шагом в создании API в Firebase является доступ к консоли Firebase и добавление проекта, нажав «Добавить проект» (Add project) и присвоив название новому проекту. Google предоставит вам возможность включить Google Analytics для вашего нового проекта. Рекомендуется принять эту рекомендацию, так как вы получите такие преимущества, как A/B-тестирование и широкий спектр статистических отчетов относительно вашего API.
После создания проекта вы сможете выбрать службы Firebase, которые будет использовать ваш API. Чтобы проиллюстрировать эту задачу, мы разберём, как использовать службу базы данных Firebase Realtime.
Настройка базы данных реального времени в Firebase
На панели навигации слева в разделе «Разработка» (Develop) щелкните «Realtime Database». Справа появится кнопка «Create Database». Нажмите на нее, чтобы создать свою первую базу данных в Firebase.
Затем вам нужно будет выбрать один из нескольких вариантов географического местоположения для вашей новой базы данных. Выберите тот, который ближе всего к вашим пользователям. Это важный аспект для минимизации задержки вашего API, особенно для приложений реального времени.
Следующим шагом является настройка основных правил безопасности для вашей базы данных. Вы можете выбрать заблокированный режим, а затем назначить права доступа по мере необходимости или выбрать тестовый режим, который разрешает все операции чтения и записи.
Для начала, чтобы не усложнять свою жизнь настройками безопасности, можно выбрать тестовый режим. А правила безопасности можете настроить позже.
Как только вы закончите настройку своей базы данных, соответствующий API также будет добавлен в разделе API and Services в консоли Google Cloud Platform.
Программирование Firebase API
На данный момент у вас уже есть основные элементы вашего проекта, настроенные в консоли Firebase. Следующим шагом будет написание кода API. Для этого вам нужно будет инициализировать хостинг и функции Firebase на вашем локальном компьютере. Вы можете установить firebase-tools с помощью npm:
npm install -g firebase-tools
Затем вы можете войти в firebase и инициализировать свой проект с помощью следующих команд:
firebase login firebase init
Отобразится экран приветствия, в котором Firebase укажет папку папке, в которой будет храниться ваш проект, и появится меню параметров.
В этом меню выберите Functions and Hosting (опция «Хостинг» позволит вам иметь собственный URL-адрес для API). Затем выберите из списка приложение Firebase, которое вы создали ранее, после чего вы должны выбрать язык для использования. Для разработки веб-API вы можете выбрать JavaScript.
Если вы будете использовать зависимости пакетов, установите их с помощью npm внутри папки функций. Затем вы можете начать писать код для своих функций. Не забудьте включить пакеты firebase-functions и firebase-admin наряду с другими пакетами, которые вам нужны:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
Чтобы использовать базу данных в реальном времени, вы должны указать ее URL при инициализации вашего JavaScript SDK. URL-адрес находится в разделе Realtime Database консоли Firebase. Вы можете узнать его по формату:
https://<database-name>.<region>.firebasedatabase.app
Вы можете использовать следующий фрагмент кода для инициализации вашего SDK, заменяя данные на свои:
var config = {
apiKey: "apiKey",
authDomain: "projectId.firebaseapp.com",
databaseURL: "https://databaseName.firebaseio.com",
storageBucket: "bucket.appspot.com"
};
firebase.initializeApp(config);
var database = firebase.database();
После того, как написали код функции API, пора приступить к развертыванию. Но перед этим нужно будет внести некоторые изменения в firebase.json, добавив следующие строки, измененные в соответствии с конфигурацией нашего проекта:
"rewrites": [
{
"source": "/api/v1/**",
"function": "webApi"
}
]
Следующий шаг - развертывание. В первый раз нужно выполнить полное развертывание, выполнив команду:
firebase deploy
При последующих развертываниях вы сможете развертывать только функции, используя параметр –only functions.
После выполнения команды Firebase CLI в терминале отобразит URL-адреса HTTP эндпоинтов ваших функций, которые вы можете использовать для вызова ваших API-интерфейсов из веб-приложения. URL-адрес содержит идентификатор вашего проекта и регион для функции HTTP. Например, следующий URL-адрес можно использовать для вызова функции запроса элемента, передав его itemid = 1 в качестве параметра:
https://us-central1-apiproject-8753c.cloudfunctions.net/itemQuery?itemid=1
Чтобы выполнить функцию, откройте URL-адрес с соответствующими параметрами в браузере.
Обратите внимание, что для развертывания в производственной среде требуется подписка на план Firebase Blaze. Данный план снимает деньги по мере использования, о чем вы можете прочитать на странице цен на Firebase. Это услуга выставляет счет по факту использования, что означает, что вам выставляется счет за использование в конце каждого месяца.
Если у вас нет подписки на Blaze, команда развертывания не отобразит URL-адрес для API. Вместо этого вы увидите сообщение, информирующее о том, что вы должны подписаться на план Blaze, если вы хотите выполнить развертывание в среде выполнения. В этом случае вы все равно можете использовать Firebase Local Emulation Suite для создания и тестирования приложений на локальном компьютере вместо их развертывания в производственной среде Firebase. Локальное тестирование полезно, чтобы избежать ненужных затрат во время разработки приложения, поскольку каждый запуск теста может приводить к расходам на вашем счете.
Локальное тестирование и прототипирование
Инструмент Local Emulator Suite предлагает интегрированный пользовательский интерфейс, который делает упрощает создание прототипов и тестирование ваших приложений на локальном компьютере.
С помощью пользовательского интерфейса Emulator Suite вы можете тестировать проекты своей базы данных, рабочие процессы облачных функций, анализировать производительность серверных служб и оценивать изменения в правилах безопасности и пр. По сути, это безопасная песочница для проверки функциональности вашего API перед отправкой в производственную среду.
Чтобы эмулировать свои функции или протестировать приложение локально, запустите эмуляторы firebase: start. Чтобы использовать эмулятор Firestore, на компьютере должна быть установлена Java.
При вызове Firestore Emulator, команда вернет URL-адрес, который позволит вам открыть пользовательский интерфейс Emulator Suite в вашем браузере. По умолчанию этот URL-адрес будет localhost: 4000, но он может отличаться на каждой машине.
Вы также получите полный URL-адрес своей функции HTTP. Этот URL будет выглядеть примерно так:
http://localhost:5001/apiproject-8753c/us-central1/itemQuery
Только он будет иметь имя вашего проекта, имя вашей функции, а также может иметь другой номер порта на вашем локальном компьютере.
Чтобы протестировать функцию, скопируйте URL-адрес, возвращаемый эмулятором, добавив все необходимые параметры (например, ?itemid = 1), и откройте в новой вкладке браузера. Результаты выполнения API появятся в пользовательском интерфейсе Emulator Suite.
На вкладке «Logs» вы увидите новые логи, указывающие, что функция itemQuery() была выполнена. Если ваша функция генерирует новые данные в базе данных Firestore, вы увидите их на вкладке Firestore.
Расширение возможностей вашего API
Если вы хотите, чтобы разрабатываемые вами API стали популярными, Firebase может помочь и с этим. Не только потому, что это позволяет вам быстрее создавать приложение, снимая много работы по настройке и запуску серверных сервисов, но также помогая вам в позиционировании вашего продукта. Как такое возможно? Просто потому, что приложения, связанные с Firebase, занимают более высокие позиции в поисковом рейтинге, чем другие приложения.
Также примите во внимание API индексирования приложений Firebase. Этот инструмент улучшает поисковый рейтинг ссылок приложений и помогает пользователям находить желаемый контент. Он также помещает кнопку "Установить" после кнопки на главной странице вашего приложения, чтобы заинтересованные пользователи всего за один клик могли пользоваться вашим приложением.
В заключение отметим, что Firebase не только предлагает услуги бэкэнда, которые значительно ускоряют разработку собственного API, но и помогает продвигать его и зарабатывать на этом деньги.
В этом руководстве узнаем, как настроить сервер Nginx для производственной среды.
Тестовый веб-сервер отличается от рабочего сервера в планах безопасности и производительности.
По умолчанию, веб-сервер Ngnix готов к работе сразу после установки. Тем не менее, настройки по умолчанию недостаточны для рабочего севера. Поэтому мы сфокусируемся на настройке сервера для большей производительности в случае высокой и нормальной нагрузки, а также на настройках безопасности в целях защиты от любопытного пользователя.
Если у вас не установлен веб-сервер, можете узнать, как сделать это перейдя по ссылке. Здесь показано как установить Ngnix на Unix платформы. Рекомендуется выбирать установку из исходного кода, так как обычный релиз не включает некоторые модули, используемые в этом руководстве.
Настройка производительности и безопасности Nginx
Требования
У вас должны быть установлены нижеследующие компоненты и убедитесь, что веб-сервер запущен на системе на базе Debian, например Ubuntu.
Ubuntu или любая система семейства Debian
wget
Vim (текстовый редактор)
Также имейте ввиду, что некоторые команды из этого руководства придется запускать от имени привилегированного пользователя пользуясь командой sudo.
Разбор структуры конфигурации Nginx
В этом разделе рассмотрим следующие вопросы:
Структура Nginx
Разделы событий, HTTP и Mail
Правильный синтаксис Nginx
В конце раздела узнаете об структуре конфигурационного файла Nginx, роль и назначение каждого раздела и как задавать директивы внутри разделов.
Весь файл конфигурации Nginx разделен на такие разделы, как event section, http section, mail section и т.д.
Основной конфигурационный файл расположен по пути /etc/ngnix/ngnix.conf, а другие - /etc/nginx.
Основная секция
В этой секции расположены директивы, для которых нет специальных разделов. Такие директивы как user nginx, worker_processes 1, error_log /var/log/nginx/error.log warn, pid /var/run/nginx.pid могут быть расположены в этом разделе.
Но некоторые из этих директив могут быть в секции event, например werker_processes.
Разделы (Секции)
В Nginx разделы используются для определения конфигурации разных модулей. Например, секция http section содержит настройки ngx_http_core module, секция even section определяет настройки ngx_event module, а секция mail хранит настройки модуля ngx_mail module.
Список доступных разделов можно просмотреть по этой ссылке.
Директивы
Директивы в Nginx состоят из имени переменной и ряда аргументов. Например, директива worker_processes – имя переменной, а auto – значение:
worker_processes auto;
В конце каждой директивы обязательно нужно поставить точку с запятой ;
Наконец, файл конфигурации Nginx должен соответствовать определенному набору правил. Ниже приведен допустимый синтаксис конфигурации Nginx:
Директивы начинаются с имени переменной, а затем следуют один или несколько аргументов
Директивы заканчиваются точкой с запятой ;
Разделы определяются фигурными скобками {}
Раздел может быть внутри другого раздела
Конфигурация вне любого раздела является частью глобальной конфигурации Nginx.
Строки, начинающиеся со знака #, являются комментариями.
Настройка производительности Nginx
В этой части мы сконфигурируем Nginx для лучшей работы как во время интенсивного трафика, так и во время пиковой нагрузки. Будут рассмотрены следующие настройки:
Workers
Активность Ввода/вывода диска
Сетевой активности
Буферов
Сжатия
Кеширования
Времени ожидания
Итак, в терминале введите следующую команду, чтобы перейти в директорию nginx и показать ее содержимое:
cd nginx && ls
Найдите папку conf. В этой папке и находится файл nginx.conf. Мы используем этот файл для настройки Nginx.
Теперь, чтобы перейти в папку conf и открыть файл nginx.conf с помощью редактора vim, выполните следующие команды:
cd conf
sudo vim nginx.conf
Ниже на скриншоте показан как выглядит файл nginx.conf
Workers
Чтобы улучшить работу веб-сервера Nginx нужно настроить должным образом так называемые воркеры. Это своего рода потоки ядра, которые управляют параллельным выполнением процессов. Настройка воркеров дает возможность эффективней обрабатывать запросы клиентов.
Если все еще не закрыли vim, нажмите i чтобы перейти к режиму редактирования nginx.conf. Скопируйте и вставьте код указанный ниже в раздел events:
events {
worker_processes auto;
worker_connections 1024;
worker_rlimit_nofile 20960;
multi_accept on;
mutex_accept on;
mutex_accept_delay 500ms;
use epoll;
epoll_events 512;
}
worker_processes: Эта директива регулирует количество воркеров в Nginx. Значение этой директивы устанавливается на auto, чтобы разрешить Nginx определять количество доступных ядер, дисков, загрузки сервера и сетевой подсистемы. Однако можно определить количество ядер, выполнив команду lscpu на терминале.
worker_connections: Эта директива задает значение количества одновременных подключений, которые могут быть открыты воркером. Значение по умолчанию - 512, но здесь оно установлено 1024, что позволяет одному воркеру одновременно принимать соединение от клиента.
worker_rlimit_nofile: Эта директива как-то связана с worker_connections. Для обработки большого одновременного соединения устанавливается большое значение.
multi_accept: Эта директива позволяет воркеру принимать множество соединений в очереди одновременно. Очередь в этом контексте просто означает последовательность объектов данных, ожидающих обработки.
mutex_accept: Эта директива отключена по умолчанию. Но поскольку мы настроили много работников в Nginx, мы должны включить его, как показано в коде выше, чтобы позволить работникам принимать новые соединения один за другим.
mutex_accept_delay: Эта директива определяет время ожидания воркера перед принятием нового подключения. После включения accept_mutex воркеру назначается блокировка mutex на период, указанный в accept_mutex_delay. По истечении этого периода следующий воркер готов принять новые подключения.
use: Эта директива указывает метод обработки подключения от клиента. В этом руководстве мы решили установить значение epoll, потому что мы работаем на платформой Ubuntu. Метод epoll является наиболее эффективным методом обработки для платформ Linux.
epoll_events: Значение этой директивы указывает количество событий, которые Nginx передаст ядру.
Чтение/запись диска
В этом разделе мы настроим асинхронные операции ввода-вывода в Nginx для обеспечения эффективной передачи данных и повышения эффективности кэширования.
Дисковый ввод-вывод относится к операциям записи и чтения между жестким диском и ОЗУ. Мы будем использовать функцию sendfile() внутри ядра для отправки небольших файлов.
Для задания директив можно использовать http section, location section и server section.
location section и server section могут быть вложены в разделе http section, чтобы сделать конфигурацию более читабельной.
Скопируйте и вставьте следующий код в location section, расположенный в http section:
location /pdf/ {
sendfile on;
aio on;
}
location /audio/ {
directio 4m
directio_alignment 512
}
Sendfile: Чтобы использовать ресурсы операционной системы, установите для этой директивы значение on. Sendfile передает данные между дескрипторами файлов в пространстве ядра ОС, не отправляя их в буферы приложений. Эта директива будет использоваться для обслуживания небольших файлов.
Directio: Эта директива повышает эффективность кэширования, позволяя выполнять чтение и запись непосредственно в приложение. Directio - это функция файловой системы каждой современной операционной системы. Эта директива будет использоваться для обслуживания больших файлов, например видео.
Aio: Эта директива обеспечивает многопоточность для операций записи и чтения. Многопоточность - это модель выполнения, позволяющая выполнять несколько потоков отдельно друг от друга при совместном использовании ресурсов процесса хостинга.
directio_alignment: В этой директиве для переноса данных назначается значение размера блока. Она касалась директивы directio.
Сетевой уровень
В этом разделе мы используем такие директивы, как tcp_nodelay и tcp_nopush, чтобы небольших пакеты не ждали в очереди перед отправкой.
Обычно, когда пакеты передаются в "частях", они имеют тенденцию заполнять высоконагруженную сеть. Джон Нагл построил алгоритм буферизации для решения этой проблемы. Целью алгоритма буферизации Nagle является предотвращение заполнения высоконагруженной сети небольшими пакетами.
Скопируйте и вставьте следующий код в раздел HTTP:
http {
tcp_nopush on;
tcp_nodelay on;
}
tcp_nodelay: Эта директива по умолчанию отключена, чтобы позволить небольшим пакетам ждать указанный период времени, прежде чем они будут отправлены одновременно. Для немедленной отправки всех данных эта директива включена.
tcp_nopush: Поскольку tcp_nodelay директива включена, небольшие пакеты отправляются одновременно. Однако, если вы все еще хотите использовать алгоритм буферизации Джона Нагле, мы также можем включить
tcp_nopush, чтобы собрать пакеты в одну пачку и отправлять их все одновременно.
Буфер
Рассмотрим, как настроить буферы запросов в Nginx для эффективной обработки запросов. Буфер - это временное хранилище, где данные хранятся в течение некоторого времени и обрабатываются.
Можно скопировать код указанный ниже в раздел server.
server {
client_body_buffer_size 8k;
client_max_body_size 2m;
client_body_in_single_buffer on;
client_body_temp_pathtemp_files 1 2;
client_header_buffer_size 1m;
large_client_header_buffers 4 8k;
}
Важно четко понимать, функции указанных директив
client_body_buffer_size: Эта директива задает размер буфера для тела запроса. Если планируется запустить веб-сервер на 64-разрядных системах, необходимо установить значение 16k. Если требуется запустить веб-сервер в 32-разрядной системе, установите значение 8k.
client_max_body_size: Если вы собираетесь обрабатывать большие загрузки файлов, необходимо установить для этой директивы значение не менее 2m или более. По умолчанию установлено значение 1m.
client_body_in_file_only: Если вы отключили директиву, закомментировав ее client_body_buffer_size, а директива client_body_in_file_only включена, Nginx будет сохранять буферы запросов во временный файл. Это не рекомендуется для производственной среды.
client_body_in_single_buffer: Иногда не все тело запроса хранится в буфере. Остальная часть сохраняется или записывается во временный файл. Однако если предполагается сохранить или хранить все запросы в буфер запросов в одном буфере, необходимо включить эту директиву.
client_header_buffer_size: Эту директиву можно использовать чтобы дать заголовков запросов доступ к буферу. Это значение можно задать равным 1m.
large_client_header_buffers: Эта директива используется для задания максимального количества и размера для чтения заголовков больших запросов. Максимальное число и размер буфера можно точно установить в 4 и 8k.
Сжатие
Еще одним способом оптимизации работы веб-сервера является сжатие объема данных, передаваемых по сети, является. В этом разделе мы используем директивы, такие как gzip, gzip_comp_level, и gzip_min_length, чтобы сжать данные.
Вставьте следующий код в раздел http, как показано ниже:
http {
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_types text/xml text/css;
gzip_http_version 1.1;
gzip_vary on;
gzip_disable "MSIE [4-6] .";
}
gzip: Если требуется включить сжатие ответа, установите значение этой директивы в on. По умолчанию он отключен.
gzip_comp_level: Эту директиву можно использовать для установки степени сжатия ответа. Чтобы не тратить ресурсы ЦП, не нужно устанавливать слишком высокий уровень сжатия. По шкале от 1 до 9 лучше установить уровень сжатия 2 или 3.
gzip_min_length: Устанавливает минимальную длину ответа, который будет сжиматься методом gzip. Длина определяется только из поля content-length заголовка ответа. Можно установить значение более 20 байт.
gzip_types: Эта директива разрешает сжатие ответа методом gzip для указанных MIME-типов. По умолчанию, тип text/html всегда сжимается. Можно добавить другой тип, например, text/css, как показано в коде выше
gzip_http_version: Эта директива позволяет выбрать минимальную HTTP-версию запроса, необходимую для сжатия ответа. Можно использовать значение по умолчанию 1.1.
gzip_vary: Разрешает или запрещает выдавать в ответе поле заголовка Vary: Accept Encoding, если директива gzip включена.
gzip_disable: Некоторые браузеры, такие как Internet Explorer 6, не поддерживают сжатие gzip. Эта директива использует поле User-Agent заголовка для отключения сжатия методом gzip для определенных браузеров.
Кеширование
Используйте функции кэширования, чтобы сократить количество обращений для многократной загрузки одних и тех же данных. Nginx предоставляет функции кэширования метаданных статического содержимого через директиву open_file_cache.
Эту директиву можно поместить в разделы server, location и http:
http {
open_file_cache max=1,000 inactive=30s;
open_file_cache_valid 30s;
open_file_cache_min_uses 4;
open_file_cache_errors on;
}
open_file_cache: Эта директива по умолчанию отключена. Включите его, если требуется внедрить кэширование в Nginx. В нем могут храниться дескрипторы открытых файлов, информация об их размерах и времени модификации, информация о существовании каталогов, информация об ошибках поиска файла — “нет файла”, “нет прав на чтение”
open_file_cache_valid: Эта директива определяет время, через которое следует проверять актуальность информации об элементе в open_file_cache.
open_file_cache_min_uses: Задаёт минимальное число обращений к файлу в течение времени, заданного параметром inactive директивы open_file_cache, необходимых для того, чтобы дескриптор файла оставался открытым в кэше.
open_file_cache_errors: Эту директиву можно использовать, чтобы разрешить Nginx кэшировать ошибки, такие как “нет файла”, “нет прав на чтение” при доступе к файлам. Таким образом, каждый раз, когда к ресурсу обращается пользователь, не имеющий на это права, Nginx отображает тот же самый отчет об ошибке «в доступе отказано»
Время ожидания
Настройте время ожидания, используя директивы, такие как keepalive_timeout и keepalive_requests, чтобы предотвратить растрачивание ресурсов при длительном ожидании подключений.
В разделе HTTP скопируйте и вставьте следующий код:
http {
keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;
}
keepalive_timeout: Сохраняйте связь в течение 30 секунд. Значение по умолчанию - 75 секунд.
keepalive_requests: Настройка количества запросов для поддержания активности в течение определенного времени. Количество запросов можно задать равным 20 или 30.
keepalive_disable: если вы хотите отключить поддержку keepalive для определенной группы браузеров, используйте эту директиву.
send_timeout: Установка времени ожадания для передачи данных клиенту.
Настройки безопасности Nginx
В этой части рассматриваются только способы настройки безопасности самого Nginx, а не веб-приложения. Мы не будем разбирать такие методы веб-атаки, как инъекция SQL и так далее.
Здесь мы рассмотрим настройки следующих параметров:
Ограничение доступа к файлам и каталогам
Настройка журналов для мониторинга подозрительных действий
Защиту от DDoS атак
Отключение вывода списка файлов и директорий
Ограничение доступа к файлам и каталогам
Давайте рассмотрим как можно ограничить доступ к важным и чувствительным файлам системы с помощью следующих методов.
Использование HTTP Аутентификации
С ее помощью мы можем ограничить доступ к конфиденциальным файлам или разделам системы, не предназначенных для публичного доступа, запросив аутентификацию у пользователей или даже администраторов. Выполните следующую команду, чтобы установить утилиту создания файлов паролей, если она не установлена.
apt-get install -y apache-utils
Далее создайте файл паролей и пользователя с помощью утилиты htpasswd. htpasswd входит в набор утилит apache2-utils.
sudo htpasswd -c /etc/apache2/ .htpasswd mike
Проверить результат работы можно командой:
cat etc/apache2/ .htpasswd
Скопируйте и вставьте следующий код в разделе location:
location /admin {
basic_auth "Admin Area";
auth_basic_user_file /etc/apache2/ .htpasswd;
}
Используя директиву Allow
В дополнение к директиве basic_auth мы можем использовать директиву allow для ограничения доступа к указанным каталогам.
Чтобы разрешить доступ как конкретным каталогам только с указанных адресов вставьте нижеследующий код в раздел location:
location /admin {
allow 192.168.34.12;
allow 192.168.12.34;
}
Настройка журналирования подозрительных действий
В этом разделе настроим error и access логи, чтобы вести мониторинг запросов. Их можно использовать для определения кто заходил систему в указанный период времени или какой пользователь открывал конкретный файл и т.д.
error_log: Позволяет настроить запись событий в определенный файл, например syslog или stderr. Можно также указать уровень журналирования, которые требуется записывать.
access_log: Позволяет регистрировать запросы пользователей в файле access.log
Для этого в разделе http введите следующие изменения:
http {
access_log logs/access.log combined;
error_log logs/warn.log warn;
}
Предотвращение DDoS атак
DDoS атаки один из самых легкореализуемых и потому часто применяемых видов атак. Защитить свой веб-сервер от атак такого вида можно поменяв следующие настройки.
Ограничение запросов пользователей
Для ограничения числа запросов от пользователей можно использовать директивы limit_req_zone и limit_req. Следующий код нужно добавить в раздел location, который вложен в раздел server
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server {
location /admin.html {
limit_req zone=one;
}
}
Ограничение на число подключений
Директивы limit_conn и limit_conn_zone можно использовать для ограничения числа подключение к конкретным зонам. Например, код указанный ниже ограничивает число подключений десятью.
Код должен располагаться в разделе location раздела server
server {
location /products/ {
limit_conn addr 10;
}
}
Разрыв медленных соединений
Директива как client_body_timeout задаёт таймаут при чтении тела запроса клиента. Таймаут устанавливается не на всю передачу тела запроса, а только между двумя последовательными операциями чтения. Если по истечении этого времени клиент ничего не передаст, обработка запроса прекращается с ошибкой 408 (Request Time-out). А client_header_timeout задаёт таймаут при чтении заголовка запроса клиента. Если по истечении этого времени клиент не передаст полностью заголовок, обработка запроса прекращается с ошибкой 408 (Request Time-out).
Добавьте следующее в раздел server.
server {
client_body_timeout 5s;
client_header_timeout 5s;
}
Отключение вывода списка директорий
Чтобы отключить вывод директорий на странице можно использовать директиву auto_index. Она располагается в разделе location, а значение должно быть установлено в off.
location / {
auto_index off;
}
Заключение
Итак, в этом руководстве показали, как можно настроить веб-сервер Nginx для более безопасной и оптимальной работы. На этом, конечно, работа не заканчивается. Если на Nginx крутится какое-то приложение с доступом в Интернет, то можно прибегнуть к облачным решениям защиты и оптимизации.
В данной статье будет произведен обзор функционала факса в Elastix 4 и произведена его настройка.
Обзор
Данный функционал находится в общем меню слева, и называется, как я уже упоминал выше – Fax:
Для первичной настройки необходимо пройти по следующему пути Fax → Virtual Fax → New Virtual Fax. Начнем с создания виртуального факса.
Настройка Fax Virtual Server
Как видно на скриншоте ниже, необходимо заполнить несколько полей – название, адрес электронной почты и так далее (подробнее – ниже)
Virtual Fax Name - Имя виртуального факса
Associated Email - Электронная почта для данного факса
Caller ID Name - Имя факса при звонке
Caller ID Number - Номер факса
Fax Extension (IAX) - экстеншен факса
Secret (IAX) - пароль для экстеншена факса
Country Code - код страны
Area Code - код зоны, в данном случае используется московский код
После нажимаем на Save и должен появится список факсов следующего вида:
Далее необходимо создать экстеншен IAX2. Для этого нужно пройти по следующему пути:
PBX Configuration → Extension → Add Extension → Choose IAX Extension
И настроить следующие поля:
User Extension - номер экстеншена, такой же, как и в п.1
Display Name - название экстеншена – например, Fax
SIP Alias - такой же как и User Extension
Add inbound ID - номер, указанный в настройках виртуального факса
secret - пароль, указанный в настройках виртуального факса
Для завершения настройки необходимо кликнуть кнопку Submit. После этого необходимо снова зайти в созданный экстеншен и в разделе Device Options поставить значение поля requirecalltoken равным No - в противном случае, данный экстеншен не будет зарегистрирован как сервис факса.
Проверка работоспособности и заключение
Теперь можно зайти в Operator Panel и увидеть зарегистрированный свежесозданный экстеншен.
Теперь по пути Fax → Virtual Fax → Send Fax появится возможность отправить факс. Также можно ввести команду faxstat –v для проверки – вы должны увидеть следующий вывод команды:
