我正在开发一个应用程序,使用 express nodjs 作为 API 的后端,并使用 angular7 开发前端。
我已准备好将所有 *js、*html 从 angular 应用程序构建部署(复制)到 express 应用程序中的 public/path
我使用 nginx 作为后端应用程序的反向代理,并进行了基本配置
#default.conf
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:3000;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
当用户直接点击 URL 时,此配置可以正常工作。Angular 应用程序运行良好,所有评级均有效
http://example.com/
但是当用户尝试直接从浏览器访问 URL 时,它会失败。我404 not found
从 nginx 获取页面,但未通过代理传递到后端服务器
http://example.com/my/direct/url
我了解 nginx 正在尝试访问一个文件或路径,但是由于 nodejs express 应用程序内部有一个 SPA angular 应用程序,因此它不存在。
我的架构看起来像这样
user ——> nginx ————> express app*
(http://example.com) -> (proxy_pass http:localhost:3000/) -> (“/public/(angular app)“ and “/api/”)
我如何告诉 nginx 所有路径都应该传递给我的 nodejs express 应用程序?
对不起,我的英语不好
答案1
您的问题中存在一些混淆http://本地主机和http://示例。您可以尝试此配置吗?应该可以正常工作。
server {
listen 80 default_server;
server_name _;
location / {
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
您可以点击以下形式的 URL:
http://localhost/my/direct/url
http://<SERVER_IP>/my/direct/url