"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[1933],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>m});var i=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,i,r=function(e,n){if(null==e)return{};var t,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)t=o[i],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)t=o[i],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=i.createContext({}),d=function(e){var n=i.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},p=function(e){var n=d(e.components);return i.createElement(s.Provider,{value:n},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},g=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=d(t),g=r,m=u["".concat(s,".").concat(g)]||u[g]||c[g]||o;return t?i.createElement(m,a(a({ref:n},p),{},{components:t})):i.createElement(m,a({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,a=new Array(o);a[0]=g;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[u]="string"==typeof e?e:r,a[1]=l;for(var d=2;d<o;d++)a[d]=t[d];return i.createElement.apply(null,a)}return i.createElement.apply(null,t)}g.displayName="MDXCreateElement"},37172:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var i=t(86404),r=(t(11504),t(95788));const o={title:"Additional Networking Settings",hide_title:!0,sidebar_position:5,version:1},a=void 0,l={unversionedId:"installation/networking-settings",id:"installation/networking-settings",title:"Additional Networking Settings",description:"Additional Networking Settings",source:"@site/docs/installation/networking-settings.mdx",sourceDirName:"installation",slug:"/installation/networking-settings",permalink:"/docs/installation/networking-settings",draft:!1,editUrl:"https://github.com/apache/superset/tree/master/docs/docs/installation/networking-settings.mdx",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Additional Networking Settings",hide_title:!0,sidebar_position:5,version:1},sidebar:"tutorialSidebar",previous:{title:"Configuring Superset",permalink:"/docs/installation/configuring-superset"},next:{title:"Caching",permalink:"/docs/installation/cache"}},s={},d=[{value:"Additional Networking Settings",id:"additional-networking-settings",level:2},{value:"CORS",id:"cors",level:3},{value:"Domain Sharding",id:"domain-sharding",level:3},{value:"Middleware",id:"middleware",level:3}],p={toc:d},u="wrapper";function c(e){let{components:n,...t}=e;return(0,r.yg)(u,(0,i.c)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.yg)("h2",{id:"additional-networking-settings"},"Additional Networking Settings"),(0,r.yg)("h3",{id:"cors"},"CORS"),(0,r.yg)("p",null,"To configure CORS, or cross-origin resource sharing, the following dependency must be installed:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"pip install apache-superset[cors]\n")),(0,r.yg)("p",null,"The following keys in ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," can be specified to configure CORS:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ENABLE_CORS"),": Must be set to ",(0,r.yg)("inlineCode",{parentName:"li"},"True")," in order to enable CORS"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"CORS_OPTIONS"),": options passed to Flask-CORS\n(",(0,r.yg)("a",{parentName:"li",href:"https://flask-cors.corydolphin.com/en/latest/api.html#extension"},"documentation"),")")),(0,r.yg)("h3",{id:"domain-sharding"},"Domain Sharding"),(0,r.yg)("p",null,"Chrome allows up to 6 open connections per domain at a time. When there are more than 6 slices in\ndashboard, a lot of time fetch requests are queued up and wait for next available socket.\n",(0,r.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/pull/5039"},"PR 5039")," adds domain sharding to Superset,\nand this feature will be enabled by configuration only (by default Superset doesn\u2019t allow\ncross-domain request)."),(0,r.yg)("p",null,"Add the following setting in your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," file:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"SUPERSET_WEBSERVER_DOMAINS"),": list of allowed hostnames for domain sharding feature.")),(0,r.yg)("p",null,"Please create your domain shards as subdomains of your main domain for authorization to\nwork properly on new domains. For Example:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"SUPERSET_WEBSERVER_DOMAINS=['superset-1.mydomain.com','superset-2.mydomain.com','superset-3.mydomain.com','superset-4.mydomain.com']"))),(0,r.yg)("p",null,"or add the following setting in your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," file if domain shards are not subdomains of main domain."),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"SESSION_COOKIE_DOMAIN = '.mydomain.com'"))),(0,r.yg)("h3",{id:"middleware"},"Middleware"),(0,r.yg)("p",null,"Superset allows you to add your own middleware. To add your own middleware, update the\n",(0,r.yg)("inlineCode",{parentName:"p"},"ADDITIONAL_MIDDLEWARE")," key in your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),". ",(0,r.yg)("inlineCode",{parentName:"p"},"ADDITIONAL_MIDDLEWARE")," should be a list\nof your additional middleware classes."),(0,r.yg)("p",null,"For example, to use ",(0,r.yg)("inlineCode",{parentName:"p"},"AUTH_REMOTE_USER")," from behind a proxy server like nginx, you have to add a\nsimple middleware class to add the value of ",(0,r.yg)("inlineCode",{parentName:"p"},"HTTP_X_PROXY_REMOTE_USER")," (or any other custom header\nfrom the proxy) to Gunicorn\u2019s ",(0,r.yg)("inlineCode",{parentName:"p"},"REMOTE_USER")," environment variable:"))}c.isMDXComponent=!0}}]);