我正在尝试在DigitalOcean上托管一个具有多个子域的网站(通过Cloudflare创建,该网站还提供SSL),并使用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 Web服务器已关闭的消息。
我还验证了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文件出了点问题(即使我已经在其他云提供商上成功使用了相同的Nginx配置),但感觉就像我已经尝试了一切。