NGINX
Przewodnik krok po kroku dotyczący zabezpieczania wdrożenia LibreChat za pomocą Nginx jako reverse proxy i HTTPS
Ten przewodnik obejmuje niezbędne kroki w celu zabezpieczenia wdrożenia LibreChat za pomocą certyfikatu SSL/TLS dla HTTPS, skonfigurowania Nginx jako odwrotnego proxy oraz konfiguracji domeny.
Wymagania wstępne
- Serwer w chmurze (np. AWS, Google Cloud, Azure, Digital Ocean).
- Zarejestrowana nazwa domeny.
- Dostęp do terminala Twojego serwera w chmurze.
- Node.js
v24.16.0oraz npmv11.16.0, jeśli uruchamiasz LibreChat bezpośrednio na hoście.
Wstępna konfiguracja
Kierowanie domeny na serwer
Przed przystąpieniem do uzyskania certyfikatu, skieruj swoją domenę na adres IP swojego serwera w chmurze. Ten krok jest podstawowy i musi poprzedzać konfigurację certyfikatu SSL ze względu na czas, jakiego rekordy DNS mogą potrzebować na propagację w skali globalnej.
- Zaloguj się do panelu sterowania swojego rejestratora domen.
- Przejdź do ustawień DNS.
- Utwórz
A recordwskazujący Twoją domenę na adres IP Twojego serwera w chmurze. - Poczekaj, aż zmiany DNS rozprzestrzenią się globalnie (możesz to sprawdzić, pingując swoją domenę:
ping your_domain.com).
Uzyskanie certyfikatu SSL/TLS
Aby zabezpieczyć swoją aplikację LibreChat za pomocą HTTPS, będziesz potrzebować certyfikatu SSL/TLS. Let's Encrypt oferuje darmowe certyfikaty:
-
Zainstaluj Certbot:
- Dla Ubuntu:
sudo apt-get install certbot python3-certbot-nginx - Dla CentOS:
sudo yum install certbot python2-certbot-nginx
- Dla Ubuntu:
-
Uzyskaj certyfikat:
- Uruchom
sudo certbot --nginx, aby automatycznie uzyskać i zainstalować certyfikat dla Nginx. - Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie. Certbot poprosi o podanie informacji i przeprowadzi proces walidacji.
- Po pomyślnym zakończeniu, Certbot zapisze pliki Twojego certyfikatu.
- Uruchom
Konfiguracja Nginx jako serwera proxy (reverse proxy)
Nginx działa jako odwrotne proxy, przekazując żądania klientów do Twojej aplikacji LibreChat. Istnieją dwie opcje wdrożenia:
Opcja A: Użycie deploy-compose.yml Docker Compose (zalecane)
Plik deploy-compose.yml zawiera kontener Nginx i wykorzystuje plik client/nginx.conf do konfiguracji Nginx. Ponieważ jednak sudo certbot --nginx wyodrębnia certyfikat do konfiguracji hosta, musisz skopiować certyfikat do kontenerów Docker.
- Zaktualizuj
client/nginx.confo swoją domenę i ścieżki do certyfikatów. - Zaktualizuj
deploy-compose.ymlw sekcjiclient, aby zamontować pliki certyfikatów z hosta:
client:
# ...
volumes:
- ./client/nginx.conf:/etc/nginx/conf.d/default.conf
- /etc/letsencrypt/live/<your-domain>:/etc/letsencrypt/live/<your-domain>
- /etc/letsencrypt/archive/<your-domain>:/etc/letsencrypt/archive/<your-domain>
- /etc/letsencrypt/options-ssl-nginx.conf:/etc/letsencrypt/options-ssl-nginx.conf
- /etc/letsencrypt/ssl-dhparams.pem:/etc/letsencrypt/ssl-dhparams.pem- Zatrzymaj każdą uruchomioną instancję:
npm run stop:deployed - Zatwierdź zmiany w nowej gałęzi Git.
- Zrebasuj wdrożoną instancję:
npm run rebase:deployed
Opcja B: Wdrożenie oparte na hoście bez użycia Docker
Jeśli nie używasz Docker, możesz zainstalować i skonfigurować Nginx bezpośrednio na hoście:
-
Zainstaluj Nginx:
- Ubuntu:
sudo apt-get install nginx - CentOS:
sudo yum install nginx
- Ubuntu:
-
Uruchom Nginx:
sudo systemctl start nginx -
Otwórz plik konfiguracyjny Nginx:
sudo nano /etc/nginx/sites-available/default -
Zastąp zawartość pliku poniższą treścią, pamiętając o zamianie
your_domain.comna swoją domenę orazapp_portna port swojej aplikacji:
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://localhost:app_port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}- Sprawdź konfigurację Nginx:
sudo nginx -t - Przeładuj Nginx:
sudo systemctl reload nginx
Uruchamianie aplikacji
- Przejdź do katalogu swojej aplikacji:
cd LibreChat- Uruchom swoją aplikację za pomocą Docker Compose:
sudo docker compose -f ./deploy-compose.yml up -dOdnawianie certyfikatów przy użyciu nginx
Jeśli skonfigurowałeś nginx przy użyciu zalecanej powyżej Opcji A, wykonaj poniższe kroki, aby odnowić certyfikaty:
- Przejdź do katalogu swojej aplikacji
cd LibreChat- Zatrzymaj uruchomione kontenery Docker
sudo docker compose -f ./deploy-compose.yml down -d- odnów certyfikaty
sudo certbot renew- Zrestartuj swoją aplikację
sudo docker compose -f ./deploy-compose.yml up -dUwaga: certbot może zrestartować nginx hosta. Możesz go zatrzymać za pomocą sudo pkill nginx
Web Application Firewall
Nginx można skonfigurować tak, aby działał jako zapora aplikacji internetowej (WAF), wykorzystując zestaw reguł OWASP Core Rule Set (CRS), który zapewnia solidny zestaw reguł chroniących przed typowymi lukami i atakami na aplikacje internetowe. Użycie OWASP CRS z Nginx może zwiększyć bezpieczeństwo wdrożenia LibreChat poprzez dodanie dodatkowej warstwy ochrony.
-
Zainstaluj OWASP CRS:
- Ubuntu:
sudo apt-get install nginx-modsecurity-crs
- Ubuntu:
-
Włącz ModSecurity w Nginx:
-
Otwórz swój plik konfiguracyjny Nginx (np.
/etc/nginx/nginx.conf). -
Dodaj poniższe linie wewnątrz bloku
http:modsecurity on; modsecurity_rules_file /usr/share/nginx/modsecurity-crs/nginx-modsecurity.conf;
-
-
Skonfiguruj OWASP CRS:
- Pakiet OWASP CRS zazwyczaj zawiera plik konfiguracyjny (np.
/etc/nginx/modsecurity.d/nginx-modsecurity.conf), w którym można dostosować różne ustawienia i zestawy reguł zgodnie z własnymi wymaganiami.
- Pakiet OWASP CRS zazwyczaj zawiera plik konfiguracyjny (np.
-
Przeładuj Nginx:
sudo systemctl reload nginx
Włączając OWASP CRS w swojej konfiguracji Nginx, możesz wykorzystać kompleksowy zestaw reguł dostarczony przez ten projekt do wykrywania i ograniczania różnych podatności oraz ataków na aplikacje internetowe, takich jak SQL injection, cross-site scripting (XSS), remote file inclusion i inne.
Buforowanie i kompresja plików statycznych
LibreChat obsługuje teraz natywnie buforowanie i kompresję plików statycznych. Jeśli używasz NGINX do obsługi kompresji, powinieneś wyłączyć kompresję w LibreChat, aby uniknąć zbędnego przetwarzania. Możesz to zrobić, ustawiając zmienną środowiskową DISABLE_COMPRESSION na true w swojej konfiguracji LibreChat.
# .env file
DISABLE_COMPRESSION=trueZapobiegnie to kompresji plików statycznych przez LibreChat, co pozwoli NGINX na wydajniejszą obsługę kompresji.
Aby uzyskać więcej informacji na temat obsługi plików statycznych w LibreChat, w tym opcji buforowania, zapoznaj się z dokumentacją Static File Handling.
Jaka jest ta instrukcja?