Как маршрутизировать запросы между серверами Nginx на одном IP-адресе на основе имени домена?

I ' m запускает сервер Debian с установленным Nginx, а также OpenResty. У меня есть домен, поддомен этого домена, и в будущем несколько доменов будут указывать на его IP-адрес с записями A.

Мне нужен сервер OpenResty для каждого домена или поддомена, работающего на разных портах, с маршрутизацией сервера Nginx запросы между серверами в зависимости от имени домена.

Итак, сейчас у меня есть:

  • domain1.com и sub.domain1.com , указывающие на IP
  • Nginx, работающий на порт 80 и запросы маршрутизации (изменения конфигурации, которые я сделал, объяснены ниже)
  • domain1.com обслуживается на порту 8000, sub.domain1 обслуживается на порту 8001

Я хочу:

  • Nginx покажет пользователю, что он обращается к sub.domain1.com или domain1.com . Нет domain1.com: 8000 или sub.domain1.com:8001
  • В будущем, когда у меня будет domain2.com , указывающий на IP, и сервер, работающий на порту 8002, он также появится пользователю как domain2.com вместо domain2.com:8002 и так далее

. Я пробовал использовать proxy_pass , proxy_set_header , proxy_redirect , в различных конфигурациях, предложенных поиском в Google. Однажды мне удалось заставить работать proxy_pass, но он показал порт пользователю. Вся причина, по которой я пытаюсь настроить это таким образом, состоит в том, что он не работает на нескольких портах для пользователя.

Кроме того, я использую SSL и хочу, чтобы HTTP-запросы перенаправлялись на HTTPS. #include / etc / nginx / sites-enabled / *;

  • Добавлен сертификат для domain1.com в блок http {} :

     ssl_certificate /path/to/public.pem;
    ssl_certificate_key /path/to/private.pem;
    
  • Определил следующее для моего прокси:

     server {
     слушайте 443 ssl;
     ssl включен;
     имя_сервера dev.domain1.com;
     расположение / {
     proxy_pass https://sub.domain1.com:8001;
     }
    }
    
    server {
     слушать 80;
     имя_сервера sub.domain1.com;
     return 301 https: // $ host $ request_uri;
    }
    
  • Этот работал отлично, но затем я попробовал те же блоки сервера {} для самого домена, , что работал нормально и это сломался.

    Что, черт возьми, я делаю?

    Дополнительные примечания:

    Проксируемые серверы по существу:

    http {
        ssl_certificate /path/to/public.pem;
        ssl_certificate_ley /path/to/private.pem;
    
        include mime.types;
    
        server {
            listen port ssl;
            ssl on;
            error_page 497 https://$host:$server_port$request_uri;
    
            location / {
                #whatever
            }
        }
    }
    
    0
    задан 2 March 2016 в 19:03
    2 ответа

    Первое, что вам нужно сделать, это определить, какие запросы вы хотите, чтобы nginx слушал, что вы делаете с имя_сервера , а также определите, какой порт вы хотите слушать, используя слушайте .

    Судя по тому, что вы сказали, вы просто хотите, чтобы люди вводили domain1.com в свой браузер, а затем контент, который будет обслуживаться. Если это так, это произойдет, когда Nginx будет прослушивать запросы на порту 80 и передавать их в OpenResty на порту 8000/8001 / 800x.

    Однако это очень простые конфигурации, которые делают именно это, но вам могут потребоваться дополнительные настройки. Просмотрите документы здесь и здесь , чтобы получить полный список, включая дополнительные настройки ssl

    server { 
    listen          80;
    server_name     domain1.com;
    
    location / {
      proxy_pass      http://127.0.0.1:8000;
        }
    }  
    
    server { 
    listen          80;
    server_name     domain2.com;
    
    location / {
      proxy_pass      http://127.0.0.1:8001;
        }
    }
    

    Лично я предпочитаю управлять / организовывать сайты с помощью / etc / nginx / sites- enabled / , но «можно» поместить это в nginx.con внутри блока http.

    В противном случае вы бы добавили обратно удаленные строки, разделили эти конфигурации на два файла, а затем поместили эти файлы в / etc / nginx / sites-available и символическую ссылку на / etc / nginx Папка / sites-enabled .

    2
    ответ дан 4 December 2019 в 13:42

    Я считаю, что вам нужно настроить директиву прослушивания для каждого блока {} сервера виртуального хоста или домена имя, вы обслуживаете.

    http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

    server {
        listen domain1.com:8000;
        ...
    }
    server {
        listen domain2.com:8001;
        ...
    }    
    

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

    Если вы если у вас установлен Nginx по умолчанию, вам, вероятно, потребуется закомментировать любые директивы прослушивания, которые могут быть загружены в файлы conf, и перезапустить nginx.

    0
    ответ дан 4 December 2019 в 13:42

    Теги

    Похожие вопросы