Задача
Есть два сервера: «Сервер 1» и «Сервер 2».1 Оба сервера работают под управлением Debian 12.
«Сервер 1» и «Сервер 2» связаны с помощью VPN Wireguard.
«Сервер 1» доступен только в локальной сети, на нем вертится сайт на Apache2 с доменным именем mysite.ru, прописанным в конфиге. IP-адрес в сети VPN — 10.0.0.2.
«Сервер 2» доступен из Интернета, с белым IP-адресом. На него ведет доменное имя mysite.ru. IP-адрес в сети VPN — 10.0.0.1.
Нужно настроить на «Сервер 1» шифрование трафика и сделать сайт доступным из Интернета. Также, сделать переадресацию пользователей на зашифрованное соединение.
Сервер 2
Для решения задачи на «Сервер 2» ставим nginx.
root@server2:/# apt-get install nginx
Создаем файл конфигурации для nginx.
root@server2:/# nano /etc/nginx/sites-available/00-mysite.ru
server {
server_name mysite.ru;
listen 80;
location / {
proxy_pass http://10.0.0.2:80;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
server_name mysite.ru;
listen 443;
location / {
proxy_pass https://10.0.0.2:443;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Перезагружаем nginx.
root@server2:/# systemctl restart nginx.service
В результате, все запросы к mysite.ru по http и https (80 и 443 порты) будут по VPN переданы на «Сервер 1». Если открыть сайт http://mysite.ru, то он уже будет работать. Теперь надо настроить шифрование соединения пользователя с сайтом.
Сервер 1
Приведу пример конфига apache2 сайта mysite.ru:
root@server1:/# cat /etc/apache2/sites-available/mysite.ru.conf
<VirtualHost *:80>
ServerName mysite.ru
DocumentRoot /srv/www/mysite.ru
<Directory /srv/www/mysite.ru>
Options FollowSymLinks
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Require all granted
</Directory>
</VirtualHost>
На «Сервер 1» ставим скрипт certbot для получения бесплатного сертификата от Let’s Encrypt.
root@server1:/# apt-get install certbot python3-certbot-apache
Запускаем certbot и следуем его инструкциям.
root@server1:/# certbot
В процессе работы certbot будет выдан сертификат для сайта mysite.ru, проверена доступность этого сайта и изменен конфиг apache2 для переадресации с http на https.
Задача решена
Сайт, доступный только в локальной сети, теперь доступен и из Интернета по шифрованному соединению. При этом, осуществляется редирект с http на https.
- К примеру, домашний сервер как «Сервер 1» и дешевый арендованный VDS с минимальной памятью как «Сервер 2» ↩︎