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

Обратный прокси-сервер 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.

Ниже приведена конфигурация виртуального хоста, которую я использовал для домена.

<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, но полезной информации там нет.

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

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

Я исправил:

ProxyPreserveHost On

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

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

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

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

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

Listen 80
##AAdd rewrite rules here to convert http to https
<VirtualHost *:443>

  ServerName MySite
  ServerAlias example.com

   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

 ## if odoo is on local host 
  ProxyPass / http://localhost:8069/
  ProxyPassReverse / http://localhost:8069/
## if odoo is on remote host and you do not want intranet users interception non ssl traffic
  ProxyPass / https://odoo_ip_address:8070
  ProxyPassReverse https://odoo_ip_adress:8070

##odoo http port is 8069 and https port is 8070

</VirtualHost>

Я исправил это, используя приведенные ниже модификации.

ServerName MySite

изменен на

ServerName example.com:8069

И

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

изменен на

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