我在nginx
上有几个虚拟主机。
我可以HTTP/2
为特定虚拟主机启用nginx
吗?
当我为虚拟主机启用HTTP/2
时,例如:
server {
listen 443 ssl http2;
server_name a.b.com;
...
}
我可以通过HTTP2.0访问a.b.com。
但是现在同一个nginx
上的每个其他虚拟主机也支持HTTP / 2。
但我只想通过HTTP/1.1
访问它们。
http2
指令是否在服务器级别?
答案 0 :(得分:4)
简短回答:您当前的设置无法实现。
启动时,nginx
首先为侦听同一 IP:port 组合的每组虚拟主机创建一个单独的进程,然后将该进程的功能设置为由该流程处理的该组中每个虚拟主机的所有功能的总和。
在您的情况下,只有一个进程处理绑定到*:443
的所有虚拟主机,因此该进程包含http2
功能。
为了实现您的目标,您需要让nginx
在单独的 IP:端口组合上生成不具有http2
功能的其他进程
对于您希望通过http2
访问的虚拟主机,您必须:
listen 8443 ssl http2;
)并从其他端口删除http2
(例如`listen 443 ssl;)listen new_ip:443 ssl http2;
和listen current_ip:443 ssl;
分别地)多个IP的配置示例:
server {
listen current_ip:443 ssl;
server_name http11-host.example.com;
...
}
server {
listen current_ip:443 ssl;
server_name another-http11-host.example.com;
...
}
...
...
server {
listen new_ip:443 ssl http2;
server_name http2-host.example.net;
...
}
server {
listen current_ip:443 ssl http2;
server_name another-http2-host.example.org;
...
}