Forum

Handling multiple Origins/domains when request is being proxied to CloudFront

David 2018-01-12 13:03:09 UTC in Nimble Streamer

Hi there

I have multiple domains, lets say sportsteam.tv and sportsleague.tv
and want to implement CloudFront as a CDN incase of big unexpected viewerships that my usual VPS setup can't handle comfortably (past say 1000 concurrent viewers).

I have setup cdn.sportsteam.tv and cdn.sportsleague.tv as valid CloudFront CNAME subdomains all running under HTTPS.

All of my content is protected using Cookies, with xhrSetup and xhr.withCredentials=true in my hls.js initialisation code.

However, I cannot now use * as a access_control_allow_origin and Cross Domain does not seem to be acknowledged in this setup.

If I set my nimble.conf access_control_allow_origin = sportsteam.tv, sportsleague.tv (with or without https://) the browser gives me some variety of: "Failed to load https://cdn.sportsteam.tv/xxx/playlist.m3u8: The 'Access-Control-Allow-Origin' header contains multiple values 'https://sportsteam.tv,https://sportsleague.tv', but only one is allowed"

I have seen other suggestions on the web to re-write headers based on the $_REQUEST['http_domain'] (or whatever) but that doesn't seem possible in nimble.

I could dedicate one machine to this CDN origin, happily enough, but I cannot dedicate five machines for my ~five client domains for origins.

Could there be a way to get nimble to present the requesting domain (somehow) as the accepted one, like: https://streamerdomain.com:port/origin=sportsteam.tv/streamurl.m3u8
and then the origin should be approved/validated in some way.

I hope that all makes sense...!! Am happy to discuss further details, show example of live use case via email if desired.

Thanks
David

David 2018-01-12 13:05:16 UTC 

To be clear, if i set my access_control_allow_origin = sportsteam.tv on my nimble.conf - cloudfront + the player will all work happily together and play back video via the CDN.

Alex Pokotilo 2018-01-14 03:50:02 UTC 

David,
thanks for analysis you are correct in your findings.
Am I right that it's enough to return "Origin" header in case if "Origin" is among access_control_allow_origin specified in nimble.conf ?
"Access-Control-Allow-Origin" header cannot be a list of domains but rather should be exact domain.
We can change access_control_allow_origin behavior so that if we have domain list then we check Origin header and find matched domain in the list and If exists return Origin if not - don't add Access-Control-Allow-Origin at all.
What do you think ?

David 2018-01-14 10:26:33 UTC 

It seems like that would be a suitable workaround. If you need me to help run a test version please let me know I’ll be happy to help.

Alex Pokotilo 2018-01-15 06:50:11 UTC 

David,
could you please give us http request headers client sent and http headers received in case if you setup
access_control_allow_origin = sportsteam.tv
And access sportsteam.tv in case if your setup works.
I need to check requested/returned headers to make sure my fix will work

David 2018-01-17 11:33:58 UTC 

Alex I've sent an email to support FAO you.

Alex Pokotilo 2018-01-18 01:24:31 UTC 

David,
I've got it and replied.
To everybody interested in the subject - we will release this support soon.

David 2018-01-18 01:27:04 UTC 

Thanks Alex, looking forward to trying it out.

Vitl 2018-07-19 11:21:14 UTC 

Is there already support subject?

Terry 2018-08-04 02:12:28 UTC 

Has this been implemented?

Post a reply


Post a new question

Categories:

Tags:

nimbleNimble StreamerHLSFAQDVRnimble streamerhlsRTMPSRTABRcacheAPIrtmpwmsauthNimbletranscodersrtapidvrffmpegVODudpRTSPsldpfailoverDASHwmspanelyoutubevodstreamingrtspSLDPUDPmp4paywallabrDispersavideoaudiosslandroidmulticastLarixsubtitleslivelivestreamingWMSAuthMPEG-DASHpay-per-viewgeoMPEG-TSdashstreameredgebandwidthWMSPanelthumbnailWindowsencryptionhttpsplaylistwhite labelconfigsmilFFMPEGerrorCORSperformancechunksraspberry pire-streamingmpeg-dashpublish controlcorscloudfrontDRMrepublishingRepublishingvlcS3advertisinguser agentNDIadvertizerristrules.confipv6MPEGTSFastSpringRAMwms panelRecordingFMLEfileVATcrossdomainSMILmpegtsaespushakamaiPullserverswowzamobilecodecSSLbalancedrmchromecastTranscodem3u8TranscoderWowzaIDbugreportingconfigurationdownloadsnapshotawsAndroidnimblestreamerdomainLarix BroadcasterraspianloopAWSscte35originCDNamazonstreamroutesupdateipplaylist_dvrVidillionHttpslarix broadcasterissuechunkmpeg-tsEncoderIPsecurityVLCscte-35UInimble webcam html5Registration Issuedirect link32-bit Windowstwitchcache_controlitworkmecudalive abr support mpeg-dashwmspanelapibeirutreloadWWDCdubaideep statsCentOS v6.4logIIS Smooth StreamingcloudmediaAbrHTTPSHot-linking protectionHDSvaddioeventalertsjwplayer websitewhmcsbaselinetimelineVaddioAV BridgePI3 UbuntuAuthentication in HLSPi4view timeNimble Streamer APIpriceresourcelimitOld logsCloud Storageinterfacesscreencastencrytpionloadbalancingmetadatamod_rewriteprofilelarix abrattaching domainsgbpsAxisID3 tagscontainerwmsauthsignhigh*hds streamsdpshoutcastciscolocalWMSCONFIG_HOMEdatmessage.net hotlinkcostrestreamRTMP republishresumertmp abranalisysgentoo install server nimblehls restreamingtranscoding using NvidiaPublic IpPaywall AuthdocumentationofflineNimble streamer upgradeniblerconcurrent-connectionsTrancoderVideo Playertransocding republishingdecoderServer-sideAliaslost trafficstoppedNimble Streamer versionicecast urlpay per viewchangedvr_archivesmpeg dashamfLarix Grovenginx rtmp nimbleTCOobswildcardRaspian BusterexportopenssllebanonlocationmanifestMP4 not playedspaceonSteam stopped workingHLS vodseekingExpression Encoderanalyticsapplicationpaywallimuxamazon web servicenginxPlayReadyHLS Playerdvr stream twiceDASH PlayerrepublishjpegAXVVGhot-linkblocknvencdebian7brandingscreen freezecan't registerlive video on demandtrialbandwithmicrosoft streamMP4servererrorsrocksoftlog traffic statsno WMSPanelLarge DVR filesprivate networkaccuracylive videoTelegraminterleavingSLDP PLayersourcemac osx installwotermarkLive StreamingnimblesessionidFFmpegmultiple originsABR DASHprogressive downloadvimeohelp errorvideo stopload balancezabbixheaderstreamscache expirylog nimble analysertmp playbackcdnvsomlive streamAdsvideojsViewer StatswmsattachmentHEVCrecordingbitrate#restreamvod no soundconcurrent connectionDelaympeg2tsdvr streamconnectivityUbuntu 20 ARM - AWSunique visitoradaptiveAV1 codecServer-Side-Task-ControlJWPLAYERNGINX-RTMPdisk migrationdvr on wmspanelscreen capturestereo to monoWidevineaes encryptionFairplay4Kcrossdomain more then 1 domainsubscriptionnot foundCPU LoadcpuWMSPanel settingslive pull settingsABR HLS Bitratespullrtmp for YouTubeAS3install players setup ready to goDVRSettingstwitch larix broadcaster androidbuttAWS 3AppleDelete recordsicecast metadatanimble streamer web server php script pageautomationControl APIloggingnimble streamer vod hls transmuxingvideo loopLive streaminglearnerstarttime duration seekpointCross Domainrebootinsert logoadd_chunk failedPost processingfake extensionDVRStreamspremium featuremonitordroppingmobile app live streamingProgressiveapi accessDeep statsoutrateudp streamingloadbalancericecastweb playerUbuntu artful 17.10Transcoder MPEG DASHinvalidMPEG DASHstatus:errorcontent-dispositionAVCaptureMovieFileOutputblock downloadNimble Serverdvr streamslivestreamStreaming routeHotlinking ProtectionfacebookSecurityNimble CapacityABR DVR problempaymentLive Switcherstatsnot to stealLive BroadcastMultiple Audio trackslow_bandwidthsecure streamingcontentRTMP Republishvp9addemandIOSThumbnailsserver incorrect timeLiveLIVEwmsAuthSignnimble streamer mpeg-ts multiple inputsLoad-BalancingsoundHLS Meta Tag editing.How to do live stream with multiple audio trackssaiDVR Setting limitthumbnail dvr-thumbnailreportsrmtpInterlaceno internettranscoder nimbleVideo cant be playedS3 AWSavoid refreshraspberrylivestreamintransocderPaywallstorage space availablediskautomateuser_agentcredentialspublish streamStream Delayhd25trafficAArch64dvr to livewebhooktranscodevbv-maxratedomain lockUsers limitoutputcloudflareVOD HLS streaming on public IPFailoverVR-360larixsctelivestream bitratedockerDVRRecordingAuthInvalid frame headerno soundincoming streamSubtitlesDVR SettingPORTGopdelaympeg4storagealias route.movhttp serverLatencya recordwirecastVP9buffering videoSO_RCVBUFfastspringNimble streamermp2 audioaliasdata slicesplayer sldplatencyno audiobufferdistributionQuickTimevideo streamingqataritworkscdnvideo.jscompatibility protocolsmultiplexCSSactionscript 3server ssl error3.6.1-1Centos 8dissapointmentpay-per-minuteTeradek Decoderubuntu 18Max connectionUDP Multicastincomingmulti-viewerrulesmanage_dvrhow-toError when installingaws amazonrestartFallbackhelpRIST BondingplayoutMPEG2 Videologo in streammultiple audio udphotlink protectionRaspberryPi4ultra low latencyserver ip21hls to multicast udpnoobSSL requestprogressivebroadcast videovideo audioSRT protocolsha265fallbackanalyseStreamIDprerollrtmp sldp nimblenimble on cloudRaspberrytasks-controlRTMP to SRTLinux4GNimble_Crushwebrtcartifactsrtsp push androidtuningWowza AgentRemote StorageSSAIvideo and audio not matchLarix broadcastergpu{stream}NetworkOBSfairplayNginxGoogle DriveHLS StreamingPIDurlnimble.confrtmp republishing transcodeIIS Media Servicstrackspeedup my videoiOSthumbnailsmultipointruleAmazonTVfiresubfolderTLSV 1.2 Certificatedynamic linksSnapshotsMPEG-Dashrtpnimble dvrBandwidthdurationYadifportsRokubroadcasterOSXmd5Nimble connectionsabr fallbackletsencryptnimble aliasesNimble StreamRAM LoadtranscodingdownTonyFFMPEG;RTMP;I/O errorhot linkingTRANSCODEgoogle cloud storagepricingHTML5 playerAddendaLL-HLSWMSAUTHLL-HLS DVRav1 codecconnectionsNimbleStreamermainmultistreamingmultipleRistbuildABR bitratesPacketizingcountrist set fecBroadcastSecureJetson NanoLarix Playerramdvbduplicatingadjustsoftware versionre-publishingSRT RTMPmultiple audio

This website or its third-party tools use cookies, which are necessary to its functioning and required to achieve the purposes illustrated in the Privacy Policy. If you want to know more or withdraw your consent to all or some of the cookies, please refer to the Privacy Policy.
By closing this banner, scrolling this page, clicking a link or continuing to browse otherwise, you agree to the use of cookies.