Подмена сайта nginx
Подмена сайта nginx – на самом деле очень просто реализуемая фича. На данном примере, мы рассмотрим с вами на конкретном примере начиная с установки nginx и необходимых модулей к нему,а также для кучи рассмотрим конфиги nginx и php7 для wordpress. Будем подменять исходный сайт https://itc-life.ru на https://riderson.ru. Так же рассмотрим установку сертификата lets’s encrypt(ssl), настроим кэширование fastcgi и proxy pass cache. Итак приступим. Что мы имееем:
– выделенный vps на firstvsd всего за 240 рублей в месяц – норм цена.
– система debian 8;
– желание сделать все самому и не работать на тормознутых хостингах )).
Установка openresty(сборка nginx) и необходимых модулей
Я подготовил сборку и загрузил сюда. Вы можете все найти в интернете или скачать отсюда.Ставим пакеты для сборки
apt install libpq-dev checkinstall build-essential libpcre++-dev checkinstall gcc+ zip git -y
Скачиваем сборку и необходимые пакеты. Конфигурируем и устанавливаем.
#!/bin/bash CODENAME=`grep "VERSION=" /etc/os-release |awk -F= {' print $2'}|sed s/\"//g |sed s/[0-9]//g | sed s/\)$//g |sed s/\(//g` cd /tmp wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz tar -zxvf GeoIP.tar.gz cd GeoIP-1.4.8 ./configure make make install mkdir ~/src/ cd ~/src apt install libpq-dev checkinstall build-essential libpcre++-dev checkinstall gcc+ zip git -y wget https://nginx.ru/keys/nginx_signing.key apt-key add nginx_signing.key cat </etc/apt/sources.list.d/nginx.list deb http://nginx.org/packages/mainline/debian/ $CODENAME nginx deb-src http://nginx.org/packages/mainline/debian/ $CODENAME nginx OEF apt-get update #apt-get install nginx -y wget https://openresty.org/download/openresty-1.11.2.2.tar.gz tar -xvf openresty-1.11.2.2.tar.gz cd openresty-1.11.2.2 git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git wget https://github.com/pagespeed/ngx_pagespeed/archive/latest-stable.tar.gz tar -xvf latest-stable.tar.gz git clone https://github.com/openssl/openssl.git cd openssl git checkout OpenSSL_1_0_2h cd .. cd ngx_pagespeed-latest-stable/ wget https://dl.google.com/dl/page-speed/psol/1.11.33.4.tar.gz tar -xzvf 1.11.33.4.tar.gz cd .. ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=www-data --group=www-data --with-cc-opt="-I/usr/local/include" --with-ld-opt="-L/usr/local/lib" --with-pcre-jit --with-ipv6 --with-http_gunzip_module --with-http_gzip_static_module --with-threads --with-http_v2_module --add-module=ngx_pagespeed-latest-stable --with-http_ssl_module --with-file-aio --with-http_realip_module --with-openssl=openssl --add-module=ngx_http_substitutions_filter_module --with-http_geoip_module && make -j4 && make install mkdir /etc/nginx/GeoIp/ /usr/bin/curl http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz | gzip -d - > /etc/nginx/GeoIp/GeoIP.dat
Мы подразумеваем что у вас есть уже настроенный основной сайт на wordpress, например itc-life.ru, и нам необходимо, только создать конфиг для прокси сайта с подменой.
Сначала добавим поддержку nginx_page_speed
nano /etc/nginx/nginx.conf
user www-data; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; worker_rlimit_nofile 65535; events { worker_connections 1024; } http { server_names_hash_bucket_size 128; include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; pagespeed on; pagespeed FileCachePath "/nginxpagespeed"; pagespeed EnableFilters combine_css,combine_javascript,rewrite_images,rewrite_css,rewrite_javascript,inline_images,recompress_jpeg,recompress_png,resize_images; pagespeed JpegRecompressionQuality 85; pagespeed ImageRecompressionQuality 85; pagespeed ImageInlineMaxBytes 2048; pagespeed LowercaseHtmlNames on; access_log /var/log/nginx/access.log main; resolver 8.8.8.8 8.8.4.4; sendfile on; #tcp_nopush on; proxy_headers_hash_max_size 1024; proxy_headers_hash_bucket_size 256; keepalive_timeout 65; fastcgi_ignore_client_abort on; gzip on; include /etc/nginx/conf.d/*.conf; }Создадим каталог для pagespeedmkdir -p /nginxpagespeedОтредактируем fstab и положим его в оперативу
nano /etc/fstabtmpfs /nginxpagespeed tmpfs uid=www-data,gid=www-data,mode=777,size=2G,noatime 0 0mount /nginxpagespeedТеперь правим конфиг сайта
nano /etc/nginx/conf.d/riderson.ru.confupstream itc-life { server itc-life.ru; } server { listen 80; server_name riderson.ru www.riderson.ru ; access_log /var/log/nginx/6pm.access.log; error_log /var/log/nginx/6pm.error.log; rewrite ^/(.*)$ https://riderson.ru/$1 permanent; } server { listen 443 ssl http2; server_name riderson.ru www.riderson.ru ; ssl_stapling on; ssl on; ssl_certificate /etc/letsencrypt/live/riderson.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/riderson.ru/privkey.pem; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 24h; ssl_session_cache shared:SSL:2m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000;"; add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report"; access_log /var/log/nginx/riderson.ru.access.log; error_log /var/log/nginx/riderson.ru.error.log; location / { root /var/www/riderson; try_files $uri @static; } location @static { proxy_cache cache; proxy_cache_valid 10m; proxy_cache_valid 404 1m; ###Фильтры для замены значений subs_filter 'UA-68656776-1' 'UA-68656776-2' gi; subs_filter "'.itc-life.ru']," "'riderson.ru']," gi; subs_filter "www.itc-life.ru" "riderson.ru" gi; subs_filter "itc-life.ru" "riderson.ru" gi; subs_filter "32958824" "43731964" gi; proxy_cookie_domain itc-life.ru riderson.ru; proxy_set_header Accept-Encoding ""; proxy_set_header Host itc-life.ru; proxy_pass https://itc-life.ru; proxy_redirect https://itc-life.ru https://riderson.ru; } }Готово. Обратите внимание на subs_filter - замена с сайта донора на значений на новом сайте зеркале, т.е. мы подменили счетчики, доменные имена - и еще большой простор для деятельности.
Блокируем страны через geoip в nginx - ограничение доступа.
В /etc/nginx/nginx.conf
####Белый список серых сетей )) geo $lanip { default no; 192.168.1.0/24 yes; 10.0.0.0/24 yes; 0.0.0.0/8 yes; 10.0.0.0/8 yes; 10.1.9.0/24 yes; 100.64.0.0/10 yes; 127.0.0.0/8 yes; 169.254.0.0/16 yes; 172.16.0.0/12 yes; 192.0.0.0/24 yes; 192.0.0.0/29 yes; 192.0.0.8/32 yes; 192.0.0.170/32 yes; 192.0.0.171/32 yes; 192.0.2.0/24 yes; 192.31.196.0/24 yes; 192.52.193.0/24 yes; 192.88.99.0/24 yes; 192.168.0.0/16 yes; 192.175.48.0/24 yes; 198.18.0.0/15 yes; 198.51.100.0/24 yes; 203.0.113.0/24 yes; 240.0.0.0/4 yes; } ###Белый список стран map $geoip_country_code $allowed_country { default no; RU yes; UA yes; BY yes; LV yes; KZ yes; }В конфиге сайта
###Блокируем доступ по ip if ($lanip = yes) { set $allowed_country yes; } if ($allowed_country = no) { return 401; }Nginx init.d script
#!/bin/sh # # chkconfig: 2345 55 25 # Description: Nginx init.d script, put in /etc/init.d, chmod +x /etc/init.d/nginx # For Debian, run: update-rc.d -f nginx defaults # For CentOS, run: chkconfig --add nginx # ### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: nginx init.d script # Description: OpenResty (aka. ngx_openresty) is a full-fledged web application server by bundling the standard Nginx core, lots of 3rd-party Nginx modules, as well as most of their external dependencies. ### END INIT INFO # PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin/ if [ -L $0 ]; then SCRIPTNAME=`/bin/readlink -f $0` else SCRIPTNAME=$0 fi sysconfig=`/usr/bin/basename $SCRIPTNAME` [ -r /etc/default/$sysconfig ] && . /etc/default/$sysconfig DESC=${DESC-nginx} NAME=${NAME-nginx} CONFFILE=/etc/nginx/nginx.conf DAEMON=/usr/sbin/nginx PIDFILE=/var/run/nginx.pid SLEEPSEC=1 UPGRADEWAITLOOPS=5 CHECKSLEEP=${CHECKSLEEP-3} #status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $? [ -x $DAEMON ] || exit 0 DAEMON_ARGS="-c $CONFFILE $DAEMON_ARGS" . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS RETVAL="$?" return "$RETVAL" } do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --oknodo --retry=TERM/30/KILL/5 --pidfile $PIDFILE RETVAL="$?" rm -f $PIDFILE return "$RETVAL" } do_reload() { # start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE RETVAL="$?" return "$RETVAL" } do_configtest() { if [ "$#" -ne 0 ]; then case "$1" in -q) FLAG=$1 ;; *) ;; esac shift fi $DAEMON -t $FLAG -c $CONFFILE RETVAL="$?" return $RETVAL } do_upgrade() { OLDBINPIDFILE=$PIDFILE.oldbin do_configtest -q || return 6 start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE RETVAL="$?" for i in `/usr/bin/seq $UPGRADEWAITLOOPS`; do sleep $SLEEPSEC if [ -f $OLDBINPIDFILE -a -f $PIDFILE ]; then start-stop-daemon --stop --signal QUIT --quiet --pidfile $OLDBINPIDFILE RETVAL="$?" return fi done echo $"Upgrade failed!" RETVAL=1 return $RETVAL } do_checkreload() { templog=`/bin/mktemp --tmpdir nginx-check-reload-XXXXXX.log` trap '/bin/rm -f $templog' 0 /usr/bin/tail --pid=$$ -n 0 --follow=name /var/log/nginx/error.log > $templog & /bin/sleep 1 start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE /bin/sleep $CHECKSLEEP /bin/grep -E "\[emerg\]|\[alert\]" $templog } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $? ;; configtest) do_configtest ;; upgrade) do_upgrade ;; reload|force-reload) log_daemon_msg "Reloading $DESC" "$NAME" do_reload log_end_msg $? ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_configtest -q || exit $RETVAL do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; check-reload) do_checkreload RETVAL=0 ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload|upgrade|configtest|check-reload}" >&2 exit 3 ;; esac exit $RETVALДелаем исполняемым
chmod +X /etc/init.d/nginxРазрешаем
systemctl unmask nginxЗапускаем
/etc/init.d/nginx start