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