Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!

Jakiś czas temu opublikowałem poradnik jak ustawić serwer Nginx i Apache2 tak, by w przypadku korzystania z usługi CloudFlare serwer prawidłowo rozpoznawał (m.in. w logach/statystykach) prawdziwe adresy IP użytkowników, a nie należące do CloudFlare.

O ile w przypadku webserwera Apache2 wystarczy relatywnie prosta modyfikacja konfiguracji by dalej wszystko działało bez naszej dalszej ingerencji, to w przypadku Nginx „raz na jakiś czas” warto/trzeba zaktualizować listę wykorzystywanych przez CloudFlare adresów IP.

Dlatego sam posiłkuje się skryptem który robi to za mnie, a który właśnie dziś chciałbym Wam przedstawić…

Nginx i automatyczne pobieranie adresów IP CloudFlare

Nie będę tutaj rozpisywał się nad tym dlaczego w ogóle taka operacja jest potrzebna – zainteresowanych odsyłam do wcześniejszego wpisu na ten temat, w którym opisałem „co i dlaczego”.

W tym wpisie będzie tylko o skrypcie który pobiera listę adresów IP należących do CloudFlare i tworzy plik cloudflare.conf, który jest wykorzystywany przez Nginx do „demaskowania” prawdziwych adresów IP użytkowników:

#!/bin/bash

# Skrypt pobiera listę IP używanych przez CloudFlare
# i zapisuje je do pliku zgodnego z Nginx.
# Plik należy zapisać /etc/nginx/conf.d/cloudflare.conf
# i zrestartować Nginx (restart lub reload).
# Skrypt może to zrobić automatycznie (parametr: auto),
# lub dopiero gdy sami zdecydujemy (start bez parametru).

CF_IP4="/tmp/cf_ipv4"
CF_IP6="/tmp/cf_ipv6"
CF_TEMP_IP_LIST="/tmp/cf_temp_ip_list"
CF_NGINX_IP_LIST="/etc/nginx/conf.d/cloudflare.conf"

if [ "$CF_IP4" ]
then
sudo rm $CF_IP4
fi

if [ "$CF_IP6" ]
then
sudo rm $CF_IP6
fi

if [ "$CF_TEMP_IP_LIST" ]
then
sudo rm $CF_TEMP_IP_LIST
fi


sudo wget -U "Download IP4" https://www.cloudflare.com/ips-v4 -O $CF_IP4
sudo wget -U "Download IP6" https://www.cloudflare.com/ips-v6 -O $CF_IP6


echo "# Cloudflare MyRealIP" | sudo tee $CF_TEMP_IP_LIST > /dev/null

while read line; do
echo "set_real_ip_from "$line";"
done < $CF_IP4 | sudo tee -a $CF_TEMP_IP_LIST > /dev/null

while read line; do
echo "set_real_ip_from "$line";"
done < $CF_IP6 | sudo tee -a $CF_TEMP_IP_LIST > /dev/null

echo "real_ip_header CF-Connecting-IP;" | sudo tee -a $CF_TEMP_IP_LIST > /dev/null
echo "real_ip_recursive on;" | sudo tee -a $CF_TEMP_IP_LIST > /dev/null

echo "# /Cloudflare MyRealIP" | sudo tee -a $CF_TEMP_IP_LIST > /dev/null
echo "# $(date +"%Y.%m.%d")" | sudo tee -a $CF_TEMP_IP_LIST > /dev/null

if [ "$1" = "auto" ]
then
echo "AutoMode, start za 10 sekund..."
sleep 10
if [ "$CF_NGINX_IP_LIST" ]
then
sudo rm $CF_NGINX_IP_LIST
fi
sudo cp $CF_TEMP_IP_LIST $CF_NGINX_IP_LIST
sudo service nginx reload
echo "OK"
else
echo "----- PLIK -----"
sudo cat $CF_TEMP_IP_LIST
echo "----- /PLIK -----"

read -p "[Enter] -> Podmiana pliku"

if [ "$CF_NGINX_IP_LIST" ]
then
sudo rm $CF_NGINX_IP_LIST
fi

sudo cp $CF_TEMP_IP_LIST $CF_NGINX_IP_LIST

read -p "[Enter] -> Test Nginx"
sudo nginx -t

echo "Nginx: jeśli OK - 1, jeśli błąd - 0"
read NGINX_RESTART
fi


if [ "$NGINX_RESTART" = "0" ]
then
echo "0: Wyjscie"
exit
fi

if [ "$NGINX_RESTART" = "1" ]
then
echo "1: restart za 10 sekund..."
sleep 10
sudo service nginx reload
fi

exit 0

Skrypt możecie skopiować z “listingu” powyżej, lub – chyba bezpieczniej – pobrać z tego adresu. Ew możecie pobrać do bezpośrednio na serwer za pomocą komendy:

wget //webinsider.pl/add/download/?link=nginx-cloudflare-autoscript -O /ścieżka/do/zapisania/nginx-cloudflare-autoscript

Skrypt możecie uruchamiać ręcznie „raz na jakiś czas”, lub np. za pomocą systemowego harmonogramu zadań (CRON) proces całkowicie zautomatyzować, dodając parametr „auto”, np. o 3 w nocy:

0 3 * * * root /usr/sbin/nginx-cloudflare-autoscript auto

 

Zgłoś błąd na stronie

Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!

WebInsider poleca księgowość wFirma
WebInsider korzysta z VPSa w HitMe.pl
WebInsider poleca VPSy DigitalOcean
WebInsider poleca serwis Vindicat
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które - w miarę możliwości - spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. "linki partnerskie", co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte... :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.

Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!