Как установить Nginx с виртуальными хостами и SSL-сертификатом
Nginx (сокращение от Engine-x) — это бесплатный, мощный, высокопроизводительный и масштабируемый HTTP- и обратный прокси-сервер с открытым исходным кодом, почтовый и стандартный TCP/UDP-прокси. сервер. Он прост в использовании и настройке, имеет простой язык настройки. Nginx в настоящее время является предпочтительным программным обеспечением веб-сервера для работы высоконагруженных сайтов благодаря его масштабируемости и производительности.
В этой статье мы обсудим, как использовать Nginx в качестве HTTP-сервера, настроить его для обслуживания веб-контента, настроить виртуальные хосты на основе имен, а также создать и установить SSL для безопасной передачи данных, включая самозаверяющий сертификат в Ubuntu и CentOS. .
Как установить веб-сервер Nginx
Сначала начните с установки пакета Nginx из официальных репозиториев с помощью менеджера пакетов, как показано.
------------ On Ubuntu ------------
sudo apt update
sudo apt install nginx
------------ On CentOS ------------
sudo yum update
sudo yum install epel-release
sudo yum install nginx
После установки пакета Nginx вам необходимо запустить службу, включить ее автоматический запуск во время загрузки и просмотреть ее статус, используя следующие команды. Обратите внимание, что в Ubuntu он должен запускаться и включаться автоматически, пока пакет предварительно настроен.
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
На этом этапе веб-сервер Nginx должен быть запущен и работать, вы можете проверить его состояние с помощью команды netstat.
sudo netstat -tlpn | grep nginx
Если в вашей системе включен брандмауэр, вам необходимо открыть порты 80 и 443, чтобы разрешить трафик HTTP и HTTPS. соответственно, через него, пробежав.
------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
------------ On Ubuntu ------------
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
Идеальный способ протестировать установку Nginx и проверить, работает ли он и способен ли обслуживать веб-страницы, — это открыть веб-браузер и указать IP-адрес сервера.
http://Your-IP-Address
OR
http://Your-Domain.com
Работающая установка должна отображаться на следующем экране.
Как настроить веб-сервер Nginx
Файлы конфигурации Nginx расположены в каталоге /etc/nginx
, а файл глобальной конфигурации — в /etc/nginx/nginx.conf
как в CentOS, так и в Ubuntu.
Nginx состоит из модулей, которые управляются различными параметрами конфигурации, известными как директивы. Директива может быть простой (имя формы и значения завершаются ;
) или блочной (содержит дополнительные инструкции, заключенные с помощью ) {}
). А директива блока, содержащая другие директивы, называется контекстом.
Все директивы подробно объяснены в документации Nginx на сайте проекта. Вы можете обратиться к нему для получения дополнительной информации.
Как обслуживать статический контент с помощью Nginx в автономном режиме
На базовом уровне Nginx можно использовать для обслуживания статического контента, такого как HTML и медиа-файлы, в автономном режиме, где используется только блок сервера по умолчанию (аналогично Apache, где виртуальные хосты не настроены).
Мы начнем с краткого объяснения структуры конфигурации в основном файле конфигурации.
sudo vim /etc/nginx/nginx.conf
Если вы посмотрите на этот файл конфигурации Nginx, структура конфигурации должна выглядеть следующим образом: она называется основным контекстом и содержит множество других простых и блочных директив. Весь веб-трафик обрабатывается в контексте http.
user nginx;
worker_processes 1;
.....
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
.....
events {
.....
}
http {
server{
…….
}
.....
}
Ниже приведен пример файла основной конфигурации Nginx (/etc/nginx/nginx.conf), где приведенный выше блок http содержит директиву include, которая сообщает Nginx, где найти файлы конфигурации веб-сайта (конфигурации виртуального хоста). .
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Обратите внимание, что в Ubuntu вы также найдете дополнительную директиву включения (include /etc/nginx/sites-enabled/*;), где каталог /etc /nginx/sites-enabled/ хранит символические ссылки на файлы конфигурации веб-сайтов, созданные в /etc/nginx/sites-available/, для включения сайтов. А удаление символической ссылки отключает этот конкретный сайт.
В зависимости от источника установки вы найдете файл конфигурации веб-сайта по умолчанию в /etc/nginx/conf.d/default.conf (если вы установили из официального репозитория NGINX). и EPEL) или /etc/nginx/sites-enabled/default (если вы установили из репозиториев Ubuntu).
Это наш образец блока сервера nginx по умолчанию, расположенный в /etc/nginx/conf.d/default.conf в тестовой системе.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html/;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Краткое объяснение директив в приведенной выше конфигурации:
- listen: указывает порт, который прослушивает сервер.
- server_name: определяет имя сервера, которое может быть точным именем, именем с подстановочными знаками или регулярными выражениями.
- root: указывает каталог, из которого Nginx будет обслуживать веб-страницы и другие документы.
- index: указывает тип(ы) индексных файлов, которые будут обслуживаться.
- местоположение: используется для обработки запросов к определенным файлам и папкам.
Когда вы указываете на сервер из веб-браузера, используя имя хоста localhost или его IP-адрес, он обрабатывает запрос и передает файл /var/www/html/index.html . и немедленно сохраняет событие в свой журнал доступа (/var/log/nginx/access.log) с ответом 200 (ОК). В случае ошибки (событие сбоя) оно записывает сообщение в журнал ошибок (/var/log/nginx/error.log).
Чтобы узнать больше о входе в Nginx, вы можете обратиться к статье «Как настроить пользовательский доступ или форматы журналов ошибок в Nginx».
Вместо использования файлов журналов по умолчанию вы можете определить собственные файлы журналов для разных веб-сайтов, как мы рассмотрим позже, в разделе «Настройка виртуальных хостов на основе имен (серверных блоков)».
Как ограничить доступ к веб-странице с помощью Nginx
Чтобы ограничить доступ к вашему веб-сайту/приложению или некоторым его частям, вы можете настроить базовую HTTP-аутентификацию. Это можно использовать по существу для ограничения доступа ко всему HTTP-серверу, отдельным блокам сервера или блокам местоположения.
Начните с создания файла, в котором будут храниться ваши учетные данные доступа (имя пользователя/пароль), с помощью утилиты htpasswd.
yum install httpd-tools #RHEL/CentOS
sudo apt install apache2-utils #Debian/Ubuntu
В качестве примера добавим в этот список пользователя admin (можно добавить как можно больше пользователей), где опция -c
используется для указания файла паролей, а опция -B
, чтобы зашифровать пароль. Как только вы нажмете [Enter], вам будет предложено ввести пароль пользователя:
sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin
Затем давайте назначим соответствующие разрешения и права собственности на файл паролей (замените пользователя и группу nginx на www-data в Ubuntu).
sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd
Как мы упоминали ранее, вы можете ограничить доступ к вашему веб-серверу, отдельному веб-сайту (используя его блок сервера) или определенному каталогу или файлу. Для этого можно использовать две полезные директивы:
- auth_basic – включает проверку имени пользователя и пароля с использованием протокола «HTTP Basic Authentication».
- auth_basic_user_file – указывает файл учетных данных.
В качестве примера мы покажем, как защитить паролем каталог /var/www/html/protected.
server {
listen 80 default_server;
server_name localhost;
root /var/www/html/;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location /protected/ {
auth_basic "Restricted Access!";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
}
Теперь сохраните изменения и перезапустите службу Nginx.
sudo systemctl restart nginx
В следующий раз, когда вы укажете в браузере указанный выше каталог (http://localhost/protected), вам будет предложено ввести свои учетные данные для входа (имя пользователя admin и выбранный пароль). ).
Успешный вход в систему позволит вам получить доступ к содержимому каталога, в противном случае вы получите ошибку «401 Требуется авторизация».
Как настроить виртуальные хосты на основе имен (серверные блоки) в Nginx
Контекст сервера позволяет хранить и обслуживать несколько доменов/сайтов на одной физической машине или виртуальном частном сервере (VPS). Несколько блоков серверов (представляющих виртуальные хосты) могут быть объявлены в контексте http для каждого сайта/домена. Nginx решает, какой сервер обрабатывает запрос, на основе полученного заголовка запроса.
Мы продемонстрируем эту концепцию, используя следующие фиктивные домены, каждый из которых расположен в указанном каталоге:
- Wearecmint.com – /var/www/html/wearelinux-console.net/
- welovelinux.com – /var/www/html/welovelinux.com/
Затем назначьте соответствующие разрешения для каталога для каждого сайта.
sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html
Теперь создайте образец файла index.html внутри каждого каталога public_html.
<html>
<head>
<title>www.wearelinux-console.net</title>
</head>
<body>
<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>
Затем создайте файлы конфигурации блока сервера для каждого сайта в каталоге /etc/httpd/conf.d.
sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf
Добавьте следующее объявление блока сервера в файл wearelinux-console.net.conf.
server {
listen 80;
server_name wearelinux-console.net;
root /var/www/html/wearelinux-console.net/public_html ;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Затем добавьте следующее объявление блока сервера в файл welovelinux.com.conf.
server {
listen 80;
server_name welovelinux.com;
root /var/www/html/welovelinux.com/public_html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Чтобы применить последние изменения, перезапустите веб-сервер Nginx.
sudo systemctl restart nginx
и направив свой веб-сервер на указанные выше адреса, вы увидите главные страницы фиктивных доменов.
http://wearelinux-console.net
http://welovelinux.com
Важно! Если у вас включен SELinux, его конфигурация по умолчанию не позволяет Nginx получать доступ к файлам за пределами общеизвестных авторизованных мест (например, /etc/nginx для конфигураций, /var/log/nginx для журналов, /var/www/html для веб-файлов и т. д.) .
Вы можете справиться с этим, отключив SELinux или установив правильный контекст безопасности. Для получения дополнительной информации обратитесь к этому руководству: использование Nginx и Nginx Plus с SELinux на веб-сайте Nginx Plus.
Как установить и настроить SSL с помощью Nginx
Сертификаты SSL помогают включить безопасный http (HTTPS) на вашем сайте, что важно для установления доверенного/защищенного соединения между конечными пользователями и вашим сервером путем шифрования информации, которая передается на ваш сайт, с него или внутри него.
Мы расскажем, как создать и установить самозаверяющий сертификат, а также сгенерировать запрос на подпись сертификата (CSR) для получения сертификата SSL от центра сертификации (CA). для использования с Nginx.
Самозаверяющие сертификаты можно создавать бесплатно, и их практически можно использовать в целях тестирования и для внутренних служб локальной сети. Для общедоступных серверов настоятельно рекомендуется использовать сертификат, выданный центром сертификации (например, Let’s Encrypt), для подтверждения его подлинности.
Чтобы создать самозаверяющий сертификат, сначала создайте каталог, в котором будут храниться ваши сертификаты.
sudo mkdir /etc/nginx/ssl-certs/
Затем сгенерируйте самозаверяющий сертификат и ключ с помощью инструмента командной строки openssl.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt
Кратко опишем параметры, используемые в приведенной выше команде:
- req -X509 — показывает, что мы создаем сертификат x509.
- -nodes (NO DES) — означает «не шифровать ключ».
- -days 365 – указывает количество дней, в течение которых сертификат будет действителен.
- -newkey rsa:2048 — указывает, что ключ, сгенерированный с использованием алгоритма RSA, должен быть 2048-битным.
- -keyout /etc/nginx/ssl-certs/nginx.key — указывает полный путь к ключу RSA.
- -out /etc/nginx/ssl-certs/nginx.crt — указывает полный путь к сертификату.
Затем откройте файл конфигурации виртуального хоста и добавьте следующие строки в объявление блока сервера, прослушивающего порт 443. Мы протестируем файл виртуального хоста /etc/nginx/conf.d/wearelinux-console.net.conf.
sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
Затем добавьте директиву ssl в файл конфигурации nginx, он должен выглядеть примерно так, как показано ниже.
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
server_name wearelinux-console.net;
root /var/www/html/wearelinux-console.net/public_html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Теперь перезапустите Nginx и укажите в браузере следующий адрес.
https://www.wearelinux-console.net
Если вы хотите приобрести сертификат SSL у центра сертификации, вам необходимо сгенерировать запрос на подпись сертификата (CSR), как показано.
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr
Вы также можете создать CSR на основе существующего закрытого ключа.
sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr
Затем вам необходимо отправить сгенерированный CSR в CA, чтобы запросить выдачу SSL-сертификата, подписанного CA. Получив сертификат от центра сертификации, вы можете настроить его, как показано выше.
Читайте также: полное руководство по защите, усилению защиты и повышению производительности веб-сервера Nginx
Краткое содержание
В этой статье мы объяснили, как установить и настроить Nginx; описано, как настроить виртуальный хостинг на основе имени с использованием SSL для защиты передачи данных между веб-сервером и клиентом.
Если у вас возникли какие-либо затруднения в процессе установки/настройки nginx или у вас есть какие-либо вопросы или комментарии, воспользуйтесь формой обратной связи ниже, чтобы связаться с нами.