Dobra, bez zbędnego gadania - zaczynamy. Poradnik testowałem na wersji Ubuntu 14.04 LTS, ale na innych wersjach GNU/Linux raczej zadziała, mogą niekiedy się różnić polecenia ;)
1. Instalacja nginxa
Więc tak, wpierw może zalogujmy się na roota:
sudo su
a potem zainstalujmy nginxa:
apt-get install nginx
Gotowe, nginx śmiga. Wejdź na adres swojego serwera VPS, zobaczysz na własne oczy.
2. Konfiguracja nginxa
No to co, przejdźmy może sobie do głównego katalogu nginxa:
cd /etc/nginx/
a następnie do katalogu gdzie będziemy konfigurować nasze domeny:
cd sites-enabled
Jeżeli w tym folderze znajdziesz znajdziesz jakieś pliki - możesz je usunąć, nic się nie dzieje - i tak będziemy je tworzyć na nowo.
2.1. Domyślna strona główna dla nieobsługiwanych domen
Dobra, utwórzmy sobie plik, dajmy na to o nazwie default
(bez rozszerzenia, na co to komu). Następnie wprowadź do niego takową zawartość:
server {
listen 80 default_server;
location / {
return 403;
}
}
Jak pewnie widzisz po konfiguracji, która jest swoją drogą prosta, serwer przeznaczony dla wszystkich nieobsługiwanych domen nasłuchuje na porcie 80 (HTTP), i nie ważne gdzie by przeszedł, zawsze będzie pokazywał błąd 403. Jak już wprowadzisz zawartość, zapisz plik.
2.2. Dodanie obsługi danej domeny
Załóżmy, mamy domenę example.com
i chcemy ją skonfigurować - proszę bardzo, daje uniwersalny wzorzec ;)
Więc tak, skopiuj plik z domyślna konfiguracją nginxa (tutaj: default
) i nazwij tak jak chcesz - ja dla klarowności nazwę example.com
:
server {
listen 80;
location / {
return 403;
}
}
Dobra, zdefiniujmy sobie teraz, gdzie maja leżeć pliki naszej strony:
server {
listen 80;
root /var/www/example.com/html;
location / {
return 403;
}
}
Tutaj ustawiłem dla ścieżki /var/www/example.com/html. Następnie, ustawmy na jakie domeny ma nasz serwer HTTP reagować:
server {
listen 80;
root /var/www/example.com/html;
server_name example.com www.example.com;
location / {
return 403;
}
}
Jak pewnie widzisz, w server_name podałem więcej niż jedną domenę - oczywiście, jest takowa możliwość ;) Teraz może ustawmy, żeby nie wywalało tego irytującego błędu 403:
server {
listen 80;
root /var/www/example.com/html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
W poleceniu try_files zdefiniowałem, że jeżeli nie wykryje danego pliku, to wywali błąd 404. Oczywiście, możesz ustawić tutaj taki błąd, jaki Ty chcesz. Więcej info znajduje się w tym miejscu 😛 No i na końcu, zdefiniujmy nasz plik index, który znajduje się w katalogu zdefiniowanym w root:
server {
listen 80;
root /var/www/example.com/html;
index index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
Jak widzisz, plik nie musi się nazywać index
, to nie Apache, nie ma po co się ograniczać :kappa:
2.3. Na produkcje!
Upewnijmy się czy konfiguracja nginxa jest w porządku:
nginx -t
a następnie zrestartujmy całość:
service nginx restart
i gotowe!
3. Bonusy
3.1. Prawdziwe adresy ip za usługą CloudFlare
Całość jest opisana tutaj, a poniżej przykład
server {
listen 80;
root /var/www/example.com/html;
index index.html index.htm;
server_name example.com www.example.com;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;
location / {
try_files $uri $uri/ =404;
}
}
3.2. Własne strony błędów
Można stworzyć własne strony błędów, zamieniając te domyślne z nginxa:
server {
listen 80;
root /var/www/example.com/html;
index index.html index.htm;
server_name example.com www.example.com;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
try_files $uri $uri/ =404;
}
}
3.3. SSL
3.3.1. Cloudflare
W ustawieniach domeny starczy dać konfiguracje SSL na Flexible, upewnij się także że dany rekord jest objęty ochroną CloudFlare - symbolizuje to ikonka chmurki.
3.3.2. Własny SSL
server {
listen 80;
listen 443;
ssl on;
ssl_certificate pem.pem;
ssl_certificate_key key.key;
root /var/www/example.com/html;
index index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
Jak pewnie widzisz, włączyliśmy dodatkowo nasłuch na porcie 443 (HTTPS). Włączyliśmy funkcję ssl i za pośrednictwem dwóch kolejnych poleceń wskazaliśmy pliki pem i key, które się dostaje przy zakupie certyfikatu SSL.
3.4. Rewrite
Czyli jak używać funkcji znanej w Apache jako mod_rewrite (dzięki @bopke za zauważenie braku tego zagadnienia!). Tutaj znajduje się oficjalny link bloga ekipy odpowiedzialnej za nginxa, gdzie to zagadniene jest dobrze omówione, dzięki czemu nie ma sensu jego przenosić do tego tematu.
Jakieś pytania - coś rozszerzyć lub dopowiedzieć?