冒着“过去的问题未被很好地接受,我可能会被阻止”的风险,这是一个问题:
我在GoDaddy上拥有域(abc.co,我已经购买了SSL证书)
我有EC2实例(abc.co域指向此虚拟机的弹性IP)
在上述EC2实例上,我的角度应用程序(UI)正在运行。
我可以通过https://abc.co
在同一VM上,我的节点js + express应用程序正在运行。 (我可以调用http://ip:3000/api/blah之类的API)
我已经将nginx用作API的反向代理和角度应用程序的服务器。
从角度应用程序中,我们正在调用https://ip:3000/api/blah(otherwise之类的API,如果仅使用http,则会收到混合内容错误)
现在,当我们从angular应用程序调用上述API时,我们将得到以下错误提示:
关于mozila:跨域请求被阻止:同源策略不允许
在https://ip:3000/api/users/login/上读取远程资源
在Chrome上:ERR_CONNECTION_CLOSED
这是我的Nginx文件,位于/ etc / nginx / sites-available / default
server{
#listen 80 default_server;
listen 443 ssl;
server_name abc.co;
#ssl off;
ssl_certificate /home/ubuntu/ssl_certs/abc.co.chained.crt;
ssl_certificate_key /home/ubuntu/ssl_certs/abc.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
root /var/www/html/tests;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
#reverse proxy
location /api {
rewrite ^/api/?(.*) /$1 break;
proxy_pass http://ip:3000;
}
}
server {
listen 80;
server_name abc.co;
return 301 https://abc.co$request_uri;
}
答案 0 :(得分:0)
为避免跨域问题,只需使用以下网址访问API:
https://abc.co/api/blah
当您的API在不同的VM上运行时,您将需要详细了解Cross-origin resource sharing
还有一个表达模块,可以帮助您解决这个问题。