Как получить доступ к веб-сайту, работающему локально, с помощью пользовательского домена и SSL на мобильном телефоне?
У меня есть блог WordPress (WP), работающий локально на моей машине (OSX). Настройка URL-адреса сайта WP установлена на https://abc.dev
и я могу получить доступ к сайту без проблем в браузере моей машины.
Визуально это выглядит так:
Сайт WP работает через порт 443, и я использую самоподписанный сертификат, чтобы он работал. Я получил самоподписанный сертификат с этого сайта. Я импортировал самоподписанный сертификат в OSX Keychain Access и отметил его Always Trust
,
Вот так выглядит мой файл docker-compose.yml для этого WP:
version: '2'
services:
wordpress:
build: .
ports:
- 8080:80
volumes:
- ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./wp-app:/var/www/html # Full wordpress project
#- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Plugin development
#- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Theme development
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
depends_on:
- db
networks:
- wordpress-network
db:
image: mysql:latest
ports:
- 127.0.0.1:3306:3306
command: [
'--default_authentication_plugin=mysql_native_password',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
volumes:
- ./wp-data:/docker-entrypoint-initdb.d
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: password
networks:
- wordpress-network
caddy:
image: abiosoft/caddy
restart: always
ports:
- "80:80"
- "443:443"
links:
- wordpress
volumes:
- "./Caddyfile:/etc/Caddyfile"
- "./caddy:/var/caddy"
networks:
- wordpress-network
networks:
wordpress-network:
driver: bridge
И это Caddyfile:
abc.dev:443
root /var/www/html
tls /var/caddy/cert.pem /var/caddy/key.pem
proxy / wordpress {
transparent
}
log stdout
errors stderr
Древовидная структура выглядит так:
├── Caddyfile
├── caddy
│ ├── cert.pem
│ └── key.pem
└── docker-compose.yml
Открытые порты Docker Compose:
$ lsof -PiTCP -sTCP:LISTEN | grep com.dock
com.docke 497 zz 18u IPv4 0xc97e1c7b362c847b 0t0 TCP localhost:3306 (LISTEN)
com.docke 497 zz 23u IPv6 0xc97e1c7b3aa15d0b 0t0 TCP localhost:3306 (LISTEN)
com.docke 497 zz 24u IPv4 0xc97e1c7b50618b83 0t0 TCP *:8080 (LISTEN)
com.docke 497 zz 25u IPv6 0xc97e1c7b3aa1624b 0t0 TCP localhost:8080 (LISTEN)
com.docke 497 zz 27u IPv4 0xc97e1c7b39e63b83 0t0 TCP *:443 (LISTEN)
com.docke 497 zz 28u IPv4 0xc97e1c7b5061b85b 0t0 TCP *:80 (LISTEN)
Основная причина, почему я открываю wordpress
порт в 8080
потому что хотел Кэдди 80
а также 443
порты должны быть открыты. Таким образом, это помогло мне решить проблему конфликтов портов.
Моя проблема сейчас, я хочу получить доступ к сайту WP на моем телефоне, и я хочу, чтобы URL был https://abc.dev
как и в телефоне.
Последние несколько дней я возился с прокси Squid и Mitmproxy и не нашел удачи.
Некоторые из вещей, которые я пробовал в общем:
- Настройте прокси с помощью SquidMan
- Настройка Mitmproxy работает
reverse
Режим - Настройка Mitmproxy работает
upstream
Режим - Установите и доверяйте сертификату Mitmproxy в моем телефоне
- Установите виртуальную машину Ubuntu 18 Server на моем компьютере (OSX) с помощью VirtualBox, установите Mitmproxy, запустите Mitmproxy, настройте хост (OSX) и телефон, чтобы использовать этот сервер Ubuntu 18 в качестве прокси
Все вышеперечисленные шаги не сработали для меня, и я не знаю, как заставить эту настройку работать на меня.
Я не хочу менять настройки URL сайта WP на другой URL, т.е. http://localhost[:port]
или же https://localhost[:port]
потому что он отлично работает на моей машине.
Кроме того, я хочу, чтобы мои настройки выглядели и вели себя так же близко, как и мой производственный веб-сайт, который работает с той же структурой URL, https://example.com
,
Я нашел CharlesProxy, но мне это не нравится, потому что это платное программное обеспечение. Я уверен, что Squid, Mitmproxy и некоторые другие инструменты могут помочь мне в этом. Я просто не уверен, как это сделать.
Действительно ценю за любую помощь и указатели.
1 ответ
Ответ
Сначала убедитесь, что ваша проблема только в DNS. Вы должны иметь возможность подключаться к веб-сайту со своего телефона по IP- адресу вашего компьютера http: // COMPUTER_IP. Если вы не можете загрузить веб-сайт, проверьте брандмауэр.
Ваш локальный компьютер знает abc.dev
и разрешите его локальному хосту.
Но это не относится к чужим хостам в домашней сети. Другой Windows/Mac/Linux нужно только добавить запись домена в файл hosts. В Linux это может выглядеть так
/ и т.д. / хосты
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
COMPUTER_IP abc.dev
Но для телефонов нелегко управлять пользовательскими записями DNS из соображений безопасности.
Одно из возможных решений - использовать существующий DNS-сервер дома:
Если ваш домашний маршрутизатор может добавлять статические записи DNS. Добавьте настраиваемую запись DNS в домашнем маршрутизаторе, чтобы указать abc.dev
на IP-адрес домашней сети вашего компьютера.
Второе возможное решение - использовать онлайн-сервис DNS:
Этот не использует abc.dev
Но что-то, что предлагает онлайн-сервисы, например на https://www.noip.com/ вы можете зарегистрировать что-то вроде abc1234.ddns.net
, затем установите COMPUTER_IP в качестве IP для этого домена. В caddy
вы используете тот же домен abc1234.ddns.net
,
Таким образом, ваш телефон спросит noip
для IP abc1234.ddns.net
он отвечает на ваш COMPUTER_IP и браузер подключается к вашему компьютеру.
Третье возможное решение:
- Разверните свой DNS-сервер с помощью docker-compose вместе с WordPress.
- Настройте свой COMPUTER_IP в качестве DNS-сервера в своем телефоне.
Чтобы попробовать это, добавьте эти файлы в ваш проект docker-compose.
dnsmasq/dnsmasq.conf - это рабочий файл конфигурации, но вам нужно изменить последнюю строку:
address=/abc.dev/COMPUTER_IP
Укажите IP-адрес вашего компьютера вместо COMPUTER_IP.
структура каталогов с вашим docker-compose.yml
:
docker-compose.yml
dnsmasq/dockerfile
dnsmasq/dnsmasq.conf
... other files
ваш докер-compose.yml
version: '2'
services:
wordpress:
...
db:
...
caddy:
...
dnsmasq:
build:
context: .
dockerfile: ./dnsmasq/dockerfile
ports:
- "53:53/udp"
cap_add:
- NET_ADMIN
...
Dnsmasq/dockerfile
FROM andyshinn/dnsmasq
COPY dnsmasq/dnsmasq.conf /etc/dnsmasq.conf
CMD ["--log-facility", "-"]
Dnsmasq/dnsmasq.conf
# default dnsmasq config file
# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv
# use DNS server 8.8.8.8 for all except abc.dev
# you can use IP of your home router
server=8.8.8.8
no-hosts
expand-hosts
user=dnsmasq
group=dnsmasq
cache-size=2048
neg-ttl=60
log-queries
# put IP address of your computer instead COMPUTER_IP
address=/abc.dev/COMPUTER_IP
Для получения дополнительной информации о конфигурации dnsmasq смотрите man-страницу.