Как получить доступ к веб-сайту, работающему локально, с помощью пользовательского домена и SSL на мобильном телефоне? - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть блог WordPress (WP), работающий локально на моей машине (OSX). Настройка URL-адреса сайта WP установлена ​​на https://abc.dev, и я могу без проблем обращаться к сайту в браузере моей машины.

Визуально это выглядит так:

enter image description here

Сайт 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, заключалась в том, что Caddy хотел, чтобы порты 80 и 443 были открыты. Таким образом, это помогло мне решить проблему конфликтов портов.

Моя проблема сейчас, я хочу получить доступ к сайту WP на моем телефоне, и я хочу, чтобы URL был также https://abc.dev в телефоне.

Последние несколько дней я возился с Squid прокси и Mitmproxy и не нашел удачи.

Некоторые вещи, которые я пробовал в общем:

  1. Настройка прокси с использованием SquidMan
  2. Настройка работы Mitmproxy * Режим 1050 *
  3. Настройка работы Mitmproxy upstream mode
  4. Установка и доверие Сертификат Mitmproxy в моем телефоне
  5. Настройка виртуальной машины 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 Ответ

0 голосов
/ 10 сентября 2018

Ответ

Сначала убедитесь, что ваша проблема - только DNS. Вы должны иметь возможность подключаться к веб-сайту со своего телефона по IP-адресу вашего компьютера http://COMPUTER_IP. Если вы не можете загрузить веб-сайт, проверьте брандмауэр.

Ваш локальный компьютер знает abc.dev и разрешает его в localhost.

Но это не относится к чужим хостам в домашней сети. Другой 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 и браузер подключается к вашему компьютеру.

Третье возможное решение:

  1. Разверните ваш DNS-сервер с помощью docker-compose вместе с WordPress.
  2. Настройте ваш 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

ваш docker-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 см. manpage .

...