带有 SSL 的 Apache 反向代理给出“400 错误请求”

带有 SSL 的 Apache 反向代理给出“400 错误请求”

我在 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>

相关内容