我一直无法通过家庭网络访问托管在 Raspberry Pi 上的网站。直到最近一切都正常,我不知道我做了什么事情导致问题 :( 如果我curl -I sarahcorballis.com
从 Pi(即托管服务器的同一台机器)或其他任何地方运行,我会得到:
HTTP/1.1 301 Moved Permanently
Location: https://sarahcorballis.com/
Date: Fri, 08 Jan 2021 07:45:43 GMT
Server: lighttpd
但是,如果我运行curl -I localhost
(或 localhost:80),从 Pi 我得到:
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Fri, 08 Jan 2021 07:57:05 GMT
Content-Type: text/html
Content-Length: 3801
Last-Modified: Mon, 22 Apr 2019 18:39:21 GMT
Connection: keep-alive
ETag: "5cbe0a59-ed9"
Accept-Ranges: bytes
该网站确实托管在 nginx 上,因此我希望Server: nginx/1.14.2
在所有请求中都能看到。我想知道这是否Server: lighttpd
只是一种转移注意力的手段,或者它是否确实暗示了什么?
我的网络设置是 Internet -> ISP 提供的路由器 -> ASUS RX88U -> Raspberry Pi
ISP 路由器和 ASUS 路由器均具有端口转发 80-80 和 443-443,并且两者的日志均未显示任何问题。
直到昨天,甚至 curl -I localhost 也抛出了 lighttpd 响应,所以我认为这是 Raspberry Pi 中某个地方的问题,但我很困惑。
以下是输出ufw status
:
ERROR: Couldn't determine iptables version
输出如下iptables-save
:
iptables-save/1.8.2 Failed to initialize nft: Protocol not supported
所以,这是与昨天相比的另一个变化。那么,有什么变化呢?好吧,我已经从拉伸升级到破坏者了。
答案1
所以,现在这个问题已经解决了。如果有人有类似的设置,并且将来遇到同样的问题,那么问题就是我删除了第三个网站(不再需要它);但是,该网站有覆盖所有三个网站的 SSL 证书,现在这些证书已经不存在了。更糟糕的是,我没有使用 Letsencrypt,而是使用带有 HSTS 的 Cloudflare 原始证书来确保更强大的安全性。Cloudflare 导致了重定向,由于没有证书,重定向失败了。我现在采用了每个网站一个证书的系统(从中吸取了教训)。
解决方案:
- 生成新证书 - 每个站点一个
- 将证书(pem 和 key)保存到服务器上的目录中
- 修改 nginx 中的服务器块(/etc/nginx/sites-enabled)以指向正确的目录并确保已启用 http2
- 确保在 Cloudflare 中选择了 SSL Strict。
以下是某个站点的 nginx 配置块:
# configuration file /etc/nginx/sites-enabled/<website>.com:
server {
listen 80;
listen [::]:80;
server_name sarahcorballis.com www.<website>.com;
return 302 http://$server_name$request_uri;
}
server {
# SSL Configuration for Cloudflare
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_certificate /etc/ssl/certs/<website>.com.pem;
ssl_certificate_key /etc/ssl/private/<website>.com.key;
server_name <website>.com www.<website>.com;
root /var/www/sarahcorballis.com/;
index index.html;
try_files $uri $uri/ /index.html ;
client_max_body_size 50m;
}
如果您碰巧复制了上述块,则需要更改为您拥有的网站并确保后缀与您的网站相同。