Apache2:反向代理子域到端口和子文件夹的远程地址?

时间:2017-09-08 13:56:21

标签: apache reverse-proxy

在我的Ubuntu服务器上,我在http://localhost:8069安装了Odoo; Odoo是一个Python应用程序,通过Python服务器提供服务。

首先打开http://localhost:8069时,Odoo会检查当前登录的用户;如果没有,则重定向到http://localhost:8069/web/login;如果有登录用户,则会重定向到http://localhost:8069/web

我希望在子域上提供http://localhost:8069/web,比如说http://odoo.myserver.com - 这样用户就不必被端口(:8069部分)和子文件夹分散注意力(/web部分)。换句话说,用户应该将登录页面设为http://odoo.myserver.com/login(而不是http://localhost:8069/web/login)。

就我而言,http://odoo.myserver.com与服务于Odoo的计算机位于同一台计算机上。所以,我想我会在Apache2中尝试使用反向代理。这是我作为虚拟主机的子域配置:

<VirtualHost *:80>
  ServerName odoo.myserver.com
  ServerAdmin info@myserver.com
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyRequests Off
  ProxyPreserveHost On
  <Location />
    ProxyPass http://127.0.0.1:8069/web/
    ProxyPassReverse http://127.0.0.1:8069/web/
  </Location>
  ProxyErrorOverride off
</VirtualHost>

当我将此设置为活动状态,并首次在浏览器中加载http://odoo.myserver.com时,我会被重定向到http://odoo.myserver.com/web/login,并且我会收到一个Odoo样式的404&#34; Page not be found&#34 ;页。

如果我尝试没有位置标记,并将/web本地映射到/web远程:

<VirtualHost *:80>
  ServerName odoo.myserver.com
  ServerAdmin info@myserver.com
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass /web/ http://127.0.0.1:8069/web/
  ProxyPassReverse /web/ http://127.0.0.1:8069/web/
  ProxyErrorOverride off
</VirtualHost>

...然后http://odoo.myserver.com只是给我默认的Apache页面,而http://odoo.myserver.com/web/会重定向到http://odoo.myserver.com/web/login(当我映射为ProxyPass(Reverse) / http://127.0.0.1:8069/web/时会发生类似情况) - 但这不是我想要的。

编辑:我最接近的是遵循https://serverfault.com/questions/698995/apache-proxypass-redirect-subdomain-to-port-and-path

<VirtualHost *:80>
  ServerName odoo.myserver.com
  ServerAdmin info@myserver.com
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:8069/    
  ProxyPassReverse / http://127.0.0.1:8069/    
  RewriteEngine on
  RewriteCond %{REQUEST_URI} !^/web
  RewriteRule ^/$ /web/$1 [R,L]
  ProxyErrorOverride off
</VirtualHost>

...在这种情况下,当我在浏览器中加载http://odoo.myserver.com时,我被重定向到http://odoo.myserver.com/web/login,并获得了正确的Odoo登录页面。足够接近,但仍然没有,因为/web部分仍然可见。

那么,如何以这样的方式代理,以及:

...

1 个答案:

答案 0 :(得分:0)

 <VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName odoo.myserver.com
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  <Location /login>
    ProxyPass / http://127.0.0.1:8069/web/login
    ProxyPassReverse / http://127.0.0.1:8069/web/login
  </Location>
  <Location />
    ProxyPass / http://127.0.0.1:8069/web
    ProxyPassReverse / http://127.0.0.1:8069/web
  </Location>
</VirtualHost>

试试这个配置