如何解决用于 RPC over HTTPS 的 Nginx 反向代理 - 问题已彻底检查和更新
我想做什么和我的问题
你好。我正在为 Cortex 区块链设置一个节点。我正在运行带有最新更新/升级的 Ubuntu 服务器 20.04。
我正在尝试保护通过节点的 RPC 和 WS 流量,以防止任何潜在的盗窃。
我一直在使用 curl 查看 http 是否被转发到 https。
curl -H "Host: cortex-coeus.asuscomm.com" -L https://cortex-coeus.asuscomm.com:8545 -v
我已经使用 HTTP 和 HTTPS 进行了测试,使用和不使用 8545 端口(我现在只担心 RPC,一旦我让 RPC 工作,WS 会效仿) 这是使用 HTTP(s) 和带/不带端口 8545 的组合的输出。Pastebin - Console output
SSL 证书由 certbot 创建。
问题
根据我下面的更新,如果对 url 使用“HTTP”而不是“HTTPS”,现在也会发生这种情况。
输出:curl -H "Host: cortex-coeus.asuscomm.com" -L https://cortex-coeus.asuscomm.com:8545 -v
* Trying 10.1.1.120:8545...
* TCP_NODELAY set
* Connected to cortex-coeus.asuscomm.com (10.1.1.120) port 8545 (#0)
* ALPN,offering h2
* ALPN,offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT),TLS handshake,Client hello (1):
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
* Closing connection 0
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number
目标
我只想宣传一个 HTTPS 网址,但如果使用 HTTP,则将网址的一部分转发到具有指定端口的 HTTPS。 有问题的网址是:
https://cortex-coeus.asuscomm.com:8545
节点配置
节点被配置为专门只侦听它的私有 IP。它正在侦听端口 18545 和 18546,分别是 RPC 和 WS。
nginx 配置
#SSL Certs for everyone
ssl_certificate_key /etc/letsencrypt/live/cortex-coeus.asuscomm.com/privkey.pem;
ssl_certificate /etc/letsencrypt/live/cortex-coeus.asuscomm.com/fullchain.pem;
upstream cortex {
server 10.1.1.120:18545;
}
server {
listen 443 ssl http2 default_server;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
server_name cortex-coeus cortex-coeus.asuscomm.com www.cortex-coeus.asuscomm.com;
access_log /var/log/nginx/access_443.log;
error_log /var/log/nginx/error_443.log info;
location /upstream {
#Copied from stackoverflow
#https://stackoverflow.com/questions/54491991/geth-websocket-over-nginx-reverse-proxy
# add_header Access-Control-Allow-Origin "$http_origin";
# add_header Access-Control-Allow-Headers "authorization,content-type";
# add_header Access-Control-Allow-Methods "DELETE,GET,OPTIONS,POST,PUT,UPDATE";
# to avoid double origin value what leads to an CORS error in the browser
# proxy_hide_header Access-Control-Allow-Origin;
#End of copy
#These were all common header settings i found for reverse proxy setup
#not sure if i should be using $http_host or $host
proxy_set_header Host $http_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_set_header X-Forwarded-Host $http_host;
proxy_http_version 1.1;
proxy_pass http://cortex;
# proxy_redirect http://$http_host$1 https://$http_host$1;
}
}
server {
listen 80;
# listen 8545;
server_name _;
# server_name cortex-coeus cortex-coeus.asuscomm.com;
return 301 https://$http_host;
access_log /var/log/nginx/access_80.log;
error_log /var/log/nginx/error_80.log info;
}
server {
listen 8545;
server_name _;
return 301 https://$http_host:8545;
}
- 更新 * 注意到当通过 curl 请求带有端口的 http url 时,$http_host 没有携带端口 8545。我一直在阅读 nginx 站点,并认为 $http_host 会携带端口。也许我需要更新只有 $http_host 的代理标头转发?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。