Linux

設置 Node App 和 nginx 伺服器

  • November 27, 2015

我正在嘗試與我以前的 PHP 應用程序一起設置一個新節點。

設想

  • php 應用程序在www.xyz.com. 它使用 nginx 提供服務。
  • 節點應用程序通過埠 8142 上的 NodeJs 伺服器提供服務。

我想在連結處為 NodeJs 應用程序提供服務 www.xyz.com/nodeApp

我試過的

我的方法是將所有請求代理www.xyz/nodeApp到埠 8142,節點伺服器將在此接收。

我將以下代理配置添加到www.xyz.com.

location ~ ^/nodeApp(.*)$ {
  proxy_http_version 1.1;
  proxy_pass_request_body on;
  proxy_set_header Host $host;
  proxy_set_header Scheme $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://127.0.0.1:8142$1$is_args$args;
  proxy_buffering off;
}

結果

擊中www.xyz.com/nodeApp/,一切正常。節點伺服器接收請求並在連結等處提供css和文件。js``www.xyz.com/nodeApp/app.js

但是(沒有尾部斜杠)

敲擊時www.xyz.com/nodeApp,它不起作用。節點伺服器接收請求並正確提供頁面html,但文件在連結等處提供。因此應用程序中斷。css``js``www.xyz.com/app.js

我哪裡錯了?

我的節點伺服器文件

var express = require("express");
var app = express();

app.use(express.static(__dirname + '/build'));

var port = process.env.PORT || 8142;
app.listen(port, function() {
 console.log("Listening on " + port);
});

您應該簡化配置:

location /nodeApp/ {
  proxy_http_version 1.1;
  proxy_set_header Host $host;
  proxy_set_header Scheme $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://127.0.0.1:8142/;
  proxy_buffering off;
}

在這種情況下,nginx 會處理斜杠。見http://nginx.org/r/location

如果位置由以斜杠字元結尾的前綴字元串定義,並且請求由以下之一處理proxy_pass

$$ … $$,然後進行特殊處理。響應 URI 等於此字元串但沒有尾部斜杠的請求,將返回帶有程式碼 301 的永久重定向到附加斜杠的請求 URI。

此外,在proxy_pass. Nginx 將自動替換前綴/nodeApp//附加查詢字元串。

引用自:https://serverfault.com/questions/739274