Поиск по сайту:

Как установить 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 или у вас есть какие-либо вопросы или комментарии, воспользуйтесь формой обратной связи ниже, чтобы связаться с нами.