Переадресация субдоменов HTTPS Dynami c DNS в другие каталоги или порты веб-сервера с использованием Apache в Ubuntu 18.04 - PullRequest
0 голосов
/ 19 января 2020

Я читал различные конфигурации и руководства по настройке Apache, чтобы делать то, что мне нужно в течение нескольких дней, и, честно говоря, я потерян.

Что я пытался сделать:

  • go на субдомен http или https, называемый «web» (ie. Web.exampledomain.dynu. net), и перенаправьте его на https при необходимости, а Apache предоставьте путь к документу / home / ubuntu / sandbox /
  • go на субдомен http или https, называемый "coder" (ie. coder.exampledomain.dynu. net и перенаправьте его на https, если необходимо, и Apache перешлите этот трафик * От 1056 * до https://localhost: 8096 (или это будет https: // _ default_: 8096 ???), поскольку это порт, на котором сервер кода работает как собственный веб-сервер. Теперь одна проблема с сервером кода заключается в том, что вы на самом деле указываете свой сертификат ssl в качестве аргумента при запуске приложения, поэтому я не думаю вам нужно настроить параметры сертификата в файле conf, но я могу возиться с этим. Насколько я могу судить, нет никакого способа Запустите сервер кода напрямую через Apache вместо собственного веб-сервера.

Установка:

  • Raspberry Pi 4 с Ubuntu 18.04 и Apache в качестве моего веб-сервера. Кроме того, код-сервер запускается кодером для запуска VSCode в моем браузере
  • Порты 80 и 443 и 8096 открываются на моем маршрутизаторе и перенаправляются на IP-адрес Pi
  • LetsEncrypt сертификаты, установленные по моему желанию обслуживать все по HTTPS
  • Использование Dynu Dynami c DNS для маршрутизации exampledomain.dynu. net на мой Publi c IP. На dynu не настроены текущие перенаправления.
  • Порты в ports.conf на Apache сервере, кажется, настроены правильно

То, что у меня сейчас есть в моем .../sites-available/exampledomain.dynu.net.conf:

<VirtualHost *:443>
    ServerName web.exampledomain.dynu.net
    DocumentRoot /home/ubuntu/sandbox
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/exampledomain.dynu.net/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/exampledomain.dynu.net/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/exampledomain.dynu.net/chain.pem
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>
</VirtualHost>

Итак, пункт 1 о том, что я пытался сделать, работает, как и ожидалось, что я не знаю, как настроить перенаправление с http на https по этому требованию. Пункт 2 о том, что я пытался сделать, действительно сбивает меня с толку, и такие вещи, которые я пробовал, например, добавление другого имени сервера в копию этого узла VirtualHost, похоже, не работают.

Обновление 1 С помощью следующей конфигурации я могу разделить трафик c по желанию на «web» и «coder», однако, после входа на страницу «coder» я просто получаю пустой белый экран, так что с перенаправлением не работает.

<VirtualHost *:443>
    ServerName web.exampledomain.dynu.net
    ServerAlias web.exampledomain.dynu.net
    DocumentRoot /home/ubuntu/sandbox
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/exampledomain.dynu.net/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/exampledomain.dynu.net/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/exampledomain.dynu.net/chain.pem
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerName coder.exampledomain.dynu.net
    ServerAlias coder.exampledomain.dynu.net
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Proxy>
        Order allow,deny
        Allow from all 
    </Proxy>
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*) wss://localhost:8096/$1 [P,L]
    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /(.*) https://localhost:8096/$1 [P,L]

    SSLEngine on
    ProxyRequests off 
    SSLProxyEngine On
    SSLProxyVerify none 
    SSLProxyCheckPeerCN off 
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    SSLCertificateFile /etc/letsencrypt/live/exampledomain.dynu.net/cert.pem                  
    SSLCertificateKeyFile /etc/letsencrypt/live/exampledomain.dynu.net/privkey.pem
    ProxyPass / https://localhost:8096/ nocanon
    ProxyPassReverse / https://localhost:8096/ 
</VirtualHost>

Я обнаружил, что в readme сервера кода написано, что для конфигурации HTTP необходимо использовать следующий обратный прокси-сервер, но я не знаю, почему моя реализация HTTPS выше не не работает после того, как логин пытается перенаправить и загрузить базовую страницу в root.

Conf из readme на code-server:

<VirtualHost *:80>
  ServerName code.example.com

  RewriteEngine On
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /(.*)           ws://localhost:8080/$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /(.*)           http://localhost:8080/$1 [P,L]

  ProxyRequests off
  ProxyPass        / http://localhost:8080/ nocanon
  ProxyPassReverse / http://localhost:8080/
</VirtualHost>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...