生产 Angular 应用程序连接到本地 Express 实例而不是生产 Express 实例
Posted
技术标签:
【中文标题】生产 Angular 应用程序连接到本地 Express 实例而不是生产 Express 实例【英文标题】:Production Angular app connects to local Express instance instead of production Express instance 【发布时间】:2019-01-26 08:01:10 【问题描述】:编辑 2
经过更多测试,我发现该站点正在连接到我的开发计算机的 Express。在开发计算机上运行 node ./bin/www 时,AWS 上的站点与其交互并正常运行。
当 dev Express 没有运行时,网站会产生这个错误,“Http failure response for (unknown url): 0 Unknown Error.”
生产服务器的 Express 在这两种情况下都在运行,但该站点未连接到生产 Express。不过,该站点在刷新页面时使用 nginx 回退到 index.html。
我检查了我的 Angular、server.js 和 www 文件中的特定 IP 地址,但我没有看到,也不记得设置了一个。我确实在我的开发计算机上构建了生产 Angular 包(并将其通过 FTP 传输到生产系统中),但 Angular deployment docs 似乎说没关系。
我当前的nginx文件如下:
upstream api
server <specific production server IP>:3000;
server
listen 80;
server_name *******.compute.amazonaws.com;
root /var/www/project/code/dist/project;
index index.html index.htm;
include /etc/nginx/mime.types;
location /
try_files $uri$args $uri$args/ /index.html;
location /api/
rewrite /asdf(.*) $1 break;
proxy_pass http://api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
有没有人有任何建议来解决这个问题或了解我做错了什么?
下面是原帖 带有 nginx 的 Angular 6 应用程序中的“(未知 url)的 Http 失败响应:0 未知错误”
我正在尝试在 AWS Ubuntu 服务器和 nginx 上部署 Angular 6 应用程序。 Angular 应用程序位于 dist 文件夹中。 Express 服务器正在http://localhost:3000 上运行。我遇到的问题是当我尝试提交表单数据时收到以下错误:“(未知 url)的 Http 失败响应:0 未知错误”。
我从this site 读到我可以包含下面显示的代码,但它似乎与 response to this post 中提到的 try_files 冲突。
server
listen 80;
server_name http://*******.compute.amazonaws.com;
root <path/to/dist>;
index index.html index.htm;
location /
try_files $uri $uri/ /index.html;
/* Code recommended for CORS */
if ($request_method = 'OPTIONS')
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
if ($request_method = 'POST')
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'GET')
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
location /api
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:3000;
proxy_redirect off;
我尝试了以下方法:
将 cors 标头添加到我的 server.js (ref) 在 location / 和 location /api 块(ref、ref)中添加不带 if 语句的较短标头 删除 try_files - 仍然出现相同的 cor 消息 在 if 标签内添加 try_files (ref)编辑 1
自从最初发布以来,我已经在 Express 服务器上尝试了一些工作,而不仅仅是 nginx 文件。
基于多个站点修改 server.js (ref) 尝试使用上游 (ref) 修改 nginx 尝试了 cors 的不同选项 - npm 文档(参考)是否有人对如何修复此错误消息有任何建议?我认为我的 nginx 设置的可用站点文件没有正确合并 cors,但是无论我做出什么更改,我都看不到如何让它工作。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:事实证明,我对地址中带有“localhost”的 api 进行了多次调用。将“localhost”替换为生产服务器的链接后,设置工作正常。
【讨论】:
以上是关于生产 Angular 应用程序连接到本地 Express 实例而不是生产 Express 实例的主要内容,如果未能解决你的问题,请参考以下文章
MEAN Stack - 将云 MongoDB 连接到 Angular 应用程序?
Angular - 连接到代理服务器并获得响应,但随后显示尝试代理时发生错误:本地主机到实际服务器
如何从 Angular Nginx 容器连接到 Node API docker 容器
Kafka 生产者连接到 localhost 而不是真实 IP