Я читал различные конфигурации и руководства по настройке 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>