У меня есть экземпляр 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/