【问题标题】:How to publish two odoo instances with nginx using, different paths instead of different server names or ports?如何使用 nginx 发布两个 odoo 实例,使用不同的路径而不是不同的服务器名称或端口?
【发布时间】:2020-10-03 16:47:51
【问题描述】:

我想使用不同的路径发布两个 odoo 实例,例如 mysite.com/odoo11 和 mysite.com/odoo12。我正在使用 odoo docker 镜像和 nginx:1.15.12-alpine docker 镜像。

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name mysite.com;

        index index.php index.html index.htm;

        root /var/www/html;

#   ...ssl config...


#    location / {
#        proxy_set_header X-Real-IP  $remote_addr;
#        proxy_set_header X-Forwarded-For $remote_addr;
#        proxy_set_header X-Forwarded-Proto $scheme;
#        proxy_set_header Host $host;
#        proxy_pass http://odoo:8069;
#    }


    location /odoo {
        rewrite ^/odoo(.*) /$1 break;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://odoo:8069;
    }

    location ~* /web/static/ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://odoo:8069;

    }

}

我从 /odoo 路径后面的一个 odoo 实例开始。我环顾四周,发现这样做的方法是使用重写规则。

    location /odoo {
        rewrite ^/odoo(.*) /$1 break;

但是当我在我的配置中使用它时,它不会重定向到 odoo docker 映像,而是重定向到根文件夹。这是 nginx 日志。

152.206.199.193 - - [03/Oct/2020:16:20:49 +0000] "GET /odoo HTTP/2.0" 200 84 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "-"
2020/10/03 16:20:49 [error] 14#14: *6 open() "/var/www/html/web" failed (2: No such file or directory), client: 152.206.199.193, server: example.com, request: "GET /web HTTP/2.0", host: "example.com", referrer: "https://example.com/odoo"
152.206.199.193 - - [03/Oct/2020:16:20:49 +0000] "GET /web HTTP/2.0" 404 548 "https://example.com/odoo" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "-"
2020/10/03 16:20:49 [error] 14#14: *6 open() "/var/www/html/favicon.ico" failed (2: No such file or directory), client: 152.206.199.193, server: example.com, request: "GET /favicon.ico HTTP/2.0", host: "example.com", referrer: "https://example.com/web"

我尝试了 proxy_redirect http://$host http://odoo:8069; 而不是 proxy_pass 并更改了重写规则的顺序。我仍然不明白重写规则和 proxy_redirect 或 proxy_pass 之间的区别,所以也能对此有所了解。

这是我关于 stackoverflow 的第一个问题,提前致谢。

【问题讨论】:

    标签: nginx odoo


    【解决方案1】:

    我认为你不会在这方面取得成功。

    负责渲染 wen 页面的网页控制器基于与 URL 路径的匹配工作。

    例如,mysite.com/web 使用路径 /webfor the webclient controller. Rewriting it tomysite.com/odoo12/webuses path/odoo12/web`,这不会触发 webclient 渲染控制器。

    您最好的选择是改用子域,例如 odoo11.mysite.comodoo12.mysite.com

    Odoo 甚至对此提供支持。 dbfilter 服务器选项可以动态过滤数据库以使用与子域名匹配的数据库。见:https://www.odoo.com/documentation/12.0/setup/deploy.html#dbfilter

    【讨论】:

    • 现在我不能修改 DNS 记录,所以这将是未来的解决方案。我认为使用 nginx 规则我可以​​剥离路径,然后重定向到正确的 docker 容器。我想那时我将不得不使用端口。感谢您的回答和dbfilter 上的提示,我一定会使用它。
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 2014-05-05
    • 2011-08-21
    • 2014-01-26
    • 1970-01-01
    • 2016-12-12
    • 2012-03-07
    • 2017-01-23
    相关资源
    最近更新 更多