Middle
Защо да инсталирате Nginx преди Ruby?
sobes.tech AI
Отговор от AI
Nginx се инсталира преди Ruby приложението (например Rails или Sinatra) по следните причини:
- Обслужване на статични файлове: Nginx ефективно (по-бързо и с по-малко ресурси) доставя статични файлове (CSS, JS, изображения), освобождавайки процесите на Ruby за обработка на динамични заявки.
- Обратен прокси: Nginx действа като обратен прокси, приемайки всички входящи HTTP заявки и ги пренасочва към Ruby сървъри (например Puma, Unicorn) чрез протокол (например HTTP или Unix Domain Socket). Това позволява управление на няколко Ruby процеса и баланс на натоварването.
- Терминиране на SSL/TLS: Nginx може да обработва криптирани SSL/TLS връзки, освобождавайки Ruby приложението от тази задача.
- Кеширане: Nginx може да кешира отговорите, ускорявайки доставката на често исканото съдържание.
- Компресиране: Nginx може да компресира отговорите (gzip, brotli), намалявайки обема на предаваните данни.
- Баланс на натоварването: Nginx може да разпределя входящите заявки между няколко инстанции на Ruby приложението, увеличавайки наличността и мащабируемостта.
- Логиране: Nginx предоставя мощни възможности за логиране на HTTP заявките.
- Сигурност: Nginx може да изпълнява основни функции за сигурност, като ограничаване на скоростта на заявките, блокиране на IP адреси и защита срещу някои видове атаки (например DDoS на ниво HTTP).
- Разделяне на отговорностите: Nginx се занимава с инфраструктурни задачи (обслужване на HTTP, SSL), позволявайки на Ruby приложението да се фокусира върху бизнес логиката.
Пример за конфигурация на Nginx за прокси към Unicorn:
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://unix:/path/to/your/app/tmp/sockets/unicorn.sock;
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;
}
# По желание: директно обслужване на статични активи
location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
root /path/to/your/app/public;
expires 1d;
}
}