Нещодавно я оновлював Rails разом з багатьма пов'язаними гемами, що використовуються в нашому проєкті. Разом з оновленням Rails я також вирішив оновити HTTP/2 до HTTP/3, оскільки це значно покращує продуктивність вебу та дозволяє більш ефективно передавати дані, особливо в умовах поганих мереж.
Однак процес не був таким плавним, як я очікував, на відміну від оновлення до HTTP/2. NGINX не зміг запуститися після оновлення Nginx і оновлення конфігурації.
Моя серверна конфігурація — Ubuntu 20.04 з Nginx 1.18. Ось кроки для налаштування HTTP/3 на старішій конфігурації, як у мене:
Кроки для налаштування HTTP/3
- Оновіть Nginx
- Оновіть конфігурацію Nginx
- Тестуйте ваш сайт
1. Оновіть Nginx
Щоб оновити Nginx, перейдіть на сайт Linux Packages:
🔗 https://nginx.org/en/linux_packages.html
Знайдіть свою дистрибуцію (у моєму випадку Ubuntu), натисніть на Ubuntu і дотримуйтесь попередніх кроків.
Дуже важливий крок під час “Налаштування репозиторію apt”:
- Ви побачите два репозиторії: 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