如何将https代理到http并启用ssl?

问题描述

我已将我的应用程序配置为通过WebSocket(WS)协议进行通信,并且希望通过https加载该应用程序。使用Nginx设置SSL后出现以下错误:

混合内容:该页面是通过HTTPS加载的,但是试图连接到不安全的WebSocket端点。

经过一些研究,我可以使用HTTPS中的HTTP指令将redirect重定向到Nginx。但是,它将通过HTTP(不使用SSL)加载应用。我也想启用SSL。

经过进一步研究,我尝试使用以下配置代理https

server {
           listen 443;
           server_name my.server.com;

            ssl_certificate /etc/letsencrypt/live/fullchain.pem;
            ssl_certificate_key /etc/letsencrypt/live/privkey.pem; 
            include /etc/letsencrypt/options-ssl-nginx.conf; 
            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
         
           ssl on;
           ssl_session_cache  builtin:1000  shared:SSL:10m;

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            

            proxy_pass http://127.0.0.1:8000;
            proxy_read_timeout 86400;       
         
        }
    }

server {
    listen 8000;
       
    root /home/ubuntu/app;
    # Add index.php to the list if you are using PHP
    index index.html;

}

但是,我仍然遇到相同的“混合内容”错误。

是否有一种在启用SSL的情况下将HTTPS代理/重定向到HTPP的方法?

非常感谢

已更新

在我的应用程序内部,我使用ws端点进行设置,如下所示:

const web3 = new Web3 ('ws://server-ip:7546')

注意:我不能使用const web3 = new Web3 ('wss://server-ip:7546')

我已经更新了Nginx这样的配置,以代理上述ws端点:

server {
           listen 443;
           server_name my.app.com;

           root /home/ubuntu/app;
           index index.html;

           ssl_certificate /etc/letsencrypt/live/fullchain.pem;
           ssl_certificate_key /etc/letsencrypt/live/privkey.pem; 
           include /etc/letsencrypt/options-ssl-nginx.conf; 
           ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
         
           ssl on;
           ssl_session_cache  builtin:1000  shared:SSL:10m;


        location / {
            
           proxy_pass http://server-ip:7546;
           
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "Upgrade";
           proxy_set_header Host $host;

        }

    }

我在我的应用和server-ip中使用相同的proxy_pass。 任何帮助我在这里做错了吗?

解决方法

您获取的错误无法在服务器配置中解决。

它来自从HTTPS服务的站点内部访问纯HTTP或WS资源。 因此,您所提供的实际内容存在问题,需要在此处进行修复。虽然您尝试的重定向最终可能会将不安全的访问重定向到安全访问,但它不会改变,因为它首先需要进行不安全的访问,由于内容混合,该不安全的访问已被阻止。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...