问题描述
我已将我的应用程序配置为通过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资源。 因此,您所提供的实际内容存在问题,需要在此处进行修复。虽然您尝试的重定向最终可能会将不安全的访问重定向到安全访问,但它不会改变,因为它首先需要进行不安全的访问,由于内容混合,该不安全的访问已被阻止。