Skip to Content

Contributors

use "%d" in nginx with "dbfilter_from_header" module


hi all,

How may I pass the equivalent of "dbfilter = ^%d.*" (odoo conf file option) to a nginx proxy_set_header for dbfilter (using module dbfilter_from_header (odoo 13)?

I tried to use "<subdomain>" or $subdomain in my expression but It doesn't get substituted before being sent to odoo.
i.e. unsuccessfully tried:
proxy_set_header X-Odoo-dbfilter \b(?<subdomain>.*)\b\S+; 
proxy_set_header X-Odoo-dbfilter \b(?\<subdomain\>.*)\b\S+; 
proxy_set_header X-Odoo-dbfilter \b(?\$subdomain.*)\b\S+; 
proxy_set_header X-Odoo-dbfilter ^%d.*;


anyone can help?

the use case is that I would like to set this dbfilter for only some defined range of subdomains.

TIA 



 --
Yves Goldberg
odooOfficial Partner - OCA delegate
Open Source ERP, CRM & CMS
T +972 (3) 720 8818
+972 (55) 966 1405
+32 (2) 588 2500
 
 
--


by Yves Goldberg - 11:00 - 31 Dec 2020

Follow-Ups

  • Re: use "%d" in nginx with "dbfilter_from_header" module
    Hi Rémy. this is great. thank you. I wrongly thought that <subdomain> was a predefined nginx variable. So now I could capture and assign the value in the server_name statement and use it in the dbfilter.
    Cheers.
    Yves. 


    ----- Original message -----
    From: "Rémy Taymans" <remy@coopiteasy.be>
    Subject: Re: use "%d" in nginx with "dbfilter_from_header" module
    Date: Friday, January 01, 2021 12:32

    Dear Yves,
    
    The value of the header X-Odoo-dbfilter should be a regular expression matching your database name. (https://github.com/OCA/server-tools/blob/13.0/dbfilter_from_header/override.py#L20)
    
    The match performed by Odoo using the regular expression given in the dbfilter header ignore the url you are using for accessing the odoo instance.
    
    Considering that the database is named according to the subdomain, the following nginx config should work :
    
      server_name foo.example.org;
      ...
      proxy_set_header X-Odoo-dbfilter foo;
    
    This will match any database that *begins* with `foo`.
    
    If the server_name of your nginx configuration file consist of something like :
    
      server_name *.example.org;
    
    Then you should consider using a regular expression as a server_name value. With this regular expression, extract the subdomain in a variable that can be used as a value for the proxy header.
    
      server_name ~^(?<database>.+)\.example\.org$;
      ...
      proxy_set_header X-Odoo-dbfilter $database;
    
    To get more info about regular expression in nginx configuration file, see : http://nginx.org/en/docs/http/server_names.html#regex_names
    
    I have not tested the code given in this email, so use it with caution.  :)
    
    Regards,
    
    --
    Rémy Taymans @ Coop IT Easy
    +32 493 02 69 85 - <https://github.com/coopiteasy>
    <https://coopiteasy.be>
    
    Quoting Yves Goldberg (2020-12-31 11:02:05)
    > hi all,
    > How may I pass the equivalent of "dbfilter = *^%d.**" (odoo conf file option) to a nginx proxy_set_header for dbfilter (using module dbfilter_from_header [1]  (odoo 13)?
    > I tried to use "<subdomain>" or $subdomain in my expression but It doesn't get substituted before being sent to odoo.
    > i.e. unsuccessfully tried:
    > proxy_set_header X-Odoo-dbfilter \b(?<subdomain>.*)\b\S+;
    > proxy_set_header X-Odoo-dbfilter \b(?\<subdomain\>.*)\b\S+;  proxy_set_header X-Odoo-dbfilter \b(?\$subdomain.*)\b\S+;  proxy_set_header X-Odoo-dbfilter ^%d.*;
    >
    > anyone can help?
    > the use case is that I would like to set this dbfilter for only some defined range of subdomains.
    > TIA
    >
    > --  Yves Goldberg*    o   doo  * |  Official Partner   - OCA delegate      Open Source ERP, CRM & CMS         Chat with me [2]      T    +972 (3) 720 8818*  M   +972 (55) 966 1405    T  +32 (2) 588 2500       None [3] www.ygol.com       None [4]    None [5]       None [6]       None [7]     --
    

    _______________________________________________
    Post to: mailto:contributors@odoo-community.org



    by Yves Goldberg - 04:35 - 1 Jan 2020
  • Re: use "%d" in nginx with "dbfilter_from_header" module
    Dear Yves,
    
    The value of the header X-Odoo-dbfilter should be a regular expression matching your database name. (https://github.com/OCA/server-tools/blob/13.0/dbfilter_from_header/override.py#L20)
    
    The match performed by Odoo using the regular expression given in the dbfilter header ignore the url you are using for accessing the odoo instance.
    
    Considering that the database is named according to the subdomain, the following nginx config should work :
    
      server_name foo.example.org;
      ...
      proxy_set_header X-Odoo-dbfilter foo;
    
    This will match any database that *begins* with `foo`.
    
    If the server_name of your nginx configuration file consist of something like :
    
      server_name *.example.org;
    
    Then you should consider using a regular expression as a server_name value. With this regular expression, extract the subdomain in a variable that can be used as a value for the proxy header.
    
      server_name ~^(?<database>.+)\.example\.org$;
      ...
      proxy_set_header X-Odoo-dbfilter $database;
    
    To get more info about regular expression in nginx configuration file, see : http://nginx.org/en/docs/http/server_names.html#regex_names
    
    I have not tested the code given in this email, so use it with caution.  :)
    
    Regards,
    
    --
    Rémy Taymans @ Coop IT Easy
    +32 493 02 69 85 - <https://github.com/coopiteasy>
    <https://coopiteasy.be>
    
    Quoting Yves Goldberg (2020-12-31 11:02:05)
    > hi all,
    > How may I pass the equivalent of "dbfilter = *^%d.**" (odoo conf file option) to a nginx proxy_set_header for dbfilter (using module dbfilter_from_header [1]  (odoo 13)?
    > I tried to use "<subdomain>" or $subdomain in my expression but It doesn't get substituted before being sent to odoo.
    > i.e. unsuccessfully tried:
    > proxy_set_header X-Odoo-dbfilter \b(?<subdomain>.*)\b\S+;
    > proxy_set_header X-Odoo-dbfilter \b(?\<subdomain\>.*)\b\S+;  proxy_set_header X-Odoo-dbfilter \b(?\$subdomain.*)\b\S+;  proxy_set_header X-Odoo-dbfilter ^%d.*;
    >
    > anyone can help?
    > the use case is that I would like to set this dbfilter for only some defined range of subdomains.
    > TIA
    >
    > --  Yves Goldberg*    o   doo  * |  Official Partner   - OCA delegate      Open Source ERP, CRM & CMS         Chat with me [2]      T    +972 (3) 720 8818*  M   +972 (55) 966 1405    T  +32 (2) 588 2500       None [3] www.ygol.com       None [4]    None [5]       None [6]       None [7]     --
    

    by Rémy Taymans - 11:30 - 1 Jan 2020
  • Re: use "%d" in nginx with "dbfilter_from_header" module
    Thanks Bruno. The second one is the one I am using and the 1st one is similar.
    My question is more about if there is a syntax I could use.

    Happy new year


    ----- Original message -----
    From: Bruno Joliveau <bruno.joliveau@numigi.com>
    Subject: Re: use "%d" in nginx with "dbfilter_from_header" module
    Date: Thursday, December 31, 2020 18:37

    I sent my mail too quickly ;-)




    Bruno Joliveau - Architecte applications - Président
    NUMIGI SOLUTIONS INC.
    (514) 317-7944

    Longueuil, Québec, Canada

    linkedin
    youtube
    custom-icon
    twitter











    Le jeu. 31 déc. 2020 à 11:30, Bruno Joliveau <bruno.joliveau@numigi.com> a écrit :
    Hi Yves,


    Have a nice day!


    Bruno Joliveau - Architecte applications - Président
    NUMIGI SOLUTIONS INC.
    (514) 317-7944

    Longueuil, Québec, Canada

    linkedin
    youtube
    custom-icon
    twitter











    Le jeu. 31 déc. 2020 à 05:02, Yves Goldberg <yves@ygol.com> a écrit :

    hi all,

    How may I pass the equivalent of "dbfilter = ^%d.*" (odoo conf file option) to a nginx proxy_set_header for dbfilter (using module dbfilter_from_header (odoo 13)?

    I tried to use "<subdomain>" or $subdomain in my expression but It doesn't get substituted before being sent to odoo.
    i.e. unsuccessfully tried:
    proxy_set_header X-Odoo-dbfilter \b(?<subdomain>.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter \b(?\<subdomain\>.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter \b(?\$subdomain.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter ^%d.*;


    anyone can help?

    the use case is that I would like to set this dbfilter for only some defined range of subdomains.

    TIA 



     --
    Yves Goldberg
    odooOfficial Partner - OCA delegate
    Open Source ERP, CRM & CMS
    T +972 (3) 720 8818
    +972 (55) 966 1405
    +32 (2) 588 2500
     
     
    --


    _______________________________________________



    _______________________________________________
    Post to: mailto:contributors@odoo-community.org




    by Yves Goldberg - 09:11 - 1 Jan 2020
  • Re: use "%d" in nginx with "dbfilter_from_header" module
    I sent my mail too quickly ;-)


    Bruno Joliveau - Architecte applications - Président
    NUMIGI SOLUTIONS INC.
    (514) 317-7944

    Longueuil, Québec, Canada

    linkedinyoutubecustom-icontwitter


    Le jeu. 31 déc. 2020 à 11:30, Bruno Joliveau <bruno.joliveau@numigi.com> a écrit :
    Hi Yves,


    Have a nice day!
    Bruno Joliveau - Architecte applications - Président
    NUMIGI SOLUTIONS INC.
    (514) 317-7944

    Longueuil, Québec, Canada

    linkedinyoutubecustom-icontwitter


    Le jeu. 31 déc. 2020 à 05:02, Yves Goldberg <yves@ygol.com> a écrit :

    hi all,

    How may I pass the equivalent of "dbfilter = ^%d.*" (odoo conf file option) to a nginx proxy_set_header for dbfilter (using module dbfilter_from_header (odoo 13)?

    I tried to use "<subdomain>" or $subdomain in my expression but It doesn't get substituted before being sent to odoo.
    i.e. unsuccessfully tried:
    proxy_set_header X-Odoo-dbfilter \b(?<subdomain>.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter \b(?\<subdomain\>.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter \b(?\$subdomain.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter ^%d.*;


    anyone can help?

    the use case is that I would like to set this dbfilter for only some defined range of subdomains.

    TIA 



     --
    Yves Goldberg
    odooOfficial Partner - OCA delegate
    Open Source ERP, CRM & CMS
    T +972 (3) 720 8818
    +972 (55) 966 1405
    +32 (2) 588 2500
     
     
    --

    _______________________________________________
    Mailing-List: https://odoo-community.org/groups/contributors-15
    Post to: mailto:contributors@odoo-community.org
    Unsubscribe: https://odoo-community.org/groups?unsubscribe


    by Bruno Joliveau - 05:36 - 31 Dec 2020
  • Re: use "%d" in nginx with "dbfilter_from_header" module
    Hi Yves,


    Have a nice day!
    Bruno Joliveau - Architecte applications - Président
    NUMIGI SOLUTIONS INC.
    (514) 317-7944

    Longueuil, Québec, Canada

    linkedinyoutubecustom-icontwitter


    Le jeu. 31 déc. 2020 à 05:02, Yves Goldberg <yves@ygol.com> a écrit :

    hi all,

    How may I pass the equivalent of "dbfilter = ^%d.*" (odoo conf file option) to a nginx proxy_set_header for dbfilter (using module dbfilter_from_header (odoo 13)?

    I tried to use "<subdomain>" or $subdomain in my expression but It doesn't get substituted before being sent to odoo.
    i.e. unsuccessfully tried:
    proxy_set_header X-Odoo-dbfilter \b(?<subdomain>.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter \b(?\<subdomain\>.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter \b(?\$subdomain.*)\b\S+; 
    proxy_set_header X-Odoo-dbfilter ^%d.*;


    anyone can help?

    the use case is that I would like to set this dbfilter for only some defined range of subdomains.

    TIA 



     --
    Yves Goldberg
    odooOfficial Partner - OCA delegate
    Open Source ERP, CRM & CMS
    T +972 (3) 720 8818
    +972 (55) 966 1405
    +32 (2) 588 2500
     
     
    --

    _______________________________________________
    Mailing-List: https://odoo-community.org/groups/contributors-15
    Post to: mailto:contributors@odoo-community.org
    Unsubscribe: https://odoo-community.org/groups?unsubscribe


    by Bruno Joliveau - 05:36 - 31 Dec 2020