Poradnik: Jak korzystać z „locations” w Nginx
W tym wpisie przeprowadzimy konfigurację Nginx, aby zrozumieć, jak działają dyrektywy location
. Pokażę wam, jak dodać prostą stronę logowania do serwera Nginx oraz jak zablokować do niej dostęp za pomocą opcji deny
.
W przykładzie używam domeny kursngninx.pl. Oczywiście, w jej miejsce podkładasz własną.
Dołącz do szkolenia "Docker w 90 minut!"
Podczas szkolenia dowiesz się wszystkiego, co potrzebne, by wystartować z konteneryzacją. Poznasz podstawową obsługę Dockera. Nauczysz się 17 komend, które musi znać każda osoba działająca z kontenerami, Dockerem i Kubernetesem.
Widzimy się 12 września o 13:00!
Chcesz wziąć udział w szkoleniu? Zapisy na stronie: https://asdevops.pl/s42/
Na początek jednak, wyjaśnijmy sobie, co daje locations?
location
służy do definiowania reguł routingu dla żądań HTTP, które trafiają do serwera. Dzięki niej można określić:
- jak serwer powinien obsługiwać konkretne URI (czyli ścieżki w adresie URL)?
- jakie żądania przekazywać do określonych serwisów, plików czy katalogów?
- jak stosować różne ustawienia i polityki w zależności od żądanej lokalizacji?
W Nginx, dyrektywa location
służy do definiowania reguł routingu dla żądań HTTP, które trafiają do serwera. Dzięki niej można określić, jak serwer powinien obsługiwać konkretne URI (czyli ścieżki w adresie URL), jakie żądania przekazywać do określonych serwisów, plików czy katalogów, a także jak stosować różne ustawienia i polityki w zależności od żądanej lokalizacji.
Podstawowe zastosowania location
w Nginx:
- Przekierowanie do plików lub katalogów:
Możesz określić, jak serwer ma obsługiwać konkretne katalogi lub pliki na podstawie ścieżki URI.
location /images/ {
root /var/www/data;
}
W powyższym przykładzie, wszystkie żądania do URI zaczynające się od /images/
będą kierowane do katalogu /var/www/data/images/
.
- Przekierowanie na serwery zewnętrzne lub backendy:
Można użyćlocation
, aby przekierować żądania do zewnętrznych serwerów aplikacji, np. do aplikacji działającej na innym porcie lub maszynie.
location /app/ {
proxy_pass http://localhost:8080;
}
W tym przykładzie żądania zaczynające się od /app/
są przekazywane do aplikacji działającej na porcie 8080 na lokalnym serwerze.
- Filtrowanie i przetwarzanie żądań:
Nginx pozwala również na stosowanie dodatkowych reguł przetwarzania w ramachlocation
. Można definiować reguły na przykład w oparciu o typy żądań, nagłówki, metody HTTP itp.
location ~* \.(jpg|jpeg|png|gif|ico)$ {
expires 30d;
}
W tym przykładzie ustawiane jest wygaszenie cache’u przeglądarki na 30 dni dla plików graficznych.
- Warunkowe przetwarzanie na podstawie wyrażenia regularnego:
Możesz definiować bardziej zaawansowane reguły z użyciem wyrażeń regularnych, aby dopasować URI na przykład do wzorców dynamicznych.
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Powyżej pokazano, jak Nginx może obsługiwać żądania do plików PHP poprzez FastCGI.
Ćwiczenie
Krok 1: Konfiguracja pliku Nginx dla naszej strony
Na początek musimy edytować plik konfiguracyjny Nginx, aby dodać nową lokalizację /logowanie
.
- Otwórz plik konfiguracyjny swojej strony:
sudo nano /etc/nginx/sites-enabled/moja-strona
- Dodaj nową sekcję
location
:
W pliku konfiguracyjnym dodajemy nową sekcjęlocation
, która będzie obsługiwać zapytania pod adresem/logowanie
.
location /logowanie {
root /var/www/nowa/;
}
Opis: Tutaj określamy, że dla każdego żądania kierowanego na /logowanie
, serwer będzie szukał plików w katalogu /var/www/nowa/
.
Krok 2: Utworzenie struktury katalogów i pliku HTML
Kiedy nasza konfiguracja jest gotowa, musimy utworzyć odpowiednią strukturę katalogów oraz plik HTML, który będzie wyświetlany po wejściu na stronę logowania.
- Utwórz katalogi dla strony logowania:
sudo mkdir -p /var/www/nowa/logowanie/
Opis: Powyższe polecenie tworzy katalog logowanie
w ścieżce /var/www/nowa/
, gdzie zostanie umieszczona nasza strona logowania.
- Stwórz plik HTML dla strony logowania:
sudo nano /var/www/nowa/logowanie/index.html
Wklej poniższy kod do pliku:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Strona Logowania</title>
<style>
body {
text-align: center;
font-family: Arial, sans-serif;
margin-top: 100px;
}
.login-container {
margin: auto;
width: 300px;
padding: 20px;
border: 1px solid #ddd;
box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
}
input[type=text], input[type=password] {
width: 100%;
padding: 10px;
margin: 10px 0;
border: 1px solid #ddd;
box-sizing: border-box;
}
input[type=submit] {
width: 100%;
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
cursor: pointer;
}
input[type=submit]:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="login-container">
<h2>Logowanie</h2>
<form action="/submit-your-login-form" method="post">
<label for="username">Nazwa użytkownika:</label><br>
<input type="text" id="username" name="username"><br>
<label for="password">Hasło:</label><br>
<input type="password" id="password" name="password"><br>
<input type="submit" value="Zaloguj">
</form>
</div>
</body>
</html>
Opis: Ten kod tworzy prostą stronę logowania z formularzem, który użytkownicy mogą wypełnić. Strona posiada prosty, ale estetyczny styl CSS.
Krok 3: Załaduj zmiany w konfiguracji Nginx
Po wprowadzeniu zmian, musimy załadować nową konfigurację Nginx.
- Zrestartuj Nginx:
sudo nginx -s reload
Opis: To polecenie przeładowuje konfigurację Nginx, aby uwzględnić zmiany, które wprowadziliśmy.
- Sprawdź stronę logowania:
Otwórz przeglądarkę i przejdź pod adres:
https://kursngninx.pl/logowanie/
Opis: Jeśli wszystko zostało poprawnie skonfigurowane, zobaczysz stronę logowania, którą stworzyliśmy w poprzednim kroku.
Krok 4: Zablokowanie dostępu do strony logowania
Teraz, kiedy strona logowania działa, pokażę wam, jak zablokować do niej dostęp przy pomocy opcji deny
.
- Otwórz ponownie plik konfiguracyjny Nginx:
sudo nano /etc/nginx/sites-enabled/moja-strona
- Dodaj regułę blokującą dostęp:
Zmodyfikuj istniejącą sekcjęlocation /logowanie
, dodając opcjędeny all;
.
location /logowanie {
root /var/www/nowa/logowanie/;
deny all;
}
Opis: Opcja deny all;
blokuje dostęp do lokalizacji /logowanie
dla wszystkich użytkowników.
- Załaduj zmiany:
sudo nginx -s reload
Opis: Ponownie przeładowujemy Nginx, aby zastosować nowe ustawienia.
- Sprawdź dostęp do strony logowania:
Przejdź pod adres:
https://kursngninx.pl/logowanie/
Opis: Teraz strona logowania powinna być niedostępna, a Nginx zwróci błąd 403 (Forbidden).
Spróbuj również wejść na stronę główną:
https://kursngninx.pl/
Opis: Strona główna powinna nadal działać bez żadnych problemów.
Podsumowanie
Jak widzisz, zastosowanie locations w NGINX to przydatna i dosyć łatwa w użyciu opcja. Chcesz wiedzieć więcej?
Sprawdź nasze szkolenie Nginx w praktyce: https://asdevops.pl/nginxwchmurze/
Masz jakieś pytanie? Daj znać w komentarzu.
Dołącz do szkolenia "Docker w 90 minut!"
Podczas szkolenia dowiesz się wszystkiego, co potrzebne, by wystartować z konteneryzacją. Poznasz podstawową obsługę Dockera. Nauczysz się 17 komend, które musi znać każda osoba działająca z kontenerami, Dockerem i Kubernetesem.
Widzimy się 12 września o 13:00!
Chcesz wziąć udział w szkoleniu? Zapisy na stronie: https://asdevops.pl/s42/