tôi đang sử dụng pm2 để chạy ứng dụng MERN của mình dưới dạng một quy trình, khi tôi nhập cuộn tròn http://localhost:3000
trong bảng điều khiển, đầu ra thực sự là từ ứng dụng của tôi. nhưng proxy ngược nginx không hoạt động. ứng dụng đang chạy trên vps và được kết nối với một tên miền. nhưng tôi bị 'chuyển hướng bạn quá nhiều lần'. từ trình duyệt.
máy chủ.js
cổng const = 3000
ứng dụng const = express()
bộ định tuyến const = express.Router()
const {kiên trì, lưu trữ} = createPersistor()
const serverRenderer = (req, res, next) => {
app.get('/*', function (req, res) {
res.sendFile(path.join(__dirname, '../build/index.html'), function (err) {
nếu (lỗi) {
res.status(500).send(err)
}
})
})
const ngữ cảnh = {}
fs.readFile(path.resolve('./build/index.html'), 'utf8', (err, data) => {
nếu (lỗi) {
console.error(err)
return res.status(500).send('Đã xảy ra lỗi')
}
trả lại res.send(
dữ liệu.replace(
'<div id="root"></div>',
`<div id="root">
${ReactDOMServer.renderToString(
<Cửa hàng của nhà cung cấp={cửa hàng}>
<StaticRouter location={req.url} context={context}>
<PersistGate loading={null}persistor={persistor}>
<Ứng dụng />
</PersistGate>
</StaticRouter>
</Nhà cung cấp>
)}
</div>`
)
)
})
}
bộ định tuyến.use('^/$', serverRenderer)
bộ định tuyến.sử dụng (
express.static(path.resolve(__dirname, '..', 'build'))
)
app.use(bộ định tuyến)
app.listen(PORT, () => {
console.log(`SSR chạy trên cổng ${PORT}`)
})
nginx/trang web có sẵn/mặc định:
người phục vụ {
nghe 80 default_server;
lắng nghe [::]:80 default_server;
server_name 198.51.100.255;
trả về 302 $scheme://mysite.com$request_uri;
địa điểm / {
# Lần đầu tiên cố gắng phục vụ yêu cầu dưới dạng tệp, sau đó
# làm thư mục, sau đó quay lại hiển thị lỗi 404.
try_files $uri $uri/ =404;
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Nâng cấp $http_upgrade;
'nâng cấp' kết nối proxy_set_header;
proxy_set_header Máy chủ lưu trữ $host;
proxy_cache_bypass $http_upgrade;
}
}
và không có nhật ký lỗi.
lưu ý: tôi chưa định cấu hình SSL.