Статьи

Настройка Nginx и SSL с Node.js

Nginx — это высокопроизводительный HTTP-сервер, а также обратный прокси-сервер. В отличие от традиционных серверов, Nginx использует асинхронную архитектуру, управляемую событиями. В результате объем памяти невелик, а производительность высока. Если вы используете веб-приложение на базе Node.js, вам следует серьезно рассмотреть возможность использования Nginx в качестве обратного прокси-сервера. Nginx может быть очень эффективным в обслуживании статических ресурсов. Для всех других запросов он будет обращаться к вашему бэкэнду Node.js и отправлять ответ клиенту. В этом уроке мы обсудим, как настроить Nginx для работы с Node.js. Мы также увидим, как настроить SSL на сервере Nginx.

Установка Nginx

Если на вашем компьютере уже установлен Node.js, давайте посмотрим, как установить Nginx.

Установка на Mac

Если вы работаете на Mac, вы можете использовать Homebrew для простой установки Nginx. Шаги следующие:

  • Для homebrew необходим каталог /usr/local который нужно chown для вашего имени пользователя. Итак, сначала запустите следующую команду в терминале:
 sudo chown -R 'username here' /usr/local 
  • Теперь следующие две команды установят Nginx в вашей системе.
 brew link pcre brew install nginx 
  • После завершения установки вы можете ввести следующую команду для запуска Nginx:
 sudo nginx 
  • Файл конфигурации Nginx можно найти здесь: /usr/local/etc/nginx/nginx.conf .

Установка на Ubuntu

Если вы используете Ubuntu, вы можете использовать следующую команду для установки Nginx:

 sudo apt-get update sudo apt-get install nginx 

После установки Nginx он запустится автоматически.

Установка на Windows

Для Windows зайдите на страницу загрузок Nginx и получите zip. Следующим шагом является разархивирование архива и перемещение в каталог в командной строке следующим образом:

 unzip nginx-1.3.13.zip cd nginx-1.3.13 start nginx 

Как видите, команда start nginx запустит Nginx.

Теперь, когда установка завершена, давайте посмотрим, как вы можете настроить простой сервер.

Настройка сервера Node.js

Сначала давайте создадим простой сервер Node.js. Если вы хотите, вы можете скачать простое приложение на основе Express здесь . Получив код, распакуйте его и перейдите в каталог demoApp на вашем терминале. Затем введите следующие команды, чтобы запустить сервер на порту 3000.

 npm install node bin/www [code] <h2 id="configuring-nginx">Configuring Nginx</h2> <p>Now let's open up Nginx config file. As I am on Mac, I can just use nano to start editing the file:</p> [code] nano /usr/local/etc/nginx/nginx.conf 

Если вы хотите, вы можете перейти непосредственно в каталог и открыть файл конфигурации в вашем любимом текстовом редакторе. При прокрутке вниз вы найдете блок server . Это выглядит примерно так:

 server { listen 8080; server_name localhost; .... more config goes here } 

Далее мы настроим блок сервера в соответствии с нашими потребностями. Мы хотим обслуживать статические файлы с нашего веб-сайта с помощью Nginx и передавать все остальные запросы в наш сервер Node.js. Итак, замените указанный выше блок server новым блоком, как показано ниже:

 server { listen 8080; server_name localhost; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location /public { root /usr/local/var/www; } } 

Как вы можете видеть, наш сервер Nginx прослушивает http://localhost:8080 . location / блок сообщает Nginx, что делать при поступлении любого запроса. Внутри блока location мы используем proxy_pass чтобы указать на proxy_pass Node.js, которая в нашем случае является http://localhost:3000 .

Теперь нам нужен еще один блок location /public чтобы сообщить Nginx, как обслуживать статические ресурсы. Внутри этого блока location мы устанавливаем корень в /usr/local/var/www . Вы можете выбрать другой каталог, если хотите. В результате всякий раз, когда есть запрос, такой как http://localhost:8080/public/somepath/file.html Nginx будет обслуживать файл из /usr/local/var/www/public/somepath/file.html .

На этом этапе вы должны сохранить файл и набрать следующее, чтобы перезапустить Nginx:

Mac:

 sudo nginx -s stop && sudo nginx 

Ubuntu:

 sudo service nginx restart 

Или

 sudo /etc/init.d/nginx restart 

Окна:

 nginx -s reload 

Далее, давайте подадим нашу таблицу стилей из Nginx вместо Node.js. Наш шаблон Node.js использует таблицу стилей с URL /public/stylesheets/style.css . Создайте файл с именем style.css в каталоге /usr/local/var/www/public/stylesheets и Nginx будет правильно его обслуживать. Например, вы можете поместить следующий CSS в style.css :

 body { padding: 50px; font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; } a { color: #00B7FF; } 

После этого вы можете перейти на http://localhost:8080 чтобы увидеть наше приложение в действии. Несмотря на то, что вы обращаетесь к серверу Nginx, вы получите фактический ответ от серверной части Node.js, тогда как Nginx будет обслуживать только таблицу стилей.

Настройка SSL

На производственном веб-сайте вам много раз потребуется настроить SSL для защиты конфиденциальной информации. Обычно вы идете в CA (центр сертификации) и получаете сертификат. Вы также можете создать самозаверяющий сертификат. Единственная проблема заключается в том, что браузеры будут отображать предупреждение о том, что «Сертификат не является доверенным», когда кто-то посещает ваш сайт. Но для тестирования на вашей локальной машине это прекрасно. Вот хороший учебник, который показывает, как самостоятельно подписать ваш сертификат SSL.

Получив сертификат и закрытый ключ, вы можете настроить SSL в Nginx. Вам необходимо изменить наш предыдущий блок сервера следующим образом:

 server { listen 8080; listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/server.crt ssl_certificate_key /etc/nginx/ssl/server.key location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location /public { root /usr/local/var/www; } } 

Это оно! Теперь, если вы получите доступ к https://localhost:8080 ваш SSL будет работать. Здесь мы предполагаем, что файл сертификата и закрытый ключ находятся в /etc/nginx/ssl/server.crt и /etc/nginx/ssl/server.key соответственно. Вы можете изменить эти места, если хотите.

Вывод

В этой статье мы увидели, как использовать Nginx в качестве обратного прокси-сервера для нашего приложения Node.js и настраивать SSL. Позволяя Nginx работать спереди и обрабатывать статические ресурсы, вы определенно можете снять нагрузку с вашего внутреннего узла. Попробуйте и дайте нам знать ваши вопросы / предложения через комментарии.