无法使用Nginx在Express服务器顶部配置SSL

时间:2019-02-13 10:11:36

标签: node.js express ssl

冒着“过去的问题未被很好地接受,我可能会被阻止”的风险,这是一个问题:

  1. 我在GoDaddy上拥有域(abc.co,我已经购买了SSL证书)

  2. 我有EC2实例(abc.co域指向此虚拟机的弹性IP)

  3. 在上述EC2实例上,我的角度应用程序(UI)正在运行。

  4. 我可以通过https://abc.co

  5. 访问我的角度应用程序
  6. 在同一VM上,我的节点js + express应用程序正在运行。 (我可以调用http://ip:3000/api/blah之类的API)

  7. 我已经将nginx用作API的反向代理和角度应用程序的服务器。

  8. 从角度应用程序中,我们正在调用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;
}

1 个答案:

答案 0 :(得分:0)

为避免跨域问题,只需使用以下网址访问API:

https://abc.co/api/blah

当您的API在不同的VM上运行时,您将需要详细了解Cross-origin resource sharing

还有一个表达模块,可以帮助您解决这个问题。

Cors middleware