Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 我如何通过HTTPS提供内容_Angular_Https - Fatal编程技术网

Angular 我如何通过HTTPS提供内容

Angular 我如何通过HTTPS提供内容,angular,https,Angular,Https,我创建了一个应用程序,并将其部署在DigitalOcean上,我有一个SSL证书。有两个独立的服务器,一个用于angular,它有一个用于https重定向的平衡器加载程序,另一个用于后端,但当我打开网站时,我在控制台中看到了这个 Mixed Content: The page at 'https://www.mirrorate.com/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http:

我创建了一个应用程序,并将其部署在DigitalOcean上,我有一个SSL证书。有两个独立的服务器,一个用于angular,它有一个用于https重定向的平衡器加载程序,另一个用于后端,但当我打开网站时,我在控制台中看到了这个

Mixed Content: The page at 'https://www.mirrorate.com/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://165.22.187.137/api/posts?pagesize=2&page=1'. This request has been blocked; the content must be served over HTTPS.

有人能给我解释一下吗?或者我如何解决这个问题,谢谢

出于安全考虑,您不能通过http进行https调用

要解决您的问题,您可以设置nginx通过https代理您的http后端url。 使用nginx服务器,您需要像调用api一样调用api,nginx将代理您的请求到api主机,您将在配置中设置该主机

示例配置。PS-不要忘记更改您的证书文件路径:

# if you have sockets
upstream socket {
    ip_hash;
    server host:port fail_timeout=0;
}

server { 
    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl default_server;
    root /usr/share/nginx/html;
    index  index.html index.htm;
    include /etc/nginx/mime.types;
    client_max_body_size 50M;

    # server_name YOUR_SERVER_NAME
    ssl_certificate /fullchain.pem;
    ssl_certificate_key /privkey.pem;

    include /options-ssl-nginx.conf;
    ssl_dhparam /ssl-dhparams.pem;

    location /ws/ {
        proxy_pass http://socket;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /api {
            proxy_pass http://host:port/api;
    }

    location / {
        try_files $uri $uri/ /index.html;
    }
}

如果您的angular应用程序通过HTTP,则无法向HTTP服务器发出请求,因为断开了HTTPS协议,浏览器不允许这样做。您需要一个HTTP(S)后端或HTTP前端。

可以在不使用https的情况下设置后端。我们可以使用nginxno代理来自域服务器的请求。https上的浏览器从不触发对http api的XMLHttpRequest。您需要再次阅读我的评论。我并没有说浏览器可以通过https调用http api。我只想说,如果我们使用nginx将http api调用代理到https,api可能不使用http进行设置。这意味着api调用将通过https进行,但将通过代理服务器进行,而不是通过后端进行,在那里您可以获得fullchain.pem和privkey.pem?如果是自签名证书,浏览器将阻止该请求。您需要在浏览器中手动启用证书,然后浏览器将发出请求。但如果重新启动代理,则需要在浏览器中再次启用。