У меня новая машина VPS, где:
Установите nginx на основном хосте для обслуживания моего веб-сайта домена (например, example.com) на портах 80 443. example.com conf на хосте nginx:
server {
server_name example.com www.example.com;
root /var/www/www.example.com;
listen 80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/certs/example.com_by_cloudflare.pem;
ssl_certificate_key /etc/ssl/private/example.com_by_cloudflare.key;
}
Установлен контейнерный почтовый сервер (Poste.io2 docker) для обслуживания писем @ exmaple.com. Имя хоста почтового сервера: mail.example.com. Он также использует nginx на портах 80, 443 для обслуживания портала веб-почты. (Poste.io2 устанавливается с помощью этой команды:
sudo docker run \
--net=host \
-e TZ=Etc/UTC \
-v /var/posteiodata:/data \
--name "posteiomailserver" \
-h "mail.example.com" \
-t analogic/poste.io
Проблема в том, что я хочу, чтобы работали и веб-сайт (example.com), и веб-почта (mail.example.com). Я не уверен, можно ли с этим справиться через DNS, nginx / обратный прокси на хосте / докере? или это невозможно, и я должен что-то изменить.
Буду признателен, если у вас есть совет.
P.S DNS под управлением Cloudflare, записи DNS выглядят так:
mail.example.com. 1 IN A <server_ip_address>
example.com. 1 IN A <server_ip_address>
www.example.com. 1 IN CNAME example.com.
example.com. 1 IN MX 0 mail.example.com.
Мне кажется, обратный прокси-сервер - лучший вариант. Он прослушивает 80 и 443 для обоих поддоменов и пересылает запрос на один из серверов. Оба сервера будут открывать другие порты, например, 8080, 8443 для веб-сервера и 9090, 9443 для почтового сервера.
Я решил проблему следующим образом:
sudo docker run \
--net=host \
-e TZ=UTC \
-e "HTTP_PORT=5080" \
-e "HTTPS_PORT=4433" \
-v /var/posteiodata:/data \
--name "posteiomailserver"
-h "mail.example.com" \
-t analogic/poste.io
sudo iptables -A INPUT -p tcp --dport 4433 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5080 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo service iptables save
sudo nano /etc/nginx/sites-available/mail.example.com
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mail.example.com;
ssl_certificate /etc/ssl/certs/example.com_by_cloudflare.pem;
ssl_certificate_key /etc/ssl/private/example.com_by_cloudflare.key;
location / {
proxy_pass https://127.0.0.1:4433;
}
}
sudo ln -s /etc/nginx/sites-available/mail.example.com.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo service nginx start
Теперь я могу просматривать свой сайт на example.com и электронную почту на mail.example.com, вуаля!