生产 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

远程 Spring 启动应用程序仍然连接到我的本地 mysql

使用 Ucanaccess 通过 android 设备连接到本地服务器上的 mdb