
自宅のネットワークで Raspberry Pi にホストされている Web サイトにアクセスできないという問題が発生しています。最近まですべて正常に動作していたのですが、何をしたせいで問題が発生したのかわかりません :( 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
Server: nginx/1.14.2
このサイトは確かに nginx でホストされているので、すべてのリクエストで表示されるはずですServer: lighttpd
。これは単なる誤解なのか、それとも実際に何かを暗示しているのか疑問に思っています。
私のネットワーク設定は、インターネット -> 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
これで、問題は解決しました。同様の設定をしている人が将来同じ問題に遭遇した場合に備えて、問題は私が 3 番目のサイトを削除したことでした (もう必要ありませんでした)。ただし、そのサイトには 3 つのサイトすべてをカバーする SSL 証明書があり、現在は削除されています。さらに悪いことに、私は Letsencrypt を使用しておらず、代わりに HSTS で Cloudflare オリジン証明書を使用して、より堅牢なセキュリティを確保しています。Cloudflare がリダイレクトを引き起こしていましたが、証明書がないために失敗していました。私は現在、サイトごとに 1 つの証明書というシステムを採用しています (そこで学んだ教訓です)。
解決:
- 新しい証明書を生成する - サイトごとに1つ
- 証明書(pemとキーの両方)をサーバーのディレクトリに保存します。
- nginx のサーバーブロック (/etc/nginx/sites-enabled) を修正して、正しいディレクトリを指すようにし、http2 が有効になっていることを確認します。
- Cloudflare で SSL Strict が選択されていることを確認します。
以下は、サイトの 1 つに対する 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;
}
上記のブロックをコピーした場合は、お持ちの Web サイトに変更し、サフィックスが自分のものと同じであることを確認する必要があります。