LINUX.ORG.RU
ФорумAdmin

Перенаправление запросов на сайт

 


0

2

Нужна помощь, друзья. В общем у меня есть 2 сервера в разных датацентрах с внешними статическими IP. На первом сервере поднят vpn на порту 1196. Можно ли сделать так чтобы, когда клиент захотел зайти на сайт twitter.com, его запрос перенаправлялся на второй сервер? И что нужно поднять или настроить на втором сервере, чтобы он принимал такие запросы. Пробовал делать с Nginx proxy_pass, но так и не разобрался. Буду очень благодарен))


Пробовал делать с Nginx proxy_pass, но так и не разобрался

А в чём тут разбираться?

location /some/path/ {
    proxy_pass http://127.0.0.1;
}

https://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass

На сервере с которого нужно делать перенаправление указываешь в конфигурации nginx:

server {
    listen 80;
    server_name domain.ru;

    root /var/www/html/domain.ru;

    location / {
      proxy_pass http://IP_адрес_второго_серсера/ ;
      try_files $uri $uri/ /index.html;

      # Если нужно чтобы второй сервер видел IP клиента;
      proxy_set_header        Host            $host;
      proxy_set_header        X-Real-IP       $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  
    }

    # Если нужно перенаправление на SSL (https)
    return 301 https://$host$request_uri;
}

IP_адрес_второго_серсера - лучше внутренний IP адрес, в твоём случае в VPN сети.

Если нужно перенаправление на SSL (https) то описываешь и вторую секцию:

server {
   listen 443;
   server_name domain.ru;

   root /var/www/html/domain.ru;

       location / {
         proxy_pass http://IP_адрес_второго_серсера/ ;
         try_files $uri $uri/ /index.html;
       }

    ssl_certificate /etc/letsencrypt/live/domain.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.ru/privkey.pem; # managed by Certbot

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;

    ssl_stapling on;
    ssl_stapling_verify on;
    #add_header Strict-Transport-Security max-age=15768000;

    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
}

Можно в одной секции server:

server {
    listen 80;
    server_name domain.ru;

    root /var/www/html/domain.ru;

    location / {
      proxy_pass http://IP_адрес_второго_серсера/ ;
      try_files $uri $uri/ /index.html;

      # Если нужно чтобы второй сервер видел IP клиента;
      proxy_set_header        Host            $host;
      proxy_set_header        X-Real-IP       $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  
    }

   listen 443 ssl;
   
   ssl_certificate /etc/letsencrypt/live/domain.ru/fullchain.pem; # managed by Certbot
   ssl_certificate_key /etc/letsencrypt/live/domain.ru/privkey.pem; # managed by Certbot

   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;

   ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
   ssl_session_timeout 1d;
   ssl_session_cache shared:SSL:50m;

   ssl_stapling on;
   ssl_stapling_verify on;

   if ($scheme != "https") {
       return 301 https://$host$request_uri;
   }
}
kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 3)

И что нужно поднять или настроить на втором сервере, чтобы он принимал такие запросы.

Ничего у тебя не получится, там https-сертификат и тебе его для twitter.com разумеется не дадут.

firkax ★★★★★
()

Можно, называется policy based routing.

Anoxemian ★★★★★
()

Можно ли сделать так чтобы, когда клиент захотел зайти на сайт twitter.com, его запрос перенаправлялся на второй сервер?

Про twitter.com не прочитал.

kostik87 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.