Рейтинг:0

1 шлюз 2 машины 2 домена 3 поддомена, как

флаг ug

У меня была рабочая конфигурация в nginx только для одного из моих веб-сайтов, но я сломал ее, когда попытался заставить ее работать с двумя разными доменами, один из которых имеет 2 поддомена, и все они обслуживали разные сайты или приложения. Чтобы усложнить мне задачу, домен, на котором запущено 2 приложения, находится на отдельной машине, и я пытаюсь передать прокси-запросы для этого домена на правильную машину в моей локальной сети. Смотри ниже:

Моя архитектура

Моя конфигурация NGINX — это катастрофа, но она выглядит следующим образом:

сервер {
    слушать 80 default_server;
    слушать [::]:80 default_server;

    корень /home/pi/sites/main;

    # Добавьте index.php в список, если вы используете PHP
    индекс index.html index.htm index.nginx-debian.html domain1_index.html;

    имя сервера _;

    место расположения / {
        # Сначала пытаемся обслужить запрос как файл, затем
        # в качестве каталога, затем вернуться к отображению 404.
        try_files $uri $uri/ =404;
    }
}

сервер {

    корень /home/pi/sites/main;

    индекс index.html index.htm index.nginx-debian.html;
    имя_сервера внутренний.домен1.info; # под управлением Certbot


    место расположения / {
        # Сначала пытаемся обслужить запрос как файл, затем
        # в качестве каталога, затем вернуться к отображению 404.
        try_files $uri $uri/ =404;
    }


    слушать [::]:443 ssl ipv6only=on; # под управлением Certbot
    слушать 443 ssl; # под управлением Certbot
    ssl_certificate /etc/letsencrypt/live/internal.domain1.info/fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/live/internal.domain1.info/privkey.pem; # под управлением Certbot
    включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot



}
сервер {
    если ($ host = internal.domain1.info) {
        вернуть 301 https://$host$request_uri;
    } # управляется Certbot


    слушать 80 ;
    слушать [::]:80 ;
    имя_сервера внутренний.домен1.info;
    вернуть 404; # под управлением Certbot


}

сервер {
  имя_сервера shiba.com www.shiba.com шепот.shiba.com;
  место расположения / {
    proxy_pass http://<IP-адрес машины2>:8888;
  }
}

сервер {
  имя_сервера yelling.shiba.com;
  место расположения / {
    proxy_pass http://<IP-адрес машины2>:8555;
  }
}

Как я могу заставить это обслуживать веб-сайты, указанные на моей картинке? Спасибо.

Изменить: предложенная мной новая конфигурация

|доступные сайты | символическая ссылка --> | сайты с поддержкой
   конф1 | | конф1
# https сайт
сервер {
    корень /home/pi/sites/main;

    индекс index.html index.htm index.nginx-debian.html;
    
    место расположения / {
        # Сначала пытаемся обслужить запрос как файл, затем
        # в качестве каталога, затем вернуться к отображению 404.
        try_files $uri $uri/ =404;
    }

    слушать [::]:443 ssl ipv6only=on; # под управлением Certbot
    слушать 443 ssl; # под управлением Certbot
    ssl_certificate /etc/letsencrypt/live/internal.domain1.info/fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/live/internal.domain1.info/privkey.pem; # под управлением Certbot
    включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}
#http перенаправление веб-сайта
сервер {
    если ($ host = internal.domain1.info) {
        вернуть 301 https://$host$request_uri;
    } # управляется Certbot

    слушать 80 ;
    слушать [::]:80 ;
    имя_сервера внутренний.домен1.info;
    вернуть 404; # под управлением Certbot
}
|доступные сайты | символическая ссылка --> | сайты с поддержкой
   конф2 | | конф2
сервер {
    слушать 80 ;
    слушать [::]:80 ;
    имя_сервера шепот.shiba.info;

    вернуть 301 http://xxx.xxx.x.xx:8555;
}
|доступные сайты | символическая ссылка --> | сайты с поддержкой
   конф3 | | конф3
сервер {
    слушать 80 ;
    слушать [::]:80 ;
    имя_сервера yelling.shiba.info;

    вернуть 301 http://xxx.xxx.x.xx:8888;
}
drookie avatar
флаг za
Вы используете общий `сервер{}` по умолчанию вместе с `сервером {}`, у которого нет `listen`. Наверное, поэтому ничего не работает должным образом. И да, отчасти причина в том, что у вас беспорядок в конфигурации. Похоже, вы ненавидите UNIX и nginx в частности. Все выглядит таким временным и демишным.
WhisperingShiba avatar
флаг ug
@drookie Это демо, это мой первый конфиг в моем первом проекте. Я хотел взломать свой существующий конфиг, но я явно недостаточно знаю. Вы предлагаете мне сделать отдельные конфиги в доступных сайтах и ​​включить символические ссылки на сайты, или мне нужно иметь один конфиг с 3 серверами для всей моей архитектуры или 1 конфиг, 1 сервер и 3 локации? Мне трудно даже найти предпочтительный метод настройки такой системы.
Nikita Kipriyanov avatar
флаг za
Каждый сервер (vitualhost) должен быть помещен в свой собственный файл конфигурации. Никогда не обслуживайте целевые сайты с сервером по умолчанию; его следует использовать только в качестве заполнителя для обнаружения неправильной конфигурации. Не так важно, если вы поместите файлы в список доступных сайтов, а затем создадите на них символическую ссылку, но это предпочтительный метод, поскольку он снижает вероятность случайного удаления конфигурации.
WhisperingShiba avatar
флаг ug
@NikitaKipriyanov Я отредактировал свой вопрос с предложенными мной конфигурациями. Моя интуиция такова, что это не сработает, так как я прослушиваю порт 80 3 раза, и, следовательно, nginx даже не запустится. Кроме того, я не уверен, что простое утверждение имени сервера будет направлять запросы для yelling.shiba.info на xxx.xxx.x.xx:8555. Нужно ли мне делать if ($host == yelling.shiba.info> {return 301 http://xxx.xxx.x.xx:PORT }, как показано в моем примере? Спасибо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.