Что меняет прокси-сервер Apache, который может вызывать ошибки Domoticz API 401? - PullRequest
0 голосов
/ 11 июля 2019

Итак, я разместил свой Domoticz (программное обеспечение домашней автоматизации на RPi) за прокси-сервером, чтобы к нему можно было получить доступ с внешнего HTTPS-адреса. Это прекрасно работает для собственного веб-интерфейса, но для API , который он предоставляет, что-то идет не так.

Если я введу следующий URL в свой браузер, он будет работать нормально:

http://localDomoticzIP:port/json.htm?username=MkE=&password=OVM=&type=command&param=getversion

Однако, если я использую версию HTTPS, я получаю ошибку 401:

https://myExternalURL.com/domoticz/json.htm?username=MkE=&password=OVM=&type=command&param=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 ошибки?

1 Ответ

0 голосов
/ 15 июля 2019

Оказывается, проблема не в текущей авторизации, а в авторизации из прошлого. Мой браузер не удаляет cookie-файл sessionID при каждом выходе из системы, что вызывает все виды проблем при попытке аутентификации после этого.

...