Итак, я разместил свой Domoticz (программное обеспечение домашней автоматизации на RPi) за прокси-сервером, чтобы к нему можно было получить доступ с внешнего HTTPS-адреса. Это прекрасно работает для собственного веб-интерфейса, но для API , который он предоставляет, что-то идет не так.
Если я введу следующий URL в свой браузер, он будет работать нормально:
http://localDomoticzIP:port/json.htm?username=MkE=&password=OVM=&type=command¶m=getversion
Однако, если я использую версию HTTPS, я получаю ошибку 401:
https://myExternalURL.com/domoticz/json.htm?username=MkE=&password=OVM=&type=command¶m=getversion
Как видите, мало что изменилось, но один работает, другой нет.
Перевод с myExternalURL.com/domoticz/
на localDomoticzIP:port
происходит в Apache, конфигурационный файл которого выглядит следующим образом:
<VirtualHost *:443>
ServerName myExternalURL.com
ErrorLog ${APACHE_LOG_DIR}/port_443_error.log
CustomLog ${APACHE_LOG_DIR}/port_443_access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/myExternalURL.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/myExternalURL.com/privkey.pem
SSLProxyEngine on
ProxyPreserveHost On
ProxyRequests Off
RewriteEngine on
# I don't THINK the 3 lines below are important, since it's there for a
different web page, but I'll leave it in, in case it may mess with
something me knowing
# When Upgrade:websocket header is present, redirect to ws
# Using NC flag (case-insensitive) as some browsers will pass Websocket
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule .* ws://127.0.0.1:8000/socket.io%{REQUEST_URI} [P]
RewriteRule ^/domoticz$ /domoticz/ [R=307]
# The two lines below are for another web page
RewriteRule ^/sprinklers/node$ /sprinklers/node/ [R=307]
RewriteRule ^/sprinklers$ /sprinklers/ [R=307]
ProxyPassMatch /domoticz\/?(.*) https://127.0.0.1:444/$1
ProxyPassReverse /domoticz\/?(.*) https://127.0.0.1:444/$1
# The four lines below are for another web page
ProxyPassMatch /sprinklers/node(\/?)(.*) http://127.0.0.1:8000/$2
ProxyPassReverse /sprinklers/node(\/?)(.*) http://127.0.0.1:8000/$2
ProxyPassMatch /sprinklers(\/?)(.*) http://127.0.0.1:8091/$2
ProxyPassReverse /sprinklers(\/?)(.*) http://127.0.0.1:8091/$2
</VirtualHost>
Как я уже сказал, переход к myExternalURL.com/domoticz/
в браузере работает нормально, но если я добавлю к нему вызов API, он всегда возвращает 401.
Я также пытался установить заголовок авторизации со страницы HTML, но в результате получилось то же самое: 401.
Кто-нибудь знает, что это может быть изменено и вызывает эти 401 ошибки?