我可以在 Docker 容器内的 Nginx 服务器上实现 HTTP/2。但是,我无法执行服务器推送。
这些是我编写的配置文件。/etc/nginx/sites-available/lilstories
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
root /var/www/lilstories;
index Joke.html sniper.html;
server_name x.x.x.x;
location = /Joke.html {
http2_push /var/www/lilstories/YNWA.jpg;
}
}
开发人员工具未在 jpg 文件的启动器列中显示 Push。错误日志中未显示任何错误。有人能指出我哪里出错了吗?
答案1
这http2_push
指令后面跟着一个 URI 路径,但看起来您已经在文件系统上列出了绝对路径。
代替:
http2_push /var/www/lilstories/YNWA.jpg;
使用
http2_push /YNWA.jpg;
答案2
根据这个配置名称,我猜您正在使用自签名证书?
include snippets/self-signed.conf;
如果自签名证书不受浏览器信任(所以你会看到一个红色挂锁,可能是你点击过的?),那么不会使用缓存由 Chrome 提供。这包括 HTTP/2 Push 工作所需的 Push Cache。
接受自签名证书到您的信任库,这样您就会得到一个绿色挂锁,它就可以工作了。
这是对 HBruijn 关于语法使用错误的正确评论的补充。