我有一個運行 Raspberry Pi OS Lite/Debian 11(64 位版本)并安裝了 NGINX 版本 1.18.0 的 Raspberry Pi 4B。NGINX 服務于一個小型 (~400KB) 網站,我設定了路由器以將 HTTP 請求轉發到 Raspberry Pi。在我的本地網路中,該站點在我嘗試過的所有瀏覽器中都能正常運行:Chrome、Edge、Safari 和 iOS 瀏覽器。
但是,當我嘗試通過 Internet 訪問時,Safari 和 iOS 瀏覽器無法加載整個站點。換句話說,在 Safari 或 iOS 上使用 Raspberry Pi 的本地 IP 地址導航到該站點沒有問題,但是當我使用該站點的域名或路由器的公共 IP 地址導航到該站點時,該站點僅加載部分,其余的超時。該網站在本地和互聯網上都可以在 Chrome 和 Edge 中正常加載。
我了解 Safari 和所有 iOS 瀏覽器都基于 WebKit,并且 Chrome 和 Edge 使用不同的引擎,我覺得這可能是問題的一部分,但我不知道如何修復它。我是一個業余愛好者,對網路開發很陌生。我的目標是通過 Raspberry Pi 自托管一個網站并將其提供給 Internet,最好是通過 Safari 和 Chrome。
我在 Stack Overflow 和其他論壇上四處尋找類似的帖子,但沒有找到任何解決方案;抱歉,如果我錯過了,這是一個多余的帖子。我將不勝感激任何見解或參考!該站點使用一些相當簡單的 JavaScript 在視圖之間進行路由,就像我說的,Safari 在本地渲染它沒有任何問題,所以我認為這不是站點資源的問題。也許與NGINX有關?無論如何,讓我知道我是否應該提供任何配置細節或類似的東西。謝謝!
uj5u.com熱心網友回復:
對于其他看到這一點的菜鳥:在 NGINX 虛擬主機配置中啟用 http/2 似乎有效。 有關如何執行此操作的簡短指南,請參見此處。同樣,服務器設定是安裝了 NGINX v1.18.0 的 Raspberry Pi OS Lite/Debian 11(64 位),因此不確定這是否適用于更新版本的 NGINX。這是sites-available目錄中我的 NGINX 虛擬主機配置:
server {
root /var/www/{PATH_TO_SITE_DIST};
index index.html;
server_name {SERVER_NAME};
location / {
try_files $uri $uri/ /;
}
listen [::]:443 ssl http2 ipv6only=on; # managed by Certbot
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/{PATH_TO_SSL_CERT}/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/{PATH_TO_SSL_KEY}/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
add_header Cache-Control "public, max-age=604800";
add_header Strict-Transport-Security "max-age=604800; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self' https://cdn.jsdelivr.net/";
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-XSS-Protection "1; mode=block" always;
}
server {
if ($host = {SERVER_NAME}) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
listen [::]:80 default_server;
server_name {SERVER_NAME};
return 404; # managed by Certbot
}
該配置包括由Certbot管理的 HTTPS/SSL ,并設定了幾個回應標頭,但與 http/2 最相關的部分是埠 443 上的兩個偵聽指令后面的 http2 關鍵字。一旦我添加了這些關鍵字,服務器就開始使用 http/2,并且該站點現在似乎在 Safari 15.2 和基于 WebKit 的 iOS 瀏覽器中運行良好。希望這對某人有幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417304.html
標籤:
