Назад | Перейти на главную страницу

запуск приложения node.js с nginx

У меня есть приложение узла, работающее на порту 8443. Мой nginx обрабатывает веб-запросы на портах 80 и 443 и должен перенаправлять пользователя на 8443.

вот мой /etc/nginx/sites-enabled/default config:

upstream my_upstream {
   server 127.0.0.1:8443;
   keepalive 64;
}

server {
    listen 80;
    server_name myapp.com;
    rewrite ^/(.*) https://myapp.com/$1 permanent;
}

server {
    listen 443 ssl;
    server_name 12.34.12.34 www.myapp.com myapp.com *.myapp.com;
    ssl_certificate /path/to/my/cert.crt;
    ssl_certificate_key /path/to/my/private.key
    // other ssl params

    location / {
        proxy_redirect off;
        proxy_pass https://my_upstream;
        // other params 
    }
}

с этой конфигурацией я могу получить доступ к своему приложению через

http(s)://myapp.com:8443

только когда я добавляю следующие iptables

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A OUTPUT -p tcp --dport 443 -o lo -j REDIRECT --to-port 8443

Я могу получить доступ

http(s)://myapp.com

Вопросы:

Мне кажется глупым перенаправление с порта 80 на 443 на 8443 с помощью iptables. Есть ли способ сделать это только с помощью nginx (или это способ сделать?).

Является ли такой подход (установка приложения на нестандартный порт, например 8443) вообще хорошей идеей?

Легко. Поскольку ваш node.js работает на порту 8443, и, насколько я понял, у вас нет другой службы, прослушивающей запросы в других портах, вы можете просто сделать это в своей конфигурации nginx:

server {
    # here comes the rest of your nginx configuration
    location / {
        proxy_pass http://127.0.0.1:8443;
    }
}

Вам не нужно использовать какие-либо правила iptables или создавать раздел восходящего потока в конфигурации nginx. nginx может (и должен) выполнять все перенаправления портов из коробки (как обычно это делает любой обратный прокси).

Я мог ошибаться, но причина, по которой ваше приложение начинает работать после правил iptables, заключается в том, что ваши клиенты начинают напрямую обращаться к вашему серверу node.js из-за перенаправления порта, что похоже на то, когда мы используем Squid в качестве прозрачного прокси.

Эта статья может вам помочь. Не обращайте внимания на то, что он был адресован Apache:

Удачи и всего наилучшего!

Немного бессмысленно и расточительно делать шифрование на 127.0.0.1 между nginx и вашим апстримом, когда ваш апстрим работает на 127.0.0.1.

Во всяком случае, ваше решение с iptables перенаправление было бы намного более эффективным, чем просто включение nginx в микс без каких-либо изменений в восходящем потоке.

Но мы должны спросить - если вы не используете какие-либо дополнительные интересные функции nginx, почему вы вообще хотите добавить их в микс?

Правильный подход - запустить апстрим без httpsи перенаправить как http, так и https в восходящий поток с помощью nginx. Причина, по которой ваша текущая конфигурация не работает, вероятно, связана с некоторой ошибкой конфигурации, которая не очевидна из вставленных вами фрагментов.