Оновлення до HTTP/3 з Nginx на Ubuntu 20.04: Виклики, виправлення та робоча конфігурація

pic

Нещодавно я оновлював Rails разом з багатьма пов'язаними гемами, що використовуються в нашому проєкті. Разом з оновленням Rails я також вирішив оновити HTTP/2 до HTTP/3, оскільки це значно покращує продуктивність вебу та дозволяє більш ефективно передавати дані, особливо в умовах поганих мереж.

Однак процес не був таким плавним, як я очікував, на відміну від оновлення до HTTP/2. NGINX не зміг запуститися після оновлення Nginx і оновлення конфігурації.

Моя серверна конфігурація — Ubuntu 20.04 з Nginx 1.18. Ось кроки для налаштування HTTP/3 на старішій конфігурації, як у мене:

Кроки для налаштування HTTP/3

  1. Оновіть Nginx
  2. Оновіть конфігурацію Nginx
  3. Тестуйте ваш сайт

1. Оновіть Nginx

Щоб оновити Nginx, перейдіть на сайт Linux Packages:
🔗 https://nginx.org/en/linux_packages.html

Знайдіть свою дистрибуцію (у моєму випадку Ubuntu), натисніть на Ubuntu і дотримуйтесь попередніх кроків.

Дуже важливий крок під час “Налаштування репозиторію apt”:

pic

  • Ви побачите два репозиторії: stable та mainline.
  • Ви можете спробувати mainline, оскільки він містить найновішу версію.
  • Однак, він не працював для мене з Nginx v1.27.x, тому я згодом перейшов на репозиторій stable, який встановив Nginx v1.26.3.

Важливий аспект оновлення Nginx — це значні зміни в структурі файлів та папок між Nginx v1.18 та Nginx v1.26.3.

2. Налаштуйте конфігурацію Nginx

Після того як я слідував документації і налаштував конфігурацію Nginx, я зіткнувся з проблемою:

  • Ресурси Active Storage не відображалися — всі зображення з'являлися пошкодженими.
  • Як тільки я відключив HTTP/3, зображення завантажувалися без проблем.

3. Моя робоча конфігурація Nginx

Ось конфігурація Nginx, яка працює для мене на Ubuntu 20.04 з Nginx v1.26.3 та HTTP/3:

server {  
 listen 443 ssl default_server;  
 listen 443 quic default_server reuseport;  

 http2 on;  
 http3 on;  
 http3_hq on;  
 quic_retry on;  
 ssl_early_data on;  
 quic_gso on;  

 server_name yourdomain.com;  
 root /path/to/your/app/current/public;  

 ...  

 # Основний проксі додатку  
 location / {  
 proxy_read_timeout 300;  
 proxy_connect_timeout 300;  
 proxy_redirect off;  
 proxy_set_header X-Forwarded-Proto $scheme;  
 proxy_set_header Host $http_host;  
 proxy_set_header X-Real-IP $remote_addr;  
 proxy_pass http://app_backend;  

 # Забезпечте рекламу HTTP/3  
 add_header Alt-Svc 'h3=":$server_port"; ma=1800' always;  
 add_header x-quic 'h3';  
 }  

 # Active Storage (Переконайтеся, що підтримка HTTP/3 увімкнена)  
 location /rails/active_storage/ {  
 proxy_pass http://app_backend;  
 proxy_set_header Host $host;  
 proxy_set_header X-Real-IP $remote_addr;  
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
 proxy_set_header X-Forwarded-Proto $scheme;  

 # Забезпечте рекламу HTTP/3 для Active Storage  
 add_header Alt-Svc 'h3=":$server_port"; ma=1800' always;  
 add_header x-quic 'h3';  
 }  

 ...  
}

Сподіваюся, що ця стаття допомогла вам успішно налаштувати HTTP/3 для вашого Rails проєкту на Ubuntu 20.04 з Nginx. 🚀

Перекладено з: Upgrading to HTTP/3 with Nginx on Ubuntu 20.04: Challenges, Fixes, and Working Configuration