Nginx反向代理后網(wǎng)站視頻不能拖動進(jìn)度條問題
發(fā)現(xiàn)自己https://網(wǎng)站上的視頻可以播放,但不能拖動進(jìn)度條,一直以為是程序的問題,但通過IP訪問可以正常播放和隨意拖動進(jìn)度條,因此懷疑是反向代理的問題。
什么是反向代理?

就是將自己主機(jī)的其它端口映射到指定的域名或目錄上。
方式一:關(guān)閉緩存-解決視頻播放問題示例:
以下是一個http 80端口的端口映射,內(nèi)網(wǎng)主機(jī)是192.168.1.10,端口號88
http的反向代理模板,如果你的網(wǎng)站沒有啟用https那么用這個模板就行了:
server {
listen 80;
server_name qq.com;
location / {
proxy_pass http://192.168.1.10:88;
proxy_cache off; #關(guān)閉,解決視頻無法拖動問題
proxy_buffering off; #關(guān)閉,解決視頻無法拖動問題
proxy_http_version 1.1; #使用1.1版本,可不配置
proxy_temp_file_write_size 2048k; #打開,解決視頻無法拖動問題
}
}
https帶證書的反向代理模板:
server {
listen 80;
listen 443 ssl http2 ; #配置https端口
server_name colin.com; #域名或公網(wǎng)IP
index index.php index.html index.htm default.php default.htm default.html; #頭文件
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
access_log /www/sites/colin.com/log/access.log main; #日志
error_log /www/sites/colin.com/log/error.log;
#反向代理
location ^~ / {
proxy_pass http://127.0.0.1:880; #反向代理的服務(wù)器
proxy_cache off; #關(guān)閉,解決視頻無法拖動問題
proxy_buffering off; #關(guān)閉,解決視頻無法拖動問題
proxy_http_version 1.1; #使用1.1版本,可不配置
proxy_temp_file_write_size 2048k; #打開,解決視頻無法拖動問題
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
if ($scheme = http) {
return 301 https://$host$request_uri;
}
# 證書相關(guān),沒有證書可以刪除下面的
ssl_certificate /www/sites/colin.com/ssl/fullchain.pem; #ssl證書
ssl_certificate_key /www/sites/colin.com/ssl/privkey.pem; #ssl證書
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
proxy_set_header X-Forwarded-Proto https;
add_header Strict-Transport-Security "max-age=31536000";
}
但關(guān)閉代理緩存又出現(xiàn)了新的問題,就是文件在個別手機(jī)瀏覽器上無法正常下載,電腦瀏覽器可以下載。
原因是nginx沒有開起緩存,代理網(wǎng)絡(luò)是立即響應(yīng)的,默認(rèn)沒設(shè)置緩存,文件大了就會出現(xiàn)文件還沒下載完成就反饋給客戶端了,出現(xiàn)下載失敗,因為拿到的不是一個完整的文件。
經(jīng)多日搜索無數(shù)次測試找到如下解決辦法。
在使用Nginx反向代理視頻服務(wù)時,如果希望視頻可以邊緩存邊播放,您可以考慮以下優(yōu)化方法:
1、啟用Nginx的gzip壓縮功能,將視頻文件壓縮后再發(fā)送給客戶端。這樣可以減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,提高視頻加載速度。
2、調(diào)整Nginx的緩存配置,將緩存的過期時間設(shè)置為較長的時間,例如1個月或更長。這樣可以讓客戶端在第一次訪問時將整個視頻緩存下來,之后再次訪問時直接從本地緩存中加載,避免等待緩存完畢再播放。
3、在Nginx的配置中啟用range請求支持,這樣可以讓客戶端在緩存未完全加載完成時也可以開始播放。這個配置可以通過在location中增加"Accept-Ranges: bytes"和"proxy_set_header Range $http_range;"兩個指令來實現(xiàn)
4、調(diào)整視頻的編碼格式和分辨率,選擇較小的分辨率和適當(dāng)?shù)木幋a方式,可以減少視頻文件的大小,從而提高視頻加載速度。
5、需要注意的是,這些優(yōu)化方法都需要根據(jù)實際情況進(jìn)行調(diào)整,例如視頻大小、網(wǎng)絡(luò)帶寬等因素。同時,為了提高視頻加載速度,您還可以考慮使用CDN或加速服務(wù),將視頻文件緩存到全球多個節(jié)點,從而加速視頻加載速度。
Nginx反向代理做如下修改后可實現(xiàn)視頻拖動問題,而且也不影響下載了。
方式二:啟用Range請求-解決視頻播放問題示例:
http的反向代理模板,如果你的網(wǎng)站沒有啟用https那么用這個模板就行了:
server {
listen 80;
server_name qq.com;
proxy_set_header X-Real-IP $remote_addr; # 透傳客戶端IP
proxy_set_header X-Forwarded-Proto $scheme; # 標(biāo)識HTTP/HTTPS
proxy_set_header Range $http_range;
add_header Accept-Ranges bytes; #Accept-Ranges頭部的作用就是告訴客戶端,服務(wù)器是否支持這種“只請求部分資源”的操作。如果支持,它的值通常是bytes,表示服務(wù)器可以按照字節(jié)范圍來發(fā)送資源的一部分。如果不支持,它的值就是none,表示客戶端必須下載整個資源。
location / {
proxy_pass http://192.168.1.10:88;
proxy_set_header Host $proxy_host;
}
}
https帶證書的反向代理模板:
server {
listen 80;
listen 443 ssl http2 ; #配置https端口
server_name colin.com; #域名或公網(wǎng)IP
index index.php index.html index.htm default.php default.htm default.html; #頭文件
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
access_log /www/sites/colin.com/log/access.log main; #日志
error_log /www/sites/colin.com/log/error.log;
proxy_set_header X-Real-IP $remote_addr; # 透傳客戶端IP
proxy_set_header X-Forwarded-Proto $scheme; # 標(biāo)識HTTP/HTTPS
proxy_set_header Range $http_range; #啟用range請求支持,讓客戶端在緩存未完全加載完成時也可以開始播放
add_header Accept-Ranges bytes; #Accept-Ranges頭部的作用就是告訴客戶端,服務(wù)器是否支持這種“只請求部分資源”的操作。如果支持,它的值通常是bytes,表示服務(wù)器可以按照字節(jié)范圍來發(fā)送資源的一部分。如果不支持,它的值就是none,表示客戶端必須下載整個資源。
#反向代理
location ^~ / {
proxy_pass http://127.0.0.1:880; #反向代理的服務(wù)器
proxy_set_header Host $proxy_host;
}
if ($scheme = http) {
return 301 https://$host$request_uri;
}
# 證書相關(guān),沒有證書可以刪除下面的
ssl_certificate /www/sites/colin.com/ssl/fullchain.pem; #ssl證書
ssl_certificate_key /www/sites/colin.com/ssl/privkey.pem; #ssl證書
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
proxy_set_header X-Forwarded-Proto https;
add_header Strict-Transport-Security "max-age=31536000";
}
博客版權(quán):本文以學(xué)習(xí)、記錄、分享為目的。歡迎大家轉(zhuǎn)載,但務(wù)必注明原文地址,謝謝合作!

浙公網(wǎng)安備 33010602011771號