Вы не сможете использовать nginx для прослушивания порта 3000, а также процесс вашего узла, поскольку только один сервис может действительно прослушивать порт одновременно.Поэтому вам нужно убедиться, что nginx прослушивает соединения через другой порт.Я представляю, что вы пытаетесь сделать, это прослушать порт 80/443 и затем отправить запрос на ваш экспресс-сервис, который прослушивает порт 3000?
В этом случае ваш нижний блок сервера почти верен.Чтобы это работало без TLS / SSL (только на порту 80), вам нужно использовать что-то вроде этого:
server {
listen 80;
server_name node.mysite.co
location / {
proxy_pass http://localhost:3000;
}
}
Ниже приведен очень простой пример, и вы, вероятно, захотите переключить некоторые другиенастройки.Это заставит "http://node.mysite.co" пройти через прокси-сервер к любой службе (в данном случае сервер Express) локально прослушивает порт 3000.
Вам не нужно создавать брандмауэр (ufw) исключение для порта 3000 в данном случае, так как это локальный прокси-сервер. Вы должны закрыть порт на брандмауэре, чтобы люди не могли получить к нему прямой доступ, поэтому должен пройти через nginx.
Если вы хотите, чтобы SSL / TLS работал, вам понадобится еще один блок, который будет выглядеть примерно так: Опять же, это очень простой и не имеет много настроек, которые вы, вероятно, хотите исследоватьи установите (например, выбор шифров).
server {
listen 443 ssl;
server_name node.mysite.co
ssl_certificate certs/mysite/server.crt;
ssl_certificate_key certs/mysite/server.key;
location / {
proxy_pass http://localhost:3000;
}
}
Вам потребуется заменить путь к сертификату и ключу, чтобы указать его соответственно на сертификат и ключ SSL / TLS. Это позволит вам получить доступ к https://node.mysite.co и он также будет перенаправлен на службу через порт 3000.
Как только вы это сделаете, вы можете затем вернуться и изменить сервер http (порт 80) на перенаправление наhttps, чтобы заставить httpsтолько соединения.
Также обратите внимание, что я убедился, что имя_сервера отличается от вашего существующего django имя_сервера с поддоменом (node.mysite.co).Возможно, вы захотите изменить это значение, но вы не можете иметь два серверных блока, прослушивающих один и тот же порт и имя_сервера, иначе nginx не будет знать, что делать с запросом.Я уверен, что вы делаете это в любом случае, но я хотел убедиться, что это было явно и будет работать с вашей существующей установкой.
Если вы хотите, чтобы сайт обслуживался только для mysite.co:3000
Если по какой-то причине вы хотите, чтобы пользователь пошел на порт 3000 в домене mysite.co, то вам нужно будет установить «listen» на 3000 и оставить имя сервера как «mysite»..co».Это позволит кому-то зайти на mysite.co:3000 в своем браузере и запустить службу вашего узла.Я полагаю, что это не совсем то, что вам нужно для общедоступного веб-сайта, но оно также не очень хорошо согласуется с версией вашего порта 443.
Примечание: я не претендую на то, чтоэксперт по nginx, но я использовал его для всех своих проектов узлов за последние несколько лет, и я нахожу, что эта настройка довольно понятна.Там может быть более приятный синтаксис, который вы можете использовать.