我想使用 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 地址的自签名证书之外,您无法获得任何其他东西。