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

Node.js Express NGINX: пути к статическим файлам прерываются с разделением имен proxy_pass

Итак, я обращался к своему серверу в domain.com:3333 но просто переключил его на domain.com/nodeapp используя восходящий поток и прокси-сервер в моей конфигурации nginx. Перенаправление работает нормально, но теперь ссылки на статические файлы, используемые моим index.html (/styles/style.css & socket.io/socket.io.ks), не работают, и все, что отображается, является необработанным html.

Из index.js

app.get('/nodeapp', function(req,res){
 res.sendFile(path.join(__dirname, '/views', 'index.html'));
});

app.use('/styles', express.static(path.join(__dirname, '/views/styles')));

Из index.html

<link rel="stylesheet" type="text/css" href="styles/style.css">
<script src="socket.io/socket.io.js"></script>

Из ... / nginx / sites-enabled / default

upstream nodeapp{
  server localhost:3333 fail_timeout=0;
}

server{
....

    location /nodeapp{
      proxy_pass http://nodeapp;
    }

....
}

Как мне восстановить ссылку?

Обратите внимание, что в моем index.js перед переключателем первая показанная строка была app.get('/', function(req,res){

Итак, это было довольно сложно понять, но до боли просто.

location /socket.io {
    proxy_pass http://nodeapp;
}

location /styles {
    proxy_pass http://nodeapp;
}

Пути, на которые ссылается index.html, должны быть установлены как местоположения в конфиге nginx, что prox_pass ведет к серверу узла.

Добавьте завершающую косую черту к своему местоположению и к цели proxy_pass и оставьте исходный index.js нетронутым. Однако ваши ссылки должны указывать на / nodeapp / {something} в index.html.

location /nodeapp/ {
    proxy_pass http://nodeapp/;
}