Z użyciem serwera NGINX skonfigurowałem reverse proxy dla usługi działającej na adresie 127.0.0.1:8080 (kontener Docker z aplikacją). Dzięki temu lokalny serwis jest dostępny z zewnątrz pod domeną app.avlab.pl. Inny administrator skonfigurował zasób SFTP dla klienta kierujący na katalog /home/www/NAZWA_KLIENTA/media. Przesłane pliki powinny być dostępne (wylistowane) pod adresem https://app.avlab.pl/media, ale zamiast tego widoczna jest strona logowania aplikacji lub następuje przekierowanie do strony https://app.avlab.pl/user. Programista nie chciałby dodawać obsługi listowania jako funkcjonalności. Jak rozwiązać ten problem?
Apr 14, 7:22am
Problem polega na tym, że NGINX nie jest skonfigurowany do obsługi statycznych plików z katalogu /home/www/NAZWA_KLIENTA/media pod ścieżką /media. Obecnie wszystkie żądania (w tym te do /media) są przekazywane do aplikacji działającej na 127.0.0.1:8080, która nie obsługuje listowania plików i przekierowuje do strony logowania.
Rozwiązanie: Konfiguracja NGINX do obsługi statycznych plików
Trzeba dodać nową lokalizację (location) w konfiguracji NGINX, która będzie obsługiwała żądania do /media bezpośrednio z systemu plików, zamiast przekazywania ich do aplikacji.
1. Edycja pliku konfiguracyjnego NGINX
Otwórz plik konfiguracyjny NGINX (np. /etc/nginx/sites-available/app.avlab.pl lub /etc/nginx/conf.d/app.conf) i dodaj następującą sekcję wewnątrz bloku server dla domeny app.avlab.pl:
nginx
server {
listen 80;
listen [::]:80;
server_name app.avlab.pl;
# ... (istniejąca konfiguracja SSL, jeśli jest używana)
# Obsługa statycznych plików dla /media
location /media/ {
alias /home/www/NAZWA_KLIENTA/media/;
autoindex on; # Włącz listowanie katalogów (opcjonalnie)
try_files $uri =404;
}
# Przekierowanie pozostałych żądań do aplikacji Docker
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
Wyjaśnienie:
location /media/: Definiuje, że wszystkie żądania zaczynające się od /media/ będą obsługiwane przez NGINX, a nie przekazywane do aplikacji.
alias /home/www/NAZWA_KLIENTA/media/: Mapuje ścieżkę /media na fizyczny katalog na serwerze.
autoindex on;: Włącza listowanie plików w katalogu (jeśli chcesz, aby użytkownicy widzieli listę plików). Możesz to pominąć, jeśli nie jest potrzebne.
try_files $uri =404;: Sprawdza, czy plik istnieje. Jeśli nie, zwraca błąd 404.
2. Sprawdzenie poprawności konfiguracji
Przed restartem NGINX sprawdź, czy konfiguracja jest poprawna:
bash
sudo nginx -t
Jeśli nie ma błędów, zrestartuj NGINX:
bash
sudo systemctl restart nginx
3. Uprawnienia do katalogu
Upewnij się, że:
Katalog /home/www/NAZWA_KLIENTA/media istnieje.
Użytkownik, pod którym działa NGINX (zwykle www-data lub nginx), ma uprawnienia do odczytu tego katalogu: