Nginx
Służy do routowania i zarządzania połączeniami przychodzącymi na dany serwer.
Jeśli nie chcesz robić niczego skomplikowanego to polecam po prostu użyć apki Nginx proxy manager. Zrobisz większość rzeczy z pomocą prostego GUI.
Instalacja i odpalenie
sudo apt install nginx
Po instalacji jest duża szansa, że nginx wystartuje jako serwis z domyślną konfiguracją w /etc/nginx/nginx.conf
.
Do zarządzania przydaje się komenda service
. Przydatna zwłąszcza, gdy chcemy zrestartować serwis, aby wczytał zaktualizowaną konfigurację.
sudo service nginx reload #restartuje go
sudo service nginx start
sudo service nginx stop
Jeśli chcesz na szybko coś pozmieniać to wystarczy, że wyedytujesz plik nginx.conf
i zrestartujesz usługę.
Jednak przed restartem warto sprawdzić, czy ta konfiguracja ma sens nginx -t
.
Konfiguracja
Przykładowa konfiguracja dla prostego serwera HTTP
# Tworzymy serwer
server {
#słuchający na porcie 80 (dla różnych interfejsów)
listen 80;
listen [::]:80;
#umieszcza on logi w tych lokalizacjach
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
# i dla endpointów zaczynających się na / (czyli dla wszystkich)
location / {
#przekierowuje ruch na adres http://127.0.0.1:8000
proxy_pass http://127.0.0.1:8000;
#nadpisujemy wartość nagłówka Host (aby zapobiec problemom z CSRF)
proxy_set_header Host $http_host;
}
}
Bardziej złożona konfiguracja
#proste przekierowanie zapytań HTTP na HTTPS
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443;
# podajemy nazwę dla tego serwera
server_name example.com;
client_max_body_size 0; #potrzebne do przesyłania dużych zapytań
ssl_certificate /etc/ssl/certs/example_local.crt;
ssl_certificate_key /etc/ssl/private/example_local.key;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/example.access.log;
location / {
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;
# Fix the It appears that your reverse proxy set up is broken" error.
proxy_pass http://localhost:8080;
proxy_read_timeout 90;
proxy_redirect http://localhost:8080 https://example.com;
}
}
link do dokumentacji modułu HTTP
Różne użyteczne parametry:
proxy_set_header HEADERNAME VALUE;
- pozwala na łatwe ustawianie/zmienianie nagłówków zapytań wysyłanych dalejclient_max_body_size 100G;
- jak duży zapytania mogą być wysyłane przez klientóœ
Do debugowania nginx-a i certyfikatów warto używać komend:
wget --header="Host: example.com" http://192.168.1.10/
curl -H "Host: example.com" -O http://192.168.1.10/myfile.txt
Przy deploymentach złożonych systemów warto użyć nginx-a w dockerze i zmapować folder z konfigiem na folder /etc/nginx/conf.d/
Przykład dla compose'a
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./ssl:/etc/nginx/ssl
depends_on:
- my_webapp
/// TODO sprawdzić prostsze alternatywy jak CADDY https://caddyserver.com/