Обратный прокси-сервер apache с SSL выдает "400 неверных запросов"

У меня есть экземпляр Odoo, работающий на порту 9069 на сервере Ubuntu. В данный момент apache прослушивает порт 8069 и передает его на 9069 (что работает нормально). Рабочий URL-адрес http://example.com:8069/

Теперь мне нужно сделать так, чтобы SSL работал с внешним интерфейсом URL. ( https://example.com:8069/). Однако это вызывает ошибку 400 Bad request при доступе в браузере. Точная ошибка:

Неверный запрос. Ваш браузер отправил запрос, который этот сервер не может понять. Причина: вы говорите обычным HTTP с портом сервера с поддержкой SSL. Вместо этого используйте схему HTTPS для доступа к этому URL, пожалуйста. Сервер Apache/2.4.33 (Ubuntu) на example.com Порт 8069

Также я заметил, что URL тоже меняется на http версию.

Ниже приведен conf Virtualhost, который я использовал для домена.

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

  ServerName MySite
  ServerAlias example.com:8069

   SSLEngine on
   #SSLProxyEngine on
   SSLCertificateKeyFile /etc/apache2/sslfolder/mysite.key
   SSLCertificateFile    /etc/apache2/sslfolder/mysite.crt
   SSLCertificateChainFile /etc/apache2/sslfolder/mysite.txt

  ProxyPreserveHost On
  ProxyRequests Off

  ProxyPass /longpolling/ http://localhost:8072/
  ProxyPassReverse /longpolling/ http://localhost:8072/

  ProxyPass / http://localhost:9069/
  ProxyPassReverse / http://localhost:9069/

</VirtualHost>
</IfModule>

Уже проверил журналы ошибок apache, но там нет никакой полезной информации.

Примечание: есть другой файл virtualhost для example.com, который является довольно стандартным с настроенными портами 80 и 443. (Это только для сайта, а не odoo). Я опубликую виртуальный хост, если вы считаете, что это актуально.

3 ответа

Решение

Я фактически исправил это, используя следующие модификации.

ServerName MySite

изменено на

ServerName example.com:8069

А также

ProxyPass / http://localhost:9069/
ProxyPassReverse / http://localhost:9069/

изменено на

ProxyPass / http://localhost:9069/
ProxyPassReverse / http://example.com:8069/

Если это кому-то поможет: в моем случае только некоторые запросы возвращали 400 кодов.

Я исправил с помощью:

ProxyPreserveHost On

Я вижу, что это месяцы и наткнулся на это после обыска. В случае, если это полезно для будущих искателей...

Я делаю что-то подобное с конфигурацией обратного прокси, хотя мне не пришлось менять ServerName поле и ProxyPassReverse не требует номер порта. Итак, используя вашу конфигурацию, я бы попробовал:

ProxyPass / http://localhost:9069/
ProxyPassReverse / http://localhost/

Вы не хотите, чтобы пользователи вводили порт 8069 после URL.

используйте традиционный подход 80/443 и пусть прокси обрабатывает / скрывает порт 8069.

Слушай 80

A Добавьте здесь правила перезаписи, чтобы преобразовать http в https

ServerName MySite ServerAlias ​​example.com

SSLEngine на #SSLProxyEngine на SSLCertificateKeyFile /etc/apache2/sslfolder/mysite.key SSLCertificateFile /etc/apache2/sslfolder/mysite.crt SSLCertificateChainFile /etc/apache2/sslfolder/mysitet.

ProxyPreserveHost On ProxyRequests Off

## если odoo находится на локальном хосте ProxyPass / http://localhost:8069/ ProxyPassReverse / http://localhost:8069/

если odoo находится на удаленном хосте и вы не хотите, чтобы пользователи интрасети перехватывали трафик не ssl

ProxyPass / https://odoo_ip_address:8070/ ProxyPassReverse https://odoo_ip_adress:8070/

http-порт odoo - 8069, а порт https - 8070

Другие вопросы по тегам