I ' m запускает сервер Debian с установленным Nginx, а также OpenResty. У меня есть домен, поддомен этого домена, и в будущем несколько доменов будут указывать на его IP-адрес с записями A.
Мне нужен сервер OpenResty для каждого домена или поддомена, работающего на разных портах, с маршрутизацией сервера Nginx запросы между серверами в зависимости от имени домена.
Итак, сейчас у меня есть:
domain1.com
и sub.domain1.com
, указывающие на IP domain1.com
обслуживается на порту 8000, sub.domain1
обслуживается на порту 8001 Я хочу:
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
}
}
}
Первое, что вам нужно сделать, это определить, какие запросы вы хотите, чтобы 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
.
Я считаю, что вам нужно настроить директиву прослушивания для каждого блока {} сервера виртуального хоста или домена имя, вы обслуживаете.
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.