![带有 SSL 的 Apache 反向代理给出“400 错误请求”](https://linux22.com/image/724045/%E5%B8%A6%E6%9C%89%20SSL%20%E7%9A%84%20Apache%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E7%BB%99%E5%87%BA%E2%80%9C400%20%E9%94%99%E8%AF%AF%E8%AF%B7%E6%B1%82%E2%80%9D.png)
我在 Ubuntu 服务器上的 9069 端口上运行了一个 Odoo 实例。目前,apache 正在监听 8069 端口,并将其代理传递到 9069(运行正常)。工作 URL 是http://example.com:8069
现在,我需要让它在前端 URL 上使用 SSL 工作。(https://example.com:8069)。然而,当我在浏览器中访问时,会出现 400 Bad request 错误。具体错误如下:
错误请求:您的浏览器发送了此服务器无法理解的请求。原因:您正在向启用 SSL 的服务器端口发送纯 HTTP。请使用 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)。如果您认为相关,我会发布虚拟主机。
答案1
我实际上使用以下修改修复了它。
ServerName MySite
更改为
ServerName example.com:8069
和
ProxyPass / http://localhost:9069/
ProxyPassReverse / http://localhost:9069/
更改为
ProxyPass / http://localhost:9069/
ProxyPassReverse / http://example.com:8069/
答案2
我发现这是几个月前的帖子,搜索后偶然发现的。希望这对未来的搜索者有帮助...
我用反向代理配置做了类似的事情,尽管我不必更改字段ServerName
,也不ProxyPassReverse
需要端口号。因此,使用您的配置,我会尝试:
ProxyPass / http://localhost:9069/
ProxyPassReverse / http://localhost/
答案3
如果它对某人有帮助:就我而言,只有一些请求返回 400 代码。
我修复了:
ProxyPreserveHost 开启
答案4
您不希望用户在 URL 后输入端口 8069。
使用传统的 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>