Несколько серверов с одного хоста, фильтрация по доменам и поддоменам и трансляция портов -NGINX

1200
DevelopedLogic

Я совершенно новичок в NGINX, никогда даже не трогал его, однако я нахожусь в небольшой ситуации, когда поиск в Интернете указывает на необходимость его использования.

Моя ситуация такова:

У меня есть 1 сервер (Windows Server), и я хочу запустить два FTP-сервера и два веб-сервера. Теперь я знаю, что не могу разместить два приложения на одном и том же порту (скажем, порт 80 для обоих веб-серверов и т. Д.), И поэтому мне придется размещать их на разных портах.

Для этой ситуации, скажем, у меня есть два поддоменов one.example.comи two.example.com. Оба из этих поддоменов указывают на IP-адрес моего сервера 1.2.3.4. В любой нормальной ситуации доступ к любому веб-серверу и любому FTP-серверу через любой поддомен будет возможен на разных назначенных мной портах. Это не то, что я хочу.

Я хотел бы иметь один FTP-сервер и один веб-сервер на одном поддомене, а также на портах 21 и 80, и другой FTP-сервер и веб-сервер на другом поддомене, и снова на портах 21 и 80.

Насколько я могу судить, мне нужно сделать так, чтобы вы могли получить доступ только к определенным вещам (фильтрующим) в определенных поддоменах, а порты этих вещей (21 и 80) транслировались в другие порты на сервере (как вы можете '). два приложения находятся на одном порту).

Если бы я мог, я хотел бы запустить NGINX на сервере Windows, но если нет, то мне действительно нужно, чтобы он работал на чем-то маленьком, например, на Raspberry Pi, даже если для этого мой Pi должен быть шлюзом между Интернетом и моей сетью.

РЕДАКТИРОВАТЬ: для меня важно отметить, что я собираюсь запустить на этом сервере больше, чем просто FTP и HTTP, поэтому трансляция портов и фильтрация домена должны работать на любом приложении сокетов, а не только на FTP, HTTP и т. Д. Если NGINX не является решением, любое другое рабочее решение в порядке.

0
Хотя вы можете использовать обратный прокси-сервер перед вашим сервером для http, чтобы направлять определенные URL-адреса на конкретные IP-адреса и порты, вы НЕ сможете ничего сделать с FTP. FTP не имеет заголовков узлов, как HTTP. Appleoddity 6 лет назад 0
@Appleoddity Намерение здесь состоит в том, чтобы получить «тупую» смену порта. Любая информация, которая поступает на поддомен для порта 21, будет статически отправляться на другой порт на сервере, независимо от того, что отправляется и принимается. DevelopedLogic 6 лет назад 0
Вы говорите об обратных прокси или просто виртуальных хостах? Journeyman Geek 6 лет назад 0
Здесь ничего не виртуализировано, поэтому я предполагаю, что прокси @JourneymanGeek DevelopedLogic 6 лет назад 0
нет нет. Виртуальный хост в основном "Если хост A, сделайте X, если хост B, сделайте Y" Journeyman Geek 6 лет назад 0
Звучит правильно, вне контекста @JourneymanGeek DevelopedLogic 6 лет назад 0

1 ответ на вопрос

0
Journeyman Geek

ngnix намного проще в Linux - по крайней мере, документировано. У меня такое чувство, что мы должны начать с самого начала. Обычно ngnix работает «из коробки», хотя вам нужно отдельно настроить такие вещи, как php - нет эквивалента мод-прокси.

В любом современном HTTP-сервере есть немного виртуальных хостов. в ngnix вы можете настроить их как отдельный файл или как отдельные файлы. Этот тип не будет работать на FTP - но есть обходные пути. ( Ngnix называет это серверными блоками, но такая же разница ).

Просто создайте отдельные учетные записи в ftp с разными именами пользователей, паролями и каталогами rood.

Virtualhosts работает только по протоколам http и https и в основном представляет собой способ направления трафика в разных доменах на разные маршруты, позволяя запускать несколько служб в разных корневых каталогах на основе имени хоста. Например, вы можете запустить два экземпляра WordPress на одном сервере с в основном отдельными файлами.

Я ленивый - у меня есть один файл конфигурации на домен. Если вы используете это в Windows - посмотрите соответствующую документацию для деталей.

Вы захотите найти, где находятся файлы конфигурации для каждого сайта - мои находятся в / etc / ngnix / sites-available, и они связаны с сайтами с поддержкой. это может на основе платформы

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

Вы можете отредактировать это (я не рекомендую это) или создать файл конфигурации для каждого сайта в той же папке. Это пример того, который я использую. Это отменяет значения по умолчанию

server { listen 80; listen [::]:80;   root /var/www/html/new;  # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html index.php;  server_name new.example.com;  location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }  # pass the PHP scripts to FastCGI server via unix socks # location ~ \.php$ { include snippets/fastcgi-php.conf;  fastcgi_pass unix:/run/php/php7.0-fpm.sock; }  # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } 

Итак, более или менее, я говорю ему слушать порт 80 на ipv4 и 6, сообщать ему имя хоста для прослушивания и некоторые другие вещи, связанные с php.

Если я изменю root и меняю new.example.com на new2.example.com и меняю root, он будет отправлять любые запросы на new2.example.com к содержимому в новом root. Например, вы можете запустить 2 копии WordPress на одном сервере с разными доменами. Я создаю один из них с соответствующими server_name и root для домена в сайтах с поддержкой, символическую ссылку на них с сайтами (может работать по-разному в Windows) и перезагружаю мою конфигурацию nginix.

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

server { listen 80; listen [::]:80; server_name matrix.example.com;    location /_matrix { proxy_pass http://localhost:8008; proxy_set_header X-Forwarded-For $remote_addr; }  } 

Рассмотрим этот конфигурационный файл - я не уверен, что он действительно будет работать (я использую версию с поддержкой HTTPS), но для этого нужны документы . Он будет прослушивать порт 80 для домена matrix.example.com.

ОП спросил, как запустить несколько экземпляров на разных портах. Вы предлагаете это в качестве альтернативного метода? Appleoddity 6 лет назад 0
Ага! И попытался объяснить, что делает каждая вещь. Journeyman Geek 6 лет назад 0
@JourneymanGeek Это именно то, чего я хочу с точки зрения веб-сервера, но я намеревался использовать FTP для замены любого другого приложения. Например, я также могу запускать несколько игровых серверов, telnet / SSH-серверов и т. Д., И поэтому хочу сделать так, чтобы к определенным поддоменам можно было получить доступ только к определенным серверным приложениям, а к этим поддоменам - к определенным портам. Я не просто смотрю на приложения, основанные на HTTP. DevelopedLogic 6 лет назад 0
Это становится сложно быстро. * Сервер * должен знать имена хостов, чтобы это работало. https://serverfault.com/questions/255055/dynamic-port-forwarding-based-on-hostname-or-originating-ip - это то, к чему я обращаюсь, но записи srv могут работать не во всех случаях. HTTP построен * для * того, что вы хотите, так что он работает. Другие протоколы могут или не могут. Journeyman Geek 6 лет назад 0
@journeymanGeek SRV-записи, по-видимому, должны прослушиваться подключающимся клиентом. Что мне действительно нужно, так это какая-то система фильтрации по типу брандмауэра, но немного похожая на NAT, которая переводит запрошенный порт на запрашиваемом поддомене в приложение на одной машине и блокирует запросы, если доступ к порту не разрешен. на поддомене. DevelopedLogic 6 лет назад 0
Ах, я думаю, что я пытаюсь подчеркнуть, что протокол / приложение должны знать об этом. по большей части нет «произвольного» способа сделать это. Journeyman Geek 6 лет назад 0
@JourneymanGeek Похоже, что мне нужно сделать невозможно в этом случае ... DevelopedLogic 6 лет назад 0