NGINX 代理传递到 Node.JS 服务器 SSL 握手失败

NGINX 代理传递到 Node.JS 服务器 SSL 握手失败

我想使用 NGINX 设置一个到我的 express.js 服务器的反向代理,但是当连接到网站时我收到 Cloudflare525 SSL handshake failed错误。

这是我的 NGINX 配置文件

# Redirect IP queries

server {
        listen 80;
        server_name MyIP;

        return 301 $scheme://example.com;
}

server {
        listen 443;
        server_name MyIP;

        ssl_certificate /home/ubuntu/Website/ssl/certificate.pem;
        ssl_certificate_key /home/ubuntu/Website/ssl/key.pem;

        return 301 $scheme://example.com;
}

# Reverse proxy

server {
        listen 80;
        server_name example.com;

        location / {
                proxy_pass http://localhost:5000;
        }
}

server {
        listen 443;
        server_name example.com;

        location / {
                proxy_pass https://localhost:8080;
                proxy_ssl_certificate /home/ubuntu/Website/ssl/certificate.pem;
                proxy_ssl_certificate_key /home/ubuntu/Website/ssl/key.pem;
        }
}

并且在 express.js 应用程序上也使用了相同的证书:

// Start the server
// Get SSL certificate data
const privateKey = fs.readFileSync(path.join(dirName(import.meta.url), "../ssl/key.pem"));
const certificate = fs.readFileSync(path.join(dirName(import.meta.url), "../ssl/certificate.pem"));
http.createServer(app).listen(5000);
https.createServer({
    key: privateKey,
    cert: certificate
}, app).listen(8080);
console.log("Server online");

答案1

您需要将有效的 TLS 证书添加到server的阻止中example.com。您当前的配置意味着 nginx 正在使用默认的自签名证书,而 Cloudflare 认为它们无效。

我认为没有必要将 IP 地址重定向到域名。我更希望只将 404 发送给对 IP 地址的请求,这将由块处理default_server。而且除了 IP 地址的自签名证书之外,您无法获得任何其他东西。

相关内容