Linux
設置 Node App 和 nginx 伺服器
我正在嘗試與我以前的 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/
並/
附加查詢字元串。