Назад | Перейти на главную страницу

Ошибка прокси 502 «Ошибка чтения с удаленного сервера» Apache 2.4.18 Ubuntu с HTTPS в контейнер Docker

Я не эксперт и не понимаю, в чем проблема, но, очевидно, эта ошибка вызвана крошечной деталью, которую я не могу отладить. Любая идея?

Что у меня есть: У меня есть несколько виртуальных хостов, настроенных с Apache2, которые управляют трафиком на разные сайты. Все с https благодаря Certbot Let'sEncrypt, и он отлично работает.

Apache 2.4.18 (Ubuntu) Сервер: Ubuntu 16.04 Версия Docker: 19.03.5

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

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

В этой настройке я пытаюсь настроить виртуальный хост, действующий как обратный прокси-сервер в Apache, который будет перенаправлять трафик в соответствующий контейнер Docker (запуск контейнера Wordpress в качестве теста, но я хотел бы сделать это с несколькими приложениями в будущем). Я знаю, что это на французском, но я нашел этого парня, который пытается делать то же самое, что и я Вот

Что я сделал:

Я сделал примерно то же, что и в приведенном выше руководстве.

version: '3.3'

services:

    wordpress:
        depends_on:
            - db
        container_name: ${CONTAINER_WP_NAME}
        image: wordpress:${WORDPRESS_IMAGE}
        ports:
#            - 8080:80
            - 8081:443
        restart: always
        environment:
            WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME}:3306
            WORDPRESS_DB_USER: ${MYSQL_USER}
            WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
            WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
            WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
        volumes:
            - ${WP_CORE}:/var/www/html
            - ${WP_CONTENT}:/var/www/html/wp-content
            - ./docker/config/vhost.conf:/etc/apache2/sites-enabled/vhost-ssl.conf
            - /etc/letsencrypt:/etc/letsencrypt:ro


<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerName mydomaine.tld

        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on

        SSLCertificateFile /etc/letsencrypt/live/mydomaine.tld/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mydomaine.tld/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/mydomaine.tld/chain.pem

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

    </VirtualHost>
</IfModule>


<VirtualHost *:80>

       ServerName mydomaine.tld
       ProxyPreserveHost On

       ProxyPass / http://localhost:8081/ retry=1 acquire=3000 timeout=600 Keepalive=On
       ProxyPassReverse / http://localhost:8081/
       ProxyPassReverseCookieDomain localhost mydomaine.tld


       ErrorLog /srv/logs/error/mydomaine.log
       CustomLog /srv/logs/access/mydomaine.log combined


RewriteEngine on
RewriteCond %{SERVER_NAME} =mydomaine.tld
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>

       ServerName mydomaine.tld
       ProxyPreserveHost On

       SSLProxyEngine On
       SSLProxyVerify none
       SSLProxyCheckPeerCN off
       SSLProxyCheckPeerName off
       SSLProxyCheckPeerExpire off

       ProxyPass / https://localhost:8081/ retry=1 acquire=3000 timeout=600 Keepalive=On
       ProxyPassReverse / https://localhost:8081/
       ProxyPassReverseCookieDomain locahost mydomaine.tld

       ProxyRequests Off

       ErrorLog /srv/logs/error/slice.log
       CustomLog /srv/logs/access/slice.log combined


       SSLCertificateFile /etc/letsencrypt/live/mydomaine.tld/fullchain.pem
       SSLCertificateKeyFile /etc/letsencrypt/live/mydomaine.tld/privkey.pem
       SSLCertificateChainFile /etc/letsencrypt/live/mydomaine.tld/chain.pem
       Include /etc/letsencrypt/options-ssl-apache.conf

</VirtualHost>
</IfModule>

Моя проблема: Без SSL он работает нормально, но как только я активирую SSL и подключаюсь к порту 443 для подключения к веб-сайту через HTTPS, в браузере появляется ошибка прокси 502:

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request

Reason: Error reading from remote server

И журналы веб-сайта возвращают эту ошибку:

AH00898: Error reading from remote server returned by /
AH01102: error reading status line from remote server localhost:8081

Что я пробовал:

Я читал почти все выпуски, посвященные этой ошибке, и не мог отладить ее. я вижу у этого пользователя точно такие же ошибки как и я, но его решение не решило мою проблему. Я пробовал использовать порты 80 и 443 в контейнере докера, но это ничего не меняет; без перенаправления http: // работает, но не https: //. Каждый раз у меня одна и та же ошибка.

Я активировал необходимые и рекомендуемые пакеты, и у меня нет других ошибок, кроме тех, которые я описал.

Я также глубоко покопался в Интернете и попробовал все решения и предложения, которые смог найти на сегодняшний день.

Ошибка в журнале не дает большого количества указателя, но для меня ее решило добавление директивы, разрешающей некоторые устаревшие шифровальные наборы для прокси-сервера, в моем случае apache coyote.

Добавьте директиву SSLProxyCipherSuite. https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyciphersuite

Отсюда можно вырезать и вставить значения: https://wiki.mozilla.org/Security/Server_Side_TLS

Возможно, попробуйте наборы Cipher (TLS 1.0 - 1.2): ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256-GCM-SHA384: ECDHE-RSA-AES256A : ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305: DHE-RSA-AES128-GCM-SHA256: DHE-RSA-AES256-GCM-SHA384: DHE-RSA-CHACHA20-POLYHE1 -SHA256: ECDHE-RSA-AES128-SHA256: ECDHE-ECDSA-AES128-SHA: ECDHE-RSA-AES128-SHA: ECDHE-ECDSA-AES256-SHA384: ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES256-SHA384: : ECDHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA256: DHE-RSA-AES256-SHA256: AES128-GCM-SHA256: AES256-GCM-SHA384: AES128-SHA256: AES256-AES8256: AES256-SHA8256: AES256-SHA8256 -SHA: DES-CBC3-SHA

И посмотрите, начнет ли это работать и укрепится ли оттуда.