Как настроить сервер nginx для пересылки запроса на сервер узла с пустым путем?

у меня есть сервер Nginx со следующей конфигурацией:

server
{
    listen 80;
    server_name example.ca www.example.ca;
    location / {

proxy_pass http://127.0.0.1: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;
}
}

а на сервере узла я прослушиваю порт 3000, используя node express следующим образом:

app.get('*', function (req, res) {
  console.log(' request received ', req.headers.host);
});

и у меня есть домен www.example.com, который указывает на IP-адрес сервера Nginx, тест, который я делаю:

http://www.example.com/test результат ===> получен запрос www.example. ком

http://www.example.com/test/abc результат ===> запрос получен www.example.com

http://www.example.com результат ===> ( я не получаю результата !! это похоже на app.get не сработал)

так может ли кто-нибудь помочь мне в этом вопросе? когда я просматриваю домен без какого-либо параметра пути, я не получаю никакого результата, так что это похоже на то, что Nginx не перенаправил этот запрос на сервер узла !!


person devMan    schedule 30.09.2017    source источник


Ответы (1)


Прежде всего, когда вы просматриваете abc.com с помощью браузера или curl, он всегда будет отправлять путь как /. Невозможно отправить пустой путь

Далее ваша конфигурация nginx имеет реализацию socket.io. Это должно быть ниже

server
{
    listen 80;
    server_name example.ca www.example.ca;
    location / {
       proxy_pass http://127.0.0.1:3000;
       proxy_http_version 1.1;
       proxy_set_header Host $host;
    }
}

Далее вы не заканчиваете свои запросы, они просто истекают. Измените код ниже

app.get('*', function (req, res) {
  console.log(' request received ', req.headers.host);
  res.status(200).send("all ok");
});

Также, если у вас есть проблемы, вы можете протестировать их с помощью curl, как показано ниже.

curl -v http://www.example.com
person Tarun Lalwani    schedule 30.09.2017
comment
я уже пробовал это, по-прежнему ничего не получаю при использовании браузера или завитка !! - person devMan; 30.09.2017
comment
так что вы имеете в виду, если я использую местоположение / это также перенаправит www.example.com на сервер узла? запрос в моем случае перенаправляется только в том случае, если у меня есть что-то на пути, например, ww.example.com/about !! - person devMan; 30.09.2017
comment
я нашел, что предотвращает этот запрос, кажется, что когда я использую app.use(express.static(__dirname + '/public')); к серверу статических файлов из общей папки, тогда этот запрос не сработает !! я попытался удалить app.use, и он работает, но мне нужно также обслуживать статические файлы !!? - person devMan; 30.09.2017