Могу ли я использовать nginx в качестве обратного прокси в этом конкретном случае? - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужно знать, возможно ли использовать Nginx в качестве обратного прокси-сервера для обслуживания нескольких веб-приложений, каждое из которых размещено на другом Raspberry Pi.

Как видно на диаграмме, все Raspberries будут подключены к неуправляемому коммутатору. Первый коммутатор, который я собираюсь установить, - nginx, чтобы он мог служить обратным прокси-сервером в зависимости от веб-сайта, запрошенного в Интернете.Например: wwww.site1.com, www.site2.www и т. Д.

Возможно ли это?Смогу ли я получить доступ к этим RPis с компьютера, подключенного к модему, а не к коммутатору?

Примечание. Модем - это модем Wi-Fi, а коммутатор - неуправляемый проводной коммутатор.

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

enter image description here

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Это conf nginx на стороне головного узла:

server {
  listen 80;
  server_name www.codingindfw.com codingindfw.com;
  location / { rewrite ^ https://$host$request_uri permanent;}
}

server{
  listen 443 ssl;
  server_name www.codingindfw.www codingindfw.com;

  client_max_body_size 4G;

  ssl_certificate /etc/letsencrypt/live/www.koohack.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.koohack.com/privkey.pem;

  ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers         HIGH:!aNULL:!MD5;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  location / {
    proxy_pass              http://192.168.0.8;
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-for $remote_addr;
    port_in_redirect        off;
    proxy_redirect          http://192.168.0.8/ /;
    }
}

А это файл conf nginx на клиенте, на котором запущено само приложение Django:

server {
    listen 80 default_server;
    server_name www.codingindfw.com;

    client_max_body_size 4G;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /home/pi/coding-in-dfw;
    }

    location /media/ {
        root  /home/pi/coding-in-dfw;
    }

    location / {
            include proxy_params;
            proxy_pass http://unix:/home/pi/coding-in-dfw/mysocket.sock;
    }
}
0 голосов
/ 14 декабря 2018

Я думаю, это возможно, но есть некоторые требования:

  • статический внешний IP назначен модему;

  • статический IP включенRPi;

  • правильные правила переадресации на модеме.

Я имею в виду, вам нужно переадресовывать все запросы, подобные следующим:

модем: 80 -> rp0: 80

модем: 443 -> rp0: 443

На портах rp0 может отличаться от 80 и 443, поэтому, пожалуйста, установите правильные правила и запомните это вКонфигурация nginx.

После этого настройте upstreams или используйте IP-адреса rp1-3 в конфигурациях веб-сайтов:

upstream rp1 {
    server 192.168.1.11:port;
}
upstream rp2 {
    server 192.168.1.12:port;
}
upstream rp3 {
    server 192.168.1.13:port;
}

Замените port на порт, который прослушивается на соответствующемRPi.Конфиги сайта будут выглядеть следующим образом:

server {
server_name site1.com www.site1.com ;
location / { proxy_pass http://rp1 ; }
}
server {
server_name site2.com www.site2.com ;
location / { proxy_pass http://rp2 ; }
}

Добавьте любые параметры, которые вам нужны.Кроме того, если вы собираетесь разместить несколько статических веб-сайтов, лучше всего разместить их на rp0.

EDIT 1 Пример рабочей конфигурации:

server {
listen 80;
server_name site1.com www.site1.com ;
location / { rewrite ^ https://$host$request_uri permanent;}
}

server {
listen              443 ssl;
server_name         site1.com www.site1.com;

ssl_certificate     /etc/letsencrypt/live/site1/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site1/key.pem;
ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         HIGH:!aNULL:!MD5;
location / {
    proxy_pass              http://rp1;
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-for $remote_addr;
    port_in_redirect        off;
    proxy_redirect          http://rp1/ /;
}

Пожалуйста, обратите внимание, если вы собираетесь использовать Letsencrypt, лучший способ - установить certbot (или что-то еще) на rp0.Проще будет автоматически обновлять сертификаты.Также используйте / etc / letsencrypt / live / site1 / fullchain.pem .Чтобы использовать несколько SSL-доменов, убедитесь, что установка nginx поддерживает SNI:

# nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...