2016-12-06 4 views
2

У меня есть несколько виртуальных хостов на nginx.Могу ли я включить HTTP/2 для конкретных виртуальных хостов только на Nginx?

Могу ли я включить HTTP/2 только для только для виртуальных хостов на nginx?

Когда я включаю HTTP/2 для виртуального хоста, например:

server { 
    listen  443 ssl http2; 
    server_name a.b.com; 
    ... 
} 

я могу получить доступ a.b.com по HTTP2.0.

Но теперь каждый другой виртуальный хост на том же nginx поддерживает HTTP/2 тоже. Но я хочу получить к ним доступ только HTTP/1.1.

Является ли директива http2 на уровне сервера?

ответ

2

Короткий ответ: невозможно при вашей текущей настройке.

При запуске nginx первого создает отдельный процесс для каждой группы виртуальных хостов, которые прослушивают же IP: порт комбинации, а затем устанавливает возможности этого процесса будет суммой всех возможностей каждого виртуальным хост в этой группе, обработанный указанным процессом.

В вашем случае существует только один процесс, который обрабатывает все виртуальные хосты, связанные с *:443, поэтому процесс включает в себя функцию http2.

Для того, чтобы достичь того, чего вы хотите, вы должны сделать nginx икру другой процесс, который не имеет возможности http2 на отдельном IP: порт комбинации.

Для виртуальных хостов, которые вы хотите получить доступ через http2, вы должны либо:

  • использовать другой порт - тривиальное, просто использовать другой порт для них (например, listen 8443 ssl http2;) и удалить http2 из всех другие (например, `слушать 443 по протоколу SSL;)
  • использовать другой IP - вам нужно добавить еще один IP-адрес в то же NIC, который использует ваш текущий IP и изменить ваши виртуальные хосты соответственно (например, 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; 
    ... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^