У меня есть личный домен на VPS. Я хотел бы настроить nginx в качестве обратного прокси для приложения node.js, но он не работает. Может ли кто-нибудь взглянуть на мою конфигурацию и сказать, что я делаю не так?
Предположим, мое доменное имя - example.com. По сути, я хотел бы сделать так, чтобы, когда я перехожу на node.example.com, он проксировался в приложение node.js. У меня также есть настройки blog.example.com и www.example.com в nginx.
Вот моя конфигурация nginx для обратного прокси (настройка blog.example.com, www.example.com опущена):
server { listen 80; server_name node.example.com; access_log /srv/www/example.com/logs/node-access.log; error_log /srv/www/example.com/logs/node-error.log; location / { proxy_pass http://example.com:3000/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k; } }
А вот и мое приложение node.js:
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(3000, "example.com");
Я перезапустил сервер nginx и запустил приложение node.js. Но если я перейду на node.example.com, он скажет: «node.example.com не существует или недоступен».
Я не уверен, что не так с моей конфигурацией. Я тоже пробовал разные комбинации.
Вот конфигурации, которые я пробовал:
proxy_pass in nginx | hostname in node.js app http:// localhost:3000/ | ---.listen(3000, "localhost") http:// 127.0.0.1:3000/ | ---.listen(3000, "127.0.0.1") http:// node.example.com:3000/ | ---.listen(3000, "node.example.com")
Я также пробовал следующую конфигурацию nginx:
upstream nodeapp { server 127.0.0.1:3000; } server { ... location / { proxy_pass http:// nodeapp; ... } ... }
И это тоже не работает. Что я делаю неправильно? Я искал в Интернете несколько часов и пробовал различные подходы, но все они, похоже, не работают.
Я был бы очень признателен, если бы кто-нибудь мог мне помочь.
Спасибо!
.listen
- это то, что испортилось. Там вам нужно указать, какой интерфейс слушать (имя хоста). Я рекомендую вам не передавать этот параметр. Просто.listen(3000)
, и по умолчанию вторым параметром будет0.0.0.0
, это тоже подойдет. - person Robert   schedule 05.06.2017