Sobes.tech
Middle

Kāpēc pirms Ruby ir jāuzstāda Nginx?

sobes.tech AI

Atbilde no AI

Nginx uzstādīts pirms Ruby lietojumprogrammas (piemēram, Rails vai Sinatra) šādu iemeslu dēļ:

  1. Statisko failu apkalpošana: Nginx efektīvi (ātrāk un ar mazāku resursu patēriņu) nodrošina statiskus failus (CSS, JS, attēlus), atbrīvojot Ruby procesu apstrādāt dinamiskās pieprasījumus.
  2. Atpakaļproksijs: Nginx darbojas kā atpakaļproksijs, pieņem visus ienākošos HTTP pieprasījumus un novirza tos uz Ruby serveriem (piemēram, Puma, Unicorn) pa protokolu (piemēram, HTTP vai Unix Domain Socket). Tas ļauj pārvaldīt vairākus Ruby procesus un sadalīt slodzi.
  3. SSL/TLS terminēšana: Nginx var apstrādāt šifrētus SSL/TLS savienojumus, atvieglojot Ruby lietojumprogrammas darbu ar šo uzdevumu.
  4. Kešatmiņa: Nginx var kešēt atbildes, paātrinot bieži pieprasīto saturu.
  5. Kompresija: Nginx var kompresēt atbildes (gzip, brotli), samazinot pārsūtāmo datu apjomu.
  6. Slodzes balansēšana: Nginx var sadalīt ienākošos pieprasījumus starp vairākām Ruby lietojumprogrammas instancēm, palielinot pieejamību un mērogojamību.
  7. Žurnālu veidošana: Nginx nodrošina jaudīgas iespējas HTTP pieprasījumu žurnālo ierakstīšanai.
  8. Drošība: Nginx var veikt galvenās drošības funkcijas, piemēram, ātruma ierobežošanu, IP adresu bloķēšanu un aizsardzību pret dažādiem uzbrukumiem (piemēram, DDoS HTTP līmenī).
  9. Atbildības sadalīšana: Nginx nodarbojas ar infrastruktūras uzdevumiem (HTTP, SSL apkalpošana), ļaujot Ruby lietojumprogrammai koncentrēties uz biznesa loģiku.

Unicorn konfigurācijas piemērs Nginx:

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;
    }

    # Opcija: tieši apkalpot statiskos failus
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}