我正在尝试托管一个网站,该网站包含多个子域(使用Cloudflare创建,也提供SSL),托管在DigitalOcean上,Nginx作为反向代理 .

我的Cloudflare配置

DNS设置:

Type ~ Name ~ Value
A ~ api ~ MyDigitalOceanIPv4
A ~ example.com ~ MyDigitalOceanIPv4
A ~ www ~ MyDigitalOceanIPv4

加密设置:

SSL: Full (strict)
Always use HTTPS: On 
Automatic HTTPS Rewrites: On

我还使用Cloudflare创建证书(并按照他们的说明使用Nginx进行设置)

我的Nginx配置:

server {
    listen 443;
    server_name example.com www.example.com;

    ssl on;
    ssl_certificate /srv/example.com/cloudflare.pem;
    ssl_certificate_key /srv/example.com/cloudflare.key;

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

server {
    listen 443;
    server_name api.example.com;

    ssl on;
    ssl_certificate /srv/example.com/cloudflare.pem;
    ssl_certificate_key /srv/example.com/cloudflare.key;

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

我已经为DigitalOcean上的所有TCP端口打开了,如果我尝试在浏览器中打开MyDigitalOceanIPv4:8000,那么我的网站(托管在Docker容器中)就会成功加载 . 但是,如果我尝试打开我的网站“example.com”,那么我得到Cloudflare的521网络服务器已关闭消息 .

我还验证了Cloudflare SSL密钥路径和内容是否正确, nginx -t 没有显示错误,我确保在进行更改后重新启动nginx .

我还尝试使用我的Nginx配置文件将Cloudflare的IP列入白名单,但它没有用 .

如果我尝试 telnet MyDigitalOceanIPv4 443 或80然后我得到 telnet: Unable to connect to remote host: Connection refused .

在我的DigitalOcean实例中,我试图卷曲成功打印我网站内容的 http://localhost:8000 .

我怀疑我需要配置一些DigitalOcean设置,或者我的Nginx文件有问题(尽管我已经在不同的 Cloud 提供商上成功使用了相同的Nginx配置),但感觉我已经尝试了一切......