如何在nginx上设置反向代理以避免我的ionic和meanjs应用程序的CORS问题。

时间:2016-11-23 18:44:13

标签: angularjs ionic-framework cors meanjs

所以我在同一台服务器上运行了2个应用程序。 1.在后端,我有Mean.js,它提供执行CRUD操作的服务。 2.在前端我正在使用提供UI体验的IONIC应用程序。

前端(离子应用程序)在81上运行,后端在3000上运行。

我尝试通过在线查找设置后端(节点/平均值)的反向代理,但没有成功。

这是我的nginx设置

server {
    listen 80;

    server_name meantodo.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
} 

enter image description here

3 个答案:

答案 0 :(得分:1)

只需将标题添加到您的快速应用程序,允许离子服务器ip和端口如下:

app.use(function(req, res, next) {
     res.header('Access-Control-Allow-Origin', 'http://yourIonicServerIp:port');
     res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
      next();
  });

答案 1 :(得分:0)

我对Ionic和mean.js一无所知,但听起来你正在遇到与我相同的事情,React设置了2个站点,其中一个用POST或GET调用另一个站点

首先,您说您的前端站点位于端口81上,但它表示无法在错误中加载http://34.192.250.112/api/properties。这是80端口的呼叫。并且你说你的后端服务查询是在3000,所以你确定你的操作实际上不在那3000个网站上吗?您需要在:81之后添加:3000112,如果在某些“GET”中您没有共享。或者也许是因为那个listen 80而这样做,所以你必须用listen 81listen 3000替换它,以适用于你的api真正的位置。

但假设您在通话中修复了该问题,然后又遇到了类似的错误,那么您需要转到Web服务器上的IIS,假设它是在那里托管的(如果不是在IIS中,我确定有的话) Tomcat中的一个等价的地方或者你要用的任何地方,我要告诉你去的地方)。在您尝试呼叫的网站上,打开 HTTP响应标头功能。添加:

Name:  Access-Control-Allow-Origin
Value  http://34.192.250.112:81

如果您的请求需要身份验证,则可能需要添加:

Name:  Access-Control-Allow-Credentials
Value  true

此外,如果这还不够,并且您仍然遇到错误,则可以启用已禁用安全性的Chrome,然后导航到您的网站并执行导致“GET”的操作。在命令提示符下,您执行:

cd C:\Program Files (x86)\Google\Chrome\Application
chrome --disable-web-security --user-data-dir=C:/somefolder

然后导航到您的网站。

答案 2 :(得分:-1)

通过在https://github.com/meanjs/mean/blob/master/config/lib/express.js#L57

上添加以下行来解决此问题
var corsOptions = {
    origin: 'http://34.192.250.412:80',
    optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
  };
  app.use(cors());