[{"data":1,"prerenderedAt":1055},["ShallowReactive",2],{"i-feather:search":3,"i-feather:x":8,"i-feather:moon":10,"i-feather:sun":12,"i-lucide:house-heart":14,"i-fa-brands:youtube":16,"i-fa-brands:twitch":20,"i-fa-brands:github":22,"i-fa-brands:linkedin":25,"i-fa-brands:stack-overflow":28,"i-simple-icons:bluesky":31,"i-fa-brands:mastodon":33,"i-fa-regular:envelope":35,"i-fa-solid:rss":37,"post-\u002Fnginx-asp-net-core-depth\u002F":39,"post-navigation":655,"i-fa-solid:share-alt":1035,"i-fa-brands:facebook":1037,"i-fa-brands:twitter":1039,"i-fa-brands:reddit":1041,"i-fa-brands:patreon":1043,"i-simple-icons:buymeacoffee":1045,"i-fa-brands:paypal":1047,"i-fa-regular:question-circle":1049,"i-feather:arrow-left":1051,"i-feather:arrow-right":1053},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003Cpath d=\"m21 21l-4.35-4.35\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 6L6 18M6 6l12 12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 12.79A9 9 0 1 1 11.21 3A7 7 0 0 0 21 12.79\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"5\"\u002F>\u003Cpath d=\"M12 1v2m0 18v2M4.22 4.22l1.42 1.42m12.72 12.72l1.42 1.42M1 12h2m18 0h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M8.62 13.8A2.25 2.25 0 1 1 12 10.836a2.25 2.25 0 1 1 3.38 2.966l-2.626 2.856a.998.998 0 0 1-1.507 0z\"\u002F>\u003Cpath d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":17,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":19},576,512,"\u003Cpath fill=\"currentColor\" d=\"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597c-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821c11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z\"\u002F>",{"left":4,"top":4,"width":18,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":21},"\u003Cpath fill=\"currentColor\" d=\"M391.17 103.47h-38.63v109.7h38.63ZM285 103h-38.63v109.75H285ZM120.83 0L24.31 91.42v329.16h115.83V512l96.53-91.42h77.25L487.69 256V0Zm328.24 237.75l-77.22 73.12h-77.24l-67.6 64v-64h-86.87V36.58h308.93Z\"\u002F>",{"left":4,"top":4,"width":23,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":24},496,"\u003Cpath fill=\"currentColor\" d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6c-3.3.3-5.6-1.3-5.6-3.6c0-2 2.3-3.6 5.2-3.6c3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9c2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9c.3 2 2.9 3.3 5.9 2.6c2.9-.7 4.9-2.6 4.6-4.6c-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2c12.8 2.3 17.3-5.6 17.3-12.1c0-6.2-.3-40.4-.3-61.4c0 0-70 15-84.7-29.8c0 0-11.4-29.1-27.8-36.6c0 0-22.9-15.7 1.6-15.4c0 0 24.9 2 38.6 25.8c21.9 38.6 58.6 27.5 72.9 20.9c2.3-16 8.8-27.1 16-33.7c-55.9-6.2-112.3-14.3-112.3-110.5c0-27.5 7.6-41.3 23.6-58.9c-2.6-6.5-11.1-33.3 2.6-67.9c20.9-6.5 69 27 69 27c20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27c13.7 34.7 5.2 61.4 2.6 67.9c16 17.7 25.8 31.5 25.8 58.9c0 96.5-58.9 104.2-114.8 110.5c9.2 7.9 17 22.9 17 46.4c0 33.7-.3 75.4-.3 83.6c0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252C496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2c1.6 1.6 3.9 2.3 5.2 1c1.3-1 1-3.3-.7-5.2c-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9c1.6 1 3.6.7 4.3-.7c.7-1.3-.3-2.9-2.3-3.9c-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2c2.3 2.3 5.2 2.6 6.5 1c1.3-1.3.7-4.3-1.3-6.2c-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2c-1.4-2.3-4-3.3-5.6-2\"\u002F>",{"left":4,"top":4,"width":26,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":27},448,"\u003Cpath fill=\"currentColor\" d=\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5c0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7c-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5c67.2 0 79.7 44.3 79.7 101.9z\"\u002F>",{"left":4,"top":4,"width":29,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":30},384,"\u003Cpath fill=\"currentColor\" d=\"M290.7 311L95 269.7L86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8l153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24l119.3 160.3l32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":32},"\u003Cpath fill=\"currentColor\" d=\"M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037c-.856 3.061-3.978 3.842-6.755 3.37c4.854.826 6.089 3.562 3.422 6.299c-5.065 5.196-7.28-1.304-7.847-2.97c-.104-.305-.152-.448-.153-.327c0-.121-.05.022-.153.327c-.568 1.666-2.782 8.166-7.847 2.97c-2.667-2.737-1.432-5.473 3.422-6.3c-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026\"\u002F>",{"left":4,"top":4,"width":26,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":34},"\u003Cpath fill=\"currentColor\" d=\"M433 179.11c0-97.2-63.71-125.7-63.71-125.7c-62.52-28.7-228.56-28.4-290.48 0c0 0-63.72 28.5-63.72 125.7c0 115.7-6.6 259.4 105.63 289.1c40.51 10.7 75.32 13 103.33 11.4c50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.5 102.5 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7c56.12-6.7 105-41.3 111.23-72.9c9.8-49.8 9-121.5 9-121.5m-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175c25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5l11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1c23.71 27.3 18.4 53 18.4 175z\"\u002F>",{"left":4,"top":4,"width":18,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":36},"\u003Cpath fill=\"currentColor\" d=\"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48m0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49c-16.841 13.247-50.201 45.072-73.413 44.701c-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646c21.857 17.205 60.134 55.186 103.062 54.955c42.717.231 80.509-37.199 103.053-54.947c49.528-38.783 82.032-64.401 104.947-82.653V400z\"\u002F>",{"left":4,"top":4,"width":26,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":38},"\u003Cpath fill=\"currentColor\" d=\"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041s64.04 28.673 64.04 64.041m175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018c111.832 7.284 201.473 96.702 208.772 208.772c.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79m144.249.288C439.596 229.677 251.465 40.445 16.503 32.01C7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999c191.179 7.839 344.627 161.316 352.465 352.465c.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504\"\u002F>",{"id":40,"title":41,"author":42,"body":43,"comments":420,"date":628,"dateModified":629,"description":630,"extension":631,"headings":632,"heroImage":643,"meta":644,"path":645,"permalink":645,"published":646,"stem":647,"tags":648,"timeToRead":654},"posts\u002Fposts\u002F2016\u002Fnginx-asp-net-core-depth\u002Findex.md","NGINX for ASP.NET Core In-Depth","Muhammad Rehan Saeed",{"type":44,"value":45,"toc":416},"minimark",[46,59,83,95,104,113,116,125,136,145,173,176,179,189,200,213,216,227,240,251,257,285,288,295,306,309,318,330,343,354,374,377,388,396,407,410,413],[47,48,49,53],"blockquote",{},[50,51,52],"p",{},"There are only two things a web server needs to be.....fast.....really fast.....and secure.",[54,55,56],"footer",{},[57,58,42],"cite",{},[60,61,63,82],"h1",{"id":62},"about-nginx",[64,65,68],"a",{"href":66,"aria-hidden":67},"#about-nginx","true",[69,70,76],"svg",{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink","0 0 16 16","1.1",22,[77,78],"path",{"fill":79,"fill-rule":80,"d":81},"currentColor","evenodd","M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z","About NGINX",[50,84,85,94],{},[64,86,93],{"href":87,"rel":88,"target":92},"http:\u002F\u002Fnginx.org\u002F",[89,90,91],"nofollow","noopener","noreferrer","_blank","NGINX"," (Pronounced engine-x) is a popular open source web server. It can act as a reverse proxy server for TCP, UDP, HTTP, HTTPS, SMTP, POP3, and IMAP protocols, as well as a load balancer and a HTTP cache.",[50,96,97,98,103],{},"NGINX in fact ",[64,99,102],{"href":100,"rel":101,"target":92},"https:\u002F\u002Fw3techs.com\u002Fblog\u002Fentry\u002Fnginx_just_became_the_most_used_web_server_among_the_top_1000_websites",[89,90,91],"overtook Apache"," as the most popular web server among the top 1000 websites. After playing with it for a while now, I have to say that I can see why.",[50,105,106,107,112],{},"There are two flavours of NGINX. The first is the open source version which is free, the other is called ",[64,108,111],{"href":109,"rel":110,"target":92},"https:\u002F\u002Fwww.nginx.com\u002Fproducts\u002F",[89,90,91],"NGINX Plus"," and provides some more advanced features (all of which can be replicated with open source plugins but with a lot effort) and proper support but at the cost of a few thousand dollars.",[50,114,115],{},"There is a Windows version of NGINX but I wouldn't recommend using it for real as it doesn't perform as well as the Linux version and it's not as well tested. You can however use it to try out NGINX.",[50,117,118,119,124],{},"Alternatively, if you are running on Windows 10 Anniversary Update, you can install Bash for Windows and install the linux version. However the process is ",[64,120,123],{"href":121,"rel":122,"target":92},"https:\u002F\u002Fwww.svennd.be\u002Frunning-nginx-on-bash-for-windows-10\u002F",[89,90,91],"not that straightforward",". Again, the caveat is that it can only be used for testing and not in production.",[60,126,128,135],{"id":127},"iis-vs-nginx",[64,129,131],{"href":130,"aria-hidden":67},"#iis-vs-nginx",[69,132,133],{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},[77,134],{"fill":79,"fill-rule":80,"d":81},"IIS vs NGINX",[50,137,138,139,144],{},"NGINX has no UI, it's all command line driven but don't let that put you off, the ",[64,140,143],{"href":141,"rel":142,"target":92},"https:\u002F\u002Fwww.nginx.com\u002Fresources\u002Fwiki\u002Fstart\u002Ftopics\u002Ftutorials\u002Fcommandline\u002F",[89,90,91],"CLI interface"," only has three commands you actually need:",[146,147,148,157,163],"ol",{},[149,150,151,152,156],"li",{},"Check my NGINX config (",[153,154,155],"code",{},"nginx -t",").",[149,158,159,160,156],{},"Load my NGINX config (",[153,161,162],{},"nginx -s reload",[149,164,165,166,169,170,156],{},"By default the ",[153,167,168],{},"nginx.conf"," file is located in the NGINX installation folder. You can use that file or your own using (",[153,171,172],{},"nginx -c [nginx.conf File Path]",[50,174,175],{},"IIS on the other hand does have a UI and what a travesty it is. It hasn't really changed for several years and really needs a usability study to hack it to pieces and start again.",[50,177,178],{},"The command line experience for IIS is another matter. It has very powerful IIS extensions you can install and the latest version of IIS even has an API that you can use to make simple HTTP calls to to update it.",[50,180,181,182,184,185,188],{},"Configuration is where NGINX shines. It has a single super simple ",[153,183,168],{}," file which is pretty well documented. IIS is also actually pretty simple to configure if you only rely on the ",[153,186,187],{},"web.config"," file.",[60,190,192,199],{"id":191},"setting-up-nginx",[64,193,195],{"href":194,"aria-hidden":67},"#setting-up-nginx",[69,196,197],{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},[77,198],{"fill":79,"fill-rule":80,"d":81},"Setting up NGINX",[50,201,202,203,208,209,212],{},"The ",[64,204,207],{"href":205,"rel":206,"target":92},"https:\u002F\u002Fdocs.asp.net\u002Fen\u002Flatest\u002Fpublishing\u002Flinuxproduction.html",[89,90,91],"ASP.NET Core Documentation"," site has some very good documentation on how to get started on Ubuntu. Unfortunately, it's not as simple as just installing NGINX using ",[153,210,211],{},"apt-get install nginx",", there are a few moving parts to the process and a lot more moving parts if you want to install any additional modules.",[50,214,215],{},"If you're on Windows, as I mentioned earlier you have the options of installing NGINX using Bash for Windows 10 Anniversary Update but I couldn't get this working. Alternatively you can download the NGINX executable for Windows. If you do this, beware that NGINX tries to start on port 80 and there are a number of things that use that port already on Windows:",[146,217,218,221,224],{},[149,219,220],{},"Skype uses port 80 (Why?), turn it off in the advanced settings.",[149,222,223],{},"Turn off IIS.",[149,225,226],{},"Stop the SQL Server Reporting Services service.",[50,228,229,230,235,236,239],{},"Once you have NGINX setup, you need to run your ASP.NET Core app using the Kestrel web server. Why does ASP.NET Core use two web servers? Well Kestrel is not security hardened enough to be exposed on the internet and it does not have all of the features that a full blown web server like IIS or NGINX has. NGINX takes the role of a ",[64,231,234],{"href":232,"rel":233,"target":92},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FReverse_proxy",[89,90,91],"reverse proxy"," and simply forwards requests to the Kestrel web server. One day this may change. Reliably keeping your ASP.NET Core app running in Linux is also described in the ",[64,237,207],{"href":205,"rel":238,"target":92},[89,90,91],".",[60,241,243,250],{"id":242},"aiming-for-the-perfect-config-file",[64,244,246],{"href":245,"aria-hidden":67},"#aiming-for-the-perfect-config-file",[69,247,248],{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},[77,249],{"fill":79,"fill-rule":80,"d":81},"Aiming For The Perfect Config File",[50,252,253,254,256],{},"You've got NGINX running, all you need now is a ",[153,255,168],{}," file to forward requests from the internet to your ASP.NET Core app running using the Kestrel web server.",[50,258,259,260,265,266,270,271,276,277,280,281,284],{},"I have taken the time to combine the recommendations from the ",[64,261,264],{"href":262,"rel":263,"target":92},"https:\u002F\u002Fgithub.com\u002Fh5bp\u002Fserver-configs-nginx\u002Fblob\u002Fmaster\u002Fnginx.conf",[89,90,91],"HTML5 Boilerplate"," project, the ",[64,267,269],{"href":205,"rel":268,"target":92},[89,90,91],"ASP.NET Core NGINX Documentation",", the ",[64,272,275],{"href":273,"rel":274,"target":92},"http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002F",[89,90,91],"NGINX Docs"," and my own experience to build the ",[153,278,279],{},"nginx.config"," (and ",[153,282,283],{},"mime.types"," file) file below specifically for the best performance and security and to target .NET Core apps.",[50,286,287],{},"Not only that but I've gone to extreme lengths to find out what every setting actually does and have written short comments describing each and every setting. The config file is self describing, from this point forward it needs no explanation.",[289,290],"pre",{"className":291,"language":293,"html":294},[292],"language-text","text","# Configure the Nginx web server to run your ASP.NET Core site efficiently.\n# See https:\u002F\u002Fdocs.asp.net\u002Fen\u002Flatest\u002Fpublishing\u002Flinuxproduction.html\n# See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002F and https:\u002F\u002Fwww.nginx.com\u002Fresources\u002Fwiki\u002F\n\n# Set another default user than root for security reasons.\n# user                      xxx;\n\n# The maximum number of connections for Nginx is calculated by:\n# max_clients = worker_processes * worker_c\nworker_processes            1;\n\n# Maximum file descriptors that can be opened per process\n# This should be &gt; worker_connections\nworker_rlimit_nofile        8192;\n\n# Log errors to the following location. Feel free to change these.\nerror_log                   logs\u002Ferror.log;\n# Log NXingx process errors to the following location. Feel free to change these.\npid                         logs\u002Fnginx.pid;\n\nevents {\n\n    # When you need &gt; 8000 * cpu_cores connections, you start optimizing\n    # your OS, and this is probably the point at where you hire people\n    # who are smarter than you, this is *a lot* of requests.\n    worker_connections      8000;\n\n    # This sets up some smart queueing for accept(2)'ing requests\n    # Set it to \"on\" if you have &gt; worker_processes\n    accept_mutex            off;\n\n    # These settings are OS specific, by defualt Nginx uses select(2),\n    # however, for a large number of requests epoll(2) and kqueue(2)\n    # are generally faster than the default (select(2))\n    # use epoll; # enable for Linux 2.6+\n    # use kqueue; # enable for *BSD (FreeBSD, OS X, ..)\n\n}\n\nhttp {\n\n    # Include MIME type to file extension mappings list.\n    include                 mime.types;\n    # The default fallback MIME type.\n    default_type            application\u002Foctet-stream;\n\n    # Format for our log files.\n    log_format              main '$remote_addr - $remote_user [$time_local]  $status '\n                                 '\"$request\" $body_bytes_sent \"$http_referer\" '\n                                 '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n\n    # Log requests to the following location. Feel free to change this.\n    access_log              logs\u002Faccess.log  main;\n\n    # The number of seconds to keep a connection open.\n    keepalive_timeout       29;\n    # Defines a timeout for reading client request body.\n    client_body_timeout     10;\n    # Defines a timeout for reading client request header.\n    client_header_timeout   10;\n    # Sets a timeout for transmitting a response to the client.\n    send_timeout            10;\n    # Limit requests from an IP address to five requests per second.\n    # See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_limit_req_module.html#limit_req_zone\n    limit_req_zone          $binary_remote_addr zone=one:10m rate=5r\u002Fs;\n\n    # Disables emitting Nginx version in error messages and in the 'Server' HTTP response header.\n    server_tokens           off;\n\n    # To serve static files using Nginx efficiently.\n    sendfile                on;\n    tcp_nopush              on;\n    tcp_nodelay             off;\n\n    # Enable GZIP compression.\n    gzip                    on;\n    # Enable GZIP maximum compression level. Ranges from 1 to 9.\n    gzip_comp_level         9;\n    # Enable GZIP over HTTP 1.0 (The default is HTTP 1.1).\n    gzip_http_version       1.0;\n    # Disable GZIP compression for IE 1 to 6.\n    gzip_disable            \"MSIE [1-6]\\.\"\n    # Enable GZIP compression for the following MIME types (text\u002Fhtml is included by default).\n    gzip_types              # Plain Text\n                            text\u002Fplain\n                            text\u002Fcss\n                            text\u002Fmathml\n                            application\u002Frtf\n                            # JSON\n                            application\u002Fjavascript\n                            application\u002Fjson\n                            application\u002Fmanifest+json\n                            application\u002Fx-web-app-manifest+json\n                            text\u002Fcache-manifest\n                            # XML\n                            application\u002Fatom+xml\n                            application\u002Frss+xml\n                            application\u002Fxslt+xml\n                            application\u002Fxml\n                            # Fonts\n                            font\u002Fopentype\n                            font\u002Fotf\n                            font\u002Ftruetype\n                            application\u002Ffont-woff\n                            application\u002Fvnd.ms-fontobject\n                            application\u002Fx-font-ttf\n                            # Images\n                            image\u002Fsvg+xml\n                            image\u002Fx-icon;\n    # Enables inserting the 'Vary: Accept-Encoding' response header.\n    gzip_vary               on;\n\n    # Sets configuration for a virtual server. You can have multiple virtual servers.\n    # See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_core_module.html#server\n    server {\n\n        # Listen for requests on specified port including support for HTTP 2.0.\n        # See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_core_module.html#listen\n        listen                      80 http2 default;\n        # Or, if using HTTPS, use this:\n        # listen                      443 http2 ssl default;\n        # Configure SSL\u002FTLS\n        # See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fconfiguring_https_servers.html\n        ssl_certificate             \u002Fetc\u002Fssl\u002Fcerts\u002FtestCert.crt;\n        ssl_certificate_key         \u002Fetc\u002Fssl\u002Fcerts\u002FtestCert.key;\n        ssl_protocols               TLSv1.1 TLSv1.2;\n        ssl_prefer_server_ciphers   on;\n        ssl_ciphers                 \"EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH\";\n        ssl_ecdh_curve              secp384r1;\n        ssl_session_cache           shared:SSL:10m;\n        ssl_session_tickets         off;\n        # Ensure your cert is capable before turning on SSL Stapling.\n        ssl_stapling                on;\n        ssl_stapling_verify         on;\n\n        # The name of the virtual server where you can specify one or more domains that you own.\n        server_name                 localhost;\n        # server_name    example.com www.example.com *.example.com www.example.*;\n\n        # Match incoming requests with the following path and forward them to the specified location.\n        # See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_core_module.html#location\n        location \u002F {\n\n            proxy_pass              http:\u002F\u002Flocalhost:1025;\n\n            # The default minimum configuration required for ASP.NET Core\n            # See https:\u002F\u002Fdocs.asp.net\u002Fen\u002Flatest\u002Fpublishing\u002Flinuxproduction.html?highlight=nginx#configure-a-reverse-proxy-server\n            proxy_cache_bypass      $http_upgrade;\n            # Turn off changing the URL's in headers like the 'Location' HTTP header.\n            proxy_redirect          off;\n            # Forwards the Host HTTP header.\n            proxy_set_header        Host $host;\n            # The Kestrel web server we are forwarding requests to only speaks HTTP 1.1.\n            proxy_http_version      1.1;\n            proxy_set_header        Upgrade $http_upgrade;\n            # Adds the 'Connection: keep-alive' HTTP header.\n            proxy_set_header        Connection keep-alive;\n\n            # Sets the maximum allowed size of the client request body.\n            client_max_body_size    10m;\n            # Sets buffer size for reading client request body.\n            client_body_buffer_size 128k;\n            # Defines a timeout for establishing a connection with a proxied server.\n            proxy_connect_timeout   90;\n            # Sets a timeout for transmitting a request to the proxied server.\n            proxy_send_timeout      90;\n            # Defines a timeout for reading a response from the proxied server.\n            proxy_read_timeout      90;\n            # Sets the number and size of the buffers used for reading a response from the proxied server.\n            proxy_buffers           32 4k;\n\n        }\n\n    }\n\n}\n\ntypes {\n\n    # An expanded list of MIME type to file extension mappings for Nginx.\n\n    # Data Interchange\n    application\u002Fatom+xml                  atom;\n    application\u002Fjson                      json map topojson;\n    application\u002Fld+json                   jsonld;\n    application\u002Frss+xml                   rss;\n    application\u002Fvnd.geo+json              geojson;\n    application\u002Fxml                       rdf xml;\n\n    # JavaScript\n    application\u002Fjavascript                js;\n\n    # Manifest files\n    application\u002Fmanifest+json             webmanifest;\n    application\u002Fx-web-app-manifest+json   webapp;\n    text\u002Fcache-manifest                   appcache;\n\n    # Media files\n    audio\u002Fmidi                            mid midi kar;\n    audio\u002Fmp4                             aac f4a f4b m4a;\n    audio\u002Fmpeg                            mp3;\n    audio\u002Fogg                             oga ogg opus;\n    audio\u002Fx-realaudio                     ra;\n    audio\u002Fx-wav                           wav;\n    image\u002Fx-icon                          cur ico;\n    image\u002Fbmp                             bmp;\n    image\u002Fgif                             gif;\n    image\u002Fjpeg                            jpeg jpg;\n    image\u002Fpng                             png;\n    image\u002Fsvg+xml                         svg svgz;\n    image\u002Ftiff                            tif tiff;\n    image\u002Fvnd.wap.wbmp                    wbmp;\n    image\u002Fwebp                            webp;\n    image\u002Fx-jng                           jng;\n    video\u002F3gpp                            3gp 3gpp;\n    video\u002Fmp4                             f4p f4v m4v mp4;\n    video\u002Fmpeg                            mpeg mpg;\n    video\u002Fogg                             ogv;\n    video\u002Fquicktime                       mov;\n    video\u002Fwebm                            webm;\n    video\u002Fx-flv                           flv;\n    video\u002Fx-mng                           mng;\n    video\u002Fx-ms-asf                        asf asx;\n    video\u002Fx-ms-wmv                        wmv;\n    video\u002Fx-msvideo                       avi;\n\n    # Microsoft Office\n    application\u002Fmsword                                                         doc;\n    application\u002Fvnd.ms-excel                                                   xls;\n    application\u002Fvnd.ms-powerpoint                                              ppt;\n    application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document    docx;\n    application\u002Fvnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;\n    application\u002Fvnd.openxmlformats-officedocument.presentationml.presentation  pptx;\n\n    # Web Fonts\n    application\u002Ffont-woff                 woff;\n    application\u002Ffont-woff2                woff2;\n    application\u002Fvnd.ms-fontobject         eot;\n    application\u002Fx-font-ttf                ttc ttf;\n    font\u002Fopentype                         otf;\n\n    # Other\n    application\u002Fjava-archive              ear jar war;\n    application\u002Fmac-binhex40              hqx;\n    application\u002Foctet-stream              bin deb dll dmg exe img iso msi msm msp safariextz;\n    application\u002Fpdf                       pdf;\n    application\u002Fpostscript                ai eps ps;\n    application\u002Frtf                       rtf;\n    application\u002Fvnd.google-earth.kml+xml  kml;\n    application\u002Fvnd.google-earth.kmz      kmz;\n    application\u002Fvnd.wap.wmlc              wmlc;\n    application\u002Fx-7z-compressed           7z;\n    application\u002Fx-bb-appworld             bbaw;\n    application\u002Fx-bittorrent              torrent;\n    application\u002Fx-chrome-extension        crx;\n    application\u002Fx-cocoa                   cco;\n    application\u002Fx-java-archive-diff       jardiff;\n    application\u002Fx-java-jnlp-file          jnlp;\n    application\u002Fx-makeself                run;\n    application\u002Fx-opera-extension         oex;\n    application\u002Fx-perl                    pl pm;\n    application\u002Fx-pilot                   pdb prc;\n    application\u002Fx-rar-compressed          rar;\n    application\u002Fx-redhat-package-manager  rpm;\n    application\u002Fx-sea                     sea;\n    application\u002Fx-shockwave-flash         swf;\n    application\u002Fx-stuffit                 sit;\n    application\u002Fx-tcl                     tcl tk;\n    application\u002Fx-x509-ca-cert            crt der pem;\n    application\u002Fx-xpinstall               xpi;\n    application\u002Fxhtml+xml                 xhtml;\n    application\u002Fxslt+xml                  xsl;\n    application\u002Fzip                       zip;\n    text\u002Fcss                              css;\n    text\u002Fhtml                             htm html shtml;\n    text\u002Fmathml                           mml;\n    text\u002Fplain                            txt;\n    text\u002Fvcard                            vcard vcf;\n    text\u002Fvnd.rim.location.xloc            xloc;\n    text\u002Fvnd.sun.j2me.app-descriptor      jad;\n    text\u002Fvnd.wap.wml                      wml;\n    text\u002Fvtt                              vtt;\n    text\u002Fx-component                      htc;\n\n}\n",[60,296,298,305],{"id":297},"nginx-modules",[64,299,301],{"href":300,"aria-hidden":67},"#nginx-modules",[69,302,303],{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},[77,304],{"fill":79,"fill-rule":80,"d":81},"NGINX Modules",[50,307,308],{},"Like IIS, NGINX has modules that you can add to it, to provide extra features. There are a number of them out there. I've listed two that I care about and you should too.",[50,310,311,312,317],{},"Installing modules is best done by downloading the NGINX source, as well as the modules you need and then compiling the application. There is a feature called ",[64,313,316],{"href":314,"rel":315,"target":92},"https:\u002F\u002Fwww.nginx.com\u002Fblog\u002Fdynamic-modules-nginx-1-9-11\u002F",[89,90,91],"dynamic modules"," which lets you dynamically load additional separate modules after installing NGINX but the link suggests third party modules may not be supported so I didn't try it out.",[319,320,322,329],"h2",{"id":321},"http-20",[64,323,325],{"href":324,"aria-hidden":67},"#http-20",[69,326,327],{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},[77,328],{"fill":79,"fill-rule":80,"d":81},"HTTP 2.0",[50,331,202,332,337,338,342],{},[64,333,336],{"href":334,"rel":335,"target":92},"http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_v2_module.html",[89,90,91],"ngx_http_v2_module"," module lets you use ",[64,339,329],{"href":340,"rel":341,"target":92},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHTTP\u002F2",[89,90,91],". HTTP 2.0 gives your site a very rough ~3-5% performance boost and that's before using any of it's more advanced features which not many people are using yet.",[319,344,346,353],{"id":345},"brotli-compression",[64,347,349],{"href":348,"aria-hidden":67},"#brotli-compression",[69,350,351],{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},[77,352],{"fill":79,"fill-rule":80,"d":81},"Brotli Compression",[50,355,202,356,361,362,367,368,373],{},[64,357,360],{"href":358,"rel":359,"target":92},"http:\u002F\u002Fngx_brotli",[89,90,91],"ngx_brotli"," module lets NGINX use the ",[64,363,366],{"href":364,"rel":365,"target":92},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBrotli",[89,90,91],"Brotli"," compression algorithm. If you haven't heard about Brotli, you should take note. Brotli is a compression algorithm built by Google and is perhaps set to take over from GZIP as the compression algorithm of the web. It's already ",[64,369,372],{"href":370,"rel":371,"target":92},"http:\u002F\u002Fcaniuse.com\u002F#search=brotli",[89,90,91],"fully supported"," on Firefox, Chrome and Opera with only Edge lagging behind.",[50,375,376],{},"Depending on how much extra CPU power you are wanting to use (it can max out your CPU at the highest compression levels, which could DoS your site if someone makes too many requests, so be careful what compression level you choose), Brotli can compress files and save you around 10-20% bandwidth over what GZIP can do! Those are some significant savings.",[60,378,380,387],{"id":379},"net-boxed",[64,381,383],{"href":382,"aria-hidden":67},"#net-boxed",[69,384,385],{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},[77,386],{"fill":79,"fill-rule":80,"d":81},".NET Boxed",[50,389,390,391,395],{},"I have updated the ",[64,392,387],{"href":393,"rel":394,"target":92},"https:\u002F\u002Fgithub.com\u002FDotnet-Boxed\u002FTemplates\u002F",[89,90,91]," project template, so you can now choose the web server (IIS or NGINX) you want to use. If you choose to use NGINX, you can have it pre-configured just for you, right out of the box.",[60,397,399,406],{"id":398},"conclusions",[64,400,402],{"href":401,"aria-hidden":67},"#conclusions",[69,403,404],{"xmlns":71,"xmlns:xlink":72,"viewBox":73,"version":74,"width":75,"height":75,"aria-hidden":67},[77,405],{"fill":79,"fill-rule":80,"d":81},"Conclusions",[50,408,409],{},"The main reason, I've been taking a serious look at NGINX is hard cash. Running Linux servers in the cloud can costs around half the price of a Windows server. Also, you can nab yourself some pretty big performance wins by using the modules I've listed.",[50,411,412],{},"There are some interesting overlaps between ASP.NET Core and NGINX. Both can be used to serve static files, HTTP headers, GZIP files etc. I think ASP.NET Core is slowly going to take on more of the role that traditionally was the preserve of the web server.",[50,414,415],{},"The cool thing is that because ASP.NET Core is just C#, we'll have a lot of power to configure things using code. NGINX lets you do more advanced configuration using the Lua language and soon even in JavaScript but putting that logic in the app where it belongs and where you can do powerful things makes sense to me.",{"title":417,"searchDepth":418,"depth":418,"links":419},"",2,[],{"issue":421,"comments":425},{"number":422,"title":423,"html_url":424},97,"[Comment] NGINX for ASP.NET Core In-Depth","https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97",[426,438,446,454,462,470,478,486,494,502,510,518,526,534,542,550,558,566,575,583,591,599,607,619],{"id":427,"html_url":428,"body_html":429,"created_at":430,"updated_at":430,"author_association":431,"user":432,"reactions":436},627268103,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268103","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fc7d06c34130c15c167787fcf8e01adc263633dc5ba648d07f6caf1b110765ee0\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f66346663356661626338323466633962393065663163663835616436653566343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Johan\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fc7d06c34130c15c167787fcf8e01adc263633dc5ba648d07f6caf1b110765ee0\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f66346663356661626338323466633962393065663163663835616436653566343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Johan\u003C\u002Fstrong> commented on \u003Cstrong>2016-09-13 16:40:45\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Not often that I comment on a post like this but this is good. I'm sold on Nginx and trying to figure out .Net Core.\u003Cbr \u002F>\nThe only missing part here, is Charting, with live data (SignalR + DependencyCache, OnChange).\u003C\u002Fp>\n\u003Cp>By the way, thanks for sharing.\u003C\u002Fp>","2020-05-12T10:54:54Z","OWNER",{"login":433,"avatar_url":434,"html_url":435},"RehanSaeed","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2270364?v=4","https:\u002F\u002Fgithub.com\u002FRehanSaeed",{"url":437,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268103\u002Freactions",{"id":439,"html_url":440,"body_html":441,"created_at":442,"updated_at":442,"author_association":431,"user":443,"reactions":444},627268140,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268140","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F17733da7ded9e198c90a42362606880840b10811f2f5d1f15ecc0d0b202557d4\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f37356639633733636537313365333539346437633263383232333138313262363f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Os1r1s110\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F17733da7ded9e198c90a42362606880840b10811f2f5d1f15ecc0d0b202557d4\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f37356639633733636537313365333539346437633263383232333138313262363f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Os1r1s110\u003C\u002Fstrong> commented on \u003Cstrong>2016-11-18 16:43:44\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Really nice article with in-depth details about nginx configuration. Gives much better configuration than default files found in ASP.NET Core tutorials.\u003C\u002Fp>\n\u003Cp>What would you think about adding pagespeed module in the pipeline, would it be a good idea\u002Fworth it? I know some of the features are redundant but I wonder if it could get an even further performance boost. What do you think?\u003C\u002Fp>","2020-05-12T10:55:01Z",{"login":433,"avatar_url":434,"html_url":435},{"url":445,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268140\u002Freactions",{"id":447,"html_url":448,"body_html":449,"created_at":450,"updated_at":450,"author_association":431,"user":451,"reactions":452},627268194,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268194","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2016-11-27 07:49:49\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Really nice article with in-depth details about nginx configuration. Gives much better configuration than default files found in ASP.NET Core tutorials.\u003C\u002Fp>\n\u003Cp>What would you think about adding pagespeed module in the pipeline, would it be a good idea\u002Fworth it? I know some of the features are redundant but I wonder if it could get an even further performance boost. What do you think?\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Ideally you should build your site so it is optimized in the first place, so you shouldn't need to run a tool like this which adds it's own performance penalty. You can see what this tool is doing and replicate that in your app. That said, I'm not very familiar with this tool. Best thing to do is try it and see when it comes to performance.\u003C\u002Fp>","2020-05-12T10:55:08Z",{"login":433,"avatar_url":434,"html_url":435},{"url":453,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268194\u002Freactions",{"id":455,"html_url":456,"body_html":457,"created_at":458,"updated_at":458,"author_association":431,"user":459,"reactions":460},627268241,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268241","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fb714103c4be30ad8ea9765d96d094f98a119c737e93545f13053d31433114766\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f30646135643533303336643533376538653030636333323263666538326430383f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Tim\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fb714103c4be30ad8ea9765d96d094f98a119c737e93545f13053d31433114766\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f30646135643533303336643533376538653030636333323263666538326430383f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Tim\u003C\u002Fstrong> commented on \u003Cstrong>2017-05-05 09:08:08\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Great article thanks - very helpful.\u003Cbr \u002F>\nDo you separate the server blocks into the sites-available folder?\u003Cbr \u002F>\nAnd do you know if this configuration works with Fail2Ban?  I know I need to make sure the log file locations match - but I wasn't sure how custom log_format might affect Fail2Ban - any idea?\u003Cbr \u002F>\nRegards\u003Cbr \u002F>\nTim\u003C\u002Fp>","2020-05-12T10:55:15Z",{"login":433,"avatar_url":434,"html_url":435},{"url":461,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268241\u002Freactions",{"id":463,"html_url":464,"body_html":465,"created_at":466,"updated_at":466,"author_association":431,"user":467,"reactions":468},627268296,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268296","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-05-05 14:41:03\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Great article thanks - very helpful.\u003Cbr \u002F>\nDo you separate the server blocks into the sites-available folder?\u003Cbr \u002F>\nAnd do you know if this configuration works with Fail2Ban?  I know I need to make sure the log file locations match - but I wasn't sure how custom log_format might affect Fail2Ban - any idea?\u003Cbr \u002F>\nRegards\u003Cbr \u002F>\nTim\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Not sure what you mean about separating the server blocks. I've never used Fail2Ban either (I'd recommend using Cloudflare as well or perhaps instead if you worry about bad traffic).\u003C\u002Fp>","2020-05-12T10:55:21Z",{"login":433,"avatar_url":434,"html_url":435},{"url":469,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268296\u002Freactions",{"id":471,"html_url":472,"body_html":473,"created_at":474,"updated_at":474,"author_association":431,"user":475,"reactions":476},627268339,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268339","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fb714103c4be30ad8ea9765d96d094f98a119c737e93545f13053d31433114766\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f30646135643533303336643533376538653030636333323263666538326430383f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Tim\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fb714103c4be30ad8ea9765d96d094f98a119c737e93545f13053d31433114766\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f30646135643533303336643533376538653030636333323263666538326430383f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Tim\u003C\u002Fstrong> commented on \u003Cstrong>2017-05-06 01:39:59\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Not sure what you mean about separating the server blocks. I've never used Fail2Ban either (I'd recommend using Cloudflare as well or perhaps instead if you worry about bad traffic).\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Thanks Rehan\u003C\u002Fp>\n\u003Cp>FYI - regarding splitting out the content of \u003Ccode>nginx.conf\u003C\u002Fcode> into site-specifc and other config-specific files take a look \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fwww.nginx.com\u002Fblog\u002Ftutorial-proxy-net-core-kestrel-nginx-plus\u002F\">here\u003C\u002Fa>.\u003Cbr \u002F>\n\"...several NGINX distributions (as well as NGINX Plus) follow the convention that you do not place much actual configuration in the main file, but instead create smaller, function specific files in a subdirectory of \u003Ccode>\u002Fetc\u002Fnginx\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cp>For open source NGINX builds provided by \u003Ccode>nginx.org\u003C\u002Fcode>, and for NGINX Plus, the directory is \u003Ccode>\u002Fetc\u002Fnginx\u002Fconf.d\u003C\u002Fcode>, and the default file for HTTP virtual servers is \u003Ccode>default.conf\u003C\u002Fcode>.\u003Cbr \u002F>\nFor open source NGINX builds distributed with Ubuntu, the directory is \u003Ccode>\u002Fetc\u002Fnginx\u002Fsites-enabled\u003C\u002Fcode>, and the default file for HTTP virtual servers is \u003Ccode>default\u003C\u002Fcode>.\u003Cbr \u002F>\nThe content of the function specific files in these directories is then read into the main (\u003Ccode>nginx.conf\u003C\u002Fcode>) file with an include directive, for example:\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>include \u002Fetc\u002Fnginx\u002Fconf.d\u002F*.conf;\ninclude \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F*;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>After a fresh install of Nginx on Ubuntu it has these include's within the http block.  So using your config,  I would split out the server blocks into a site-specific file within the sites-available directory, then create a symbolic link to it within the sites-enabled directory (sites-available and sites-enabled directories are created as part of the Nginx install). The net effect at run time is the same as your config, except you can more easily manage multiple websites this way.\u003Cbr \u002F>\nUnfortunately this is not documented well in the Nginx docs - but mentioned in plenty of other articles around the web.\u003C\u002Fp>","2020-05-12T10:55:28Z",{"login":433,"avatar_url":434,"html_url":435},{"url":477,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268339\u002Freactions",{"id":479,"html_url":480,"body_html":481,"created_at":482,"updated_at":482,"author_association":431,"user":483,"reactions":484},627268390,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268390","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fc2e758635b1adb77418bc572ada354611eaa3d9dd0c0ceb3f6ab631834bbe092\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39363561356333396231373939666230393639396433346564666235376233663f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Vasko Mihailov\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fc2e758635b1adb77418bc572ada354611eaa3d9dd0c0ceb3f6ab631834bbe092\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39363561356333396231373939666230393639396433346564666235376233663f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"http:\u002F\u002Fkvdev.com\u002F\">Vasko Mihailov\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-05-29 12:56:39\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Thanks for sharing ur knowledge!\u003C\u002Fp>\n\u003Cp>Is it possible to host multiple asp.net core web apps on a single nginx server?\u003Cbr \u002F>\nIf so can you please provide some tips and tricks.\u003C\u002Fp>\n\u003Cp>Thanks a lot.\u003C\u002Fp>","2020-05-12T10:55:36Z",{"login":433,"avatar_url":434,"html_url":435},{"url":485,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268390\u002Freactions",{"id":487,"html_url":488,"body_html":489,"created_at":490,"updated_at":490,"author_association":431,"user":491,"reactions":492},627268429,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268429","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-05-29 13:26:20\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Thanks for sharing ur knowledge!\u003C\u002Fp>\n\u003Cp>Is it possible to host multiple asp.net core web apps on a single nginx server?\u003Cbr \u002F>\nIf so can you please provide some tips and tricks.\u003C\u002Fp>\n\u003Cp>Thanks a lot.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Yes that's possible. You just need a \u003Ccode>server\u003C\u002Fcode> element in your config for each app.\u003C\u002Fp>","2020-05-12T10:55:43Z",{"login":433,"avatar_url":434,"html_url":435},{"url":493,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268429\u002Freactions",{"id":495,"html_url":496,"body_html":497,"created_at":498,"updated_at":498,"author_association":431,"user":499,"reactions":500},627268470,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268470","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fc2e758635b1adb77418bc572ada354611eaa3d9dd0c0ceb3f6ab631834bbe092\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39363561356333396231373939666230393639396433346564666235376233663f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Vasko Mihailov\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fc2e758635b1adb77418bc572ada354611eaa3d9dd0c0ceb3f6ab631834bbe092\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39363561356333396231373939666230393639396433346564666235376233663f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"http:\u002F\u002Fkvdev.com\u002F\">Vasko Mihailov\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-05-30 18:22:00\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Yes that's possible. You just need a \u003Ccode>server\u003C\u002Fcode> element in your config for each app.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Thank you for your advice.\u003C\u002Fp>\n\u003Cp>My confusion comes from \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fweblog.west-wind.com\u002Fposts\u002F2016\u002FJun\u002F06\u002FPublishing-and-Running-ASPNET-Core-Applications-with-IIS\">this article\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Somewhere before the end of the article the author claims this:\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>First and foremost, if you want to have multiple applications running on a single server that all share port 80 and port 443 you can't run Kestrel directly. Kestrel doesn't support host header routing which is required to allow multiple port 80 bindings on a single IP address. Without IIS (or http.sys actually) you currently can't do this using Kestrel alone (and I think this is not planned either).\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>I am sorry if it is not allowed to quote other authors in your posts. If so it is OK with me to delete it.\u003C\u002Fp>\n\u003Cp>Thanks again.\u003C\u002Fp>","2020-05-12T10:55:49Z",{"login":433,"avatar_url":434,"html_url":435},{"url":501,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268470\u002Freactions",{"id":503,"html_url":504,"body_html":505,"created_at":506,"updated_at":506,"author_association":431,"user":507,"reactions":508},627268510,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268510","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-05-31 09:18:50\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Thank you for your advice.\u003C\u002Fp>\n\u003Cp>My confusion comes from \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fweblog.west-wind.com\u002Fposts\u002F2016\u002FJun\u002F06\u002FPublishing-and-Running-ASPNET-Core-Applications-with-IIS\">this article\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Somewhere before the end of the article the author claims this:\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>First and foremost, if you want to have multiple applications running on a single server that all share port 80 and port 443 you can't run Kestrel directly. Kestrel doesn't support host header routing which is required to allow multiple port 80 bindings on a single IP address. Without IIS (or http.sys actually) you currently can't do this using Kestrel alone (and I think this is not planned either).\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>I am sorry if it is not allowed to quote other authors in your posts. If so it is OK with me to delete it.\u003C\u002Fp>\n\u003Cp>Thanks again.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>The Kestrel web server does not support SNI which lets you run multiple sites on the same port (usually port 80 and\u002For 443 on a production site). If you want SNI, use the WebListener (Now renamed HttpSysServer) web server instead.\u003C\u002Fp>","2020-05-12T10:55:56Z",{"login":433,"avatar_url":434,"html_url":435},{"url":509,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268510\u002Freactions",{"id":511,"html_url":512,"body_html":513,"created_at":514,"updated_at":514,"author_association":431,"user":515,"reactions":516},627268572,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268572","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fc2e758635b1adb77418bc572ada354611eaa3d9dd0c0ceb3f6ab631834bbe092\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39363561356333396231373939666230393639396433346564666235376233663f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Vasko Mihailov\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fc2e758635b1adb77418bc572ada354611eaa3d9dd0c0ceb3f6ab631834bbe092\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39363561356333396231373939666230393639396433346564666235376233663f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"http:\u002F\u002Fkvdev.com\u002F\">Vasko Mihailov\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-06-01 20:16:31\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>The Kestrel web server does not support SNI which lets you run multiple sites on the same port (usually port 80 and\u002For 443 on a production site). If you want SNI, use the WebListener (Now renamed HttpSysServer) web server instead.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Thanks. That will do the trick I hope.\u003Cbr \u002F>\nBy the way, do you have any clues about performance comparison between IIS and Linux+Nginx?\u003Cbr \u002F>\nThere are a lot talks on the net that can be found but it will be great to have your personal opinion.\u003C\u002Fp>\n\u003Cp>Thanks.\u003C\u002Fp>","2020-05-12T10:56:03Z",{"login":433,"avatar_url":434,"html_url":435},{"url":517,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268572\u002Freactions",{"id":519,"html_url":520,"body_html":521,"created_at":522,"updated_at":522,"author_association":431,"user":523,"reactions":524},627268614,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268614","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-06-02 12:04:56\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Thanks. That will do the trick I hope.\u003Cbr \u002F>\nBy the way, do you have any clues about performance comparison between IIS and Linux+Nginx?\u003Cbr \u002F>\nThere are a lot talks on the net that can be found but it will be great to have your personal opinion.\u003C\u002Fp>\n\u003Cp>Thanks.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>NGINX is faster than IIS.\u003C\u002Fp>","2020-05-12T10:56:10Z",{"login":433,"avatar_url":434,"html_url":435},{"url":525,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268614\u002Freactions",{"id":527,"html_url":528,"body_html":529,"created_at":530,"updated_at":530,"author_association":431,"user":531,"reactions":532},627268674,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268674","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F930b1c3fb4ecbc466af807f08f9a0da512f617c02eee5de87963199e46a58259\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f38343537356162306161306538363730323961353534383264363739376134643f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Karnesh Kumar\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F930b1c3fb4ecbc466af807f08f9a0da512f617c02eee5de87963199e46a58259\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f38343537356162306161306538363730323961353534383264363739376134643f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Karnesh Kumar\u003C\u002Fstrong> commented on \u003Cstrong>2017-07-12 10:46:06\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Hi,\u003Cbr \u002F>\nIs it possible to host asp.net website at NGINX server with below requirement.\u003Cbr \u002F>\nDeveloped in\u003C\u002Fp>\n\u003Cul>\n\u003Cli>ASP.NET Website (not a MVC)\u003C\u002Fli>\n\u003Cli>Targeted framework 4.5.6\u003C\u002Fli>\n\u003Cli>SQL Server 2014\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Please help me.\u003C\u002Fp>","2020-05-12T10:56:16Z",{"login":433,"avatar_url":434,"html_url":435},{"url":533,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268674\u002Freactions",{"id":535,"html_url":536,"body_html":537,"created_at":538,"updated_at":538,"author_association":431,"user":539,"reactions":540},627268733,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268733","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-07-23 12:32:13\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Hi,\u003Cbr \u002F>\nIs it possible to host asp.net website at NGINX server with below requirement.\u003Cbr \u002F>\nDeveloped in\u003C\u002Fp>\n\u003Cul>\n\u003Cli>ASP.NET Website (not a MVC)\u003C\u002Fli>\n\u003Cli>Targeted framework 4.5.6\u003C\u002Fli>\n\u003Cli>SQL Server 2014\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Please help me.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Not unless you use IIS too.\u003C\u002Fp>","2020-05-12T10:56:23Z",{"login":433,"avatar_url":434,"html_url":435},{"url":541,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268733\u002Freactions",{"id":543,"html_url":544,"body_html":545,"created_at":546,"updated_at":546,"author_association":431,"user":547,"reactions":548},627268778,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268778","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fa0fc60c689e91bd173dc930082ec18588d081300b9a08114b3ff88b660a9b816\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39383432336463613766356131633733623664326330343463376662343965613f733d393626643d6d6d26723d67\">\u003Cimg alt=\"elbarto\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fa0fc60c689e91bd173dc930082ec18588d081300b9a08114b3ff88b660a9b816\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39383432336463613766356131633733623664326330343463376662343965613f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>elbarto\u003C\u002Fstrong> commented on \u003Cstrong>2017-09-18 23:59:59\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Hello,\u003C\u002Fp>\n\u003Cp>could you also explain how to use a subdirectory instead of \u003Ccode>\u002F\u003C\u002Fcode>? For example:\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>http:\u002F\u002Flocalhost\u002Ftest\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>I don't get that running, it just happens nothing at all when you browse.\u003C\u002Fp>\n\u003Cp>Thanks!\u003C\u002Fp>","2020-05-12T10:56:30Z",{"login":433,"avatar_url":434,"html_url":435},{"url":549,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268778\u002Freactions",{"id":551,"html_url":552,"body_html":553,"created_at":554,"updated_at":554,"author_association":431,"user":555,"reactions":556},627268832,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268832","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-09-19 09:12:07\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Hello,\u003C\u002Fp>\n\u003Cp>could you also explain how to use a subdirectory instead of \u003Ccode>\u002F\u003C\u002Fcode>? For example:\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>http:\u002F\u002Flocalhost\u002Ftest\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>I don't get that running, it just happens nothing at all when you browse.\u003C\u002Fp>\n\u003Cp>Thanks!\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>You can just use the sub-directory name i.e. \u003Ccode>\u002Ftest\u003C\u002Fcode>.\u003C\u002Fp>","2020-05-12T10:56:37Z",{"login":433,"avatar_url":434,"html_url":435},{"url":557,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268832\u002Freactions",{"id":559,"html_url":560,"body_html":561,"created_at":562,"updated_at":562,"author_association":431,"user":563,"reactions":564},627268881,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268881","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fbb239a2c9da1ef2124f4e033b9a8f3b8fe498589cde6be0eef68d6b8af79c350\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f31653133626266376133623261353135356136646266653463653330643436373f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Nathan\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fbb239a2c9da1ef2124f4e033b9a8f3b8fe498589cde6be0eef68d6b8af79c350\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f31653133626266376133623261353135356136646266653463653330643436373f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Nathan\u003C\u002Fstrong> commented on \u003Cstrong>2018-01-13 10:20:01\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Hi, wonderful post.I am just starting out using Nginx and .NET Core.I have set it up on a Linux Ubuntu server.However I am facing problems with loading the images, js and css files, it gives me a 404.And also whilst I can see the home page, other paths like \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"http:\u002F\u002Fsomewhere.com\u002FAbout\">http:\u002F\u002Fsomewhere.com\u002FAbout\u003C\u002Fa> gives a 404 as well.Do I need to configure any forwarding rules in Nginx for this to work?\u003C\u002Fp>","2020-05-12T10:56:43Z",{"login":433,"avatar_url":434,"html_url":435},{"url":565,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268881\u002Freactions",{"id":567,"html_url":568,"body_html":569,"created_at":570,"updated_at":571,"author_association":431,"user":572,"reactions":573},627268936,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268936","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F0c4c5c1ea637a82e6badb6412f437a7a900eaf14460304328bcbe78075294d33\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f63666332393232333230393262386538653037636331363635656334383231343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Joe Castro\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F0c4c5c1ea637a82e6badb6412f437a7a900eaf14460304328bcbe78075294d33\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f63666332393232333230393262386538653037636331363635656334383231343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Joe Castro\u003C\u002Fstrong> commented on \u003Cstrong>2018-02-11 22:05:45\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Thanks for the article!!!! Good stuff !!! I modified it using nginx-rtmp-module sample code below on CentoOS :)\u003C\u002Fp>\n\u003Cp>For Compiling Nginx\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>.\u002Fconfigure --prefix=\u002Fetc\u002Fnginx             --sbin-path=\u002Fusr\u002Fsbin\u002Fnginx             --modules-path=\u002Fusr\u002Flib64\u002Fnginx\u002Fmodules             --conf-path=\u002Fetc\u002Fnginx\u002Fnginx.conf             --error-log-path=\u002Fvar\u002Flog\u002Fnginx\u002Ferror.log             --pid-path=\u002Fvar\u002Frun\u002Fnginx.pid             --lock-path=\u002Fvar\u002Frun\u002Fnginx.lock             --user=nginx             --group=nginx             --build=CentOS             --builddir=nginx-1.13.3             --with-select_module             --with-poll_module             --with-threads             --with-file-aio             --with-http_ssl_module             --with-http_v2_module             --with-http_realip_module             --with-http_addition_module             --with-http_xslt_module=dynamic             --with-http_image_filter_module=dynamic             --with-http_geoip_module=dynamic             --with-http_sub_module             --with-http_dav_module             --with-http_flv_module             --with-http_mp4_module             --with-http_gunzip_module             --with-http_gzip_static_module             --with-http_auth_request_module             --with-http_random_index_module             --with-http_secure_link_module             --with-http_degradation_module             --with-http_slice_module             --with-http_stub_status_module             --http-log-path=\u002Fvar\u002Flog\u002Fnginx\u002Faccess.log             --http-client-body-temp-path=\u002Fvar\u002Fcache\u002Fnginx\u002Fclient_temp             --http-proxy-temp-path=\u002Fvar\u002Fcache\u002Fnginx\u002Fproxy_temp             --http-fastcgi-temp-path=\u002Fvar\u002Fcache\u002Fnginx\u002Ffastcgi_temp             --http-uwsgi-temp-path=\u002Fvar\u002Fcache\u002Fnginx\u002Fuwsgi_temp             --http-scgi-temp-path=\u002Fvar\u002Fcache\u002Fnginx\u002Fscgi_temp             --with-mail=dynamic             --with-mail_ssl_module             --with-stream=dynamic             --with-stream_ssl_module             --with-stream_realip_module             --with-stream_geoip_module=dynamic             --with-stream_ssl_preread_module             --with-compat             --with-pcre=..\u002Fpcre-8.40             --with-pcre-jit             --with-zlib=..\u002Fzlib-1.2.11             --with-openssl=..\u002Fopenssl-1.1.0f             --with-openssl-opt=..\u002Fno-nextprotoneg         --add-module=..\u002Fnginx-rtmp-module             --with-debug\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Mime Types\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>types {\n    text\u002Fhtml                             html htm shtml;\n    text\u002Fcss                              css;\n    text\u002Fxml                              xml;\n    image\u002Fgif                             gif;\n    image\u002Fjpeg                            jpeg jpg;\n    application\u002Fjavascript                js;\n    application\u002Fatom+xml                  atom;\n    application\u002Frss+xml                   rss;\n\n    text\u002Fmathml                           mml;\n    text\u002Fplain                            txt;\n    text\u002Fvnd.sun.j2me.app-descriptor      jad;\n    text\u002Fvnd.wap.wml                      wml;\n    text\u002Fx-component                      htc;\n\n    image\u002Fpng                             png;\n    image\u002Ftiff                            tif tiff;\n    image\u002Fvnd.wap.wbmp                    wbmp;\n    image\u002Fx-icon                          ico;\n    image\u002Fx-jng                           jng;\n    image\u002Fx-ms-bmp                        bmp;\n    image\u002Fsvg+xml                         svg svgz;\n    image\u002Fwebp                            webp;\n\n    application\u002Ffont-woff                 woff;\n    application\u002Fjava-archive              jar war ear;\n    application\u002Fjson                      json;\n    application\u002Fmac-binhex40              hqx;\n    application\u002Fmsword                    doc;\n    application\u002Fpdf                       pdf;\n    application\u002Fpostscript                ps eps ai;\n    application\u002Frtf                       rtf;\n    application\u002Fvnd.apple.mpegurl         m3u8;\n    application\u002Fvnd.ms-excel              xls;\n    application\u002Fvnd.ms-fontobject         eot;\n    application\u002Fvnd.ms-powerpoint         ppt;\n    application\u002Fvnd.wap.wmlc              wmlc;\n    application\u002Fvnd.google-earth.kml+xml  kml;\n    application\u002Fvnd.google-earth.kmz      kmz;\n    application\u002Fx-7z-compressed           7z;\n    application\u002Fx-cocoa                   cco;\n    application\u002Fx-java-archive-diff       jardiff;\n    application\u002Fx-java-jnlp-file          jnlp;\n    application\u002Fx-makeself                run;\n    application\u002Fx-perl                    pl pm;\n    application\u002Fx-pilot                   prc pdb;\n    application\u002Fx-rar-compressed          rar;\n    application\u002Fx-redhat-package-manager  rpm;\n    application\u002Fx-sea                     sea;\n    application\u002Fx-shockwave-flash         swf;\n    application\u002Fx-stuffit                 sit;\n    application\u002Fx-tcl                     tcl tk;\n    application\u002Fx-x509-ca-cert            der pem crt;\n    application\u002Fx-xpinstall               xpi;\n    application\u002Fxhtml+xml                 xhtml;\n    application\u002Fxspf+xml                  xspf;\n    application\u002Fzip                       zip;\n\n    application\u002Foctet-stream              bin exe dll;\n    application\u002Foctet-stream              deb;\n    application\u002Foctet-stream              dmg;\n    application\u002Foctet-stream              iso img;\n    application\u002Foctet-stream              msi msp msm;\n\n    application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document    docx;\n    application\u002Fvnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;\n    application\u002Fvnd.openxmlformats-officedocument.presentationml.presentation  pptx;\n\n    audio\u002Fmidi                            mid midi kar;\n    audio\u002Fmpeg                            mp3;\n    audio\u002Fogg                             ogg;\n    audio\u002Fx-m4a                           m4a;\n    audio\u002Fx-realaudio                     ra;\n\n    video\u002F3gpp                            3gpp 3gp;\n    video\u002Fmp2t                            ts;\n    video\u002Fmp4                             mp4;\n    video\u002Fmpeg                            mpeg mpg;\n    video\u002Fquicktime                       mov;\n    video\u002Fwebm                            webm;\n    video\u002Fx-flv                           flv;\n    video\u002Fx-m4v                           m4v;\n    video\u002Fx-mng                           mng;\n    video\u002Fx-ms-asf                        asx asf;\n    video\u002Fx-ms-wmv                        wmv;\n    video\u002Fx-msvideo                       avi;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Update \u003Ccode>nginx.conf\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>Configure the Nginx web server to run your ASP.NET Core site efficiently.\u003C\u002Fp>\n\u003Cp>See \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fdocs.asp.net\u002Fen\u002Flatest\u002Fpublishing\u002Flinuxproduction.html\">https:\u002F\u002Fdocs.asp.net\u002Fen\u002Flatest\u002Fpublishing\u002Flinuxproduction.html\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>See \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002F\">http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002F\u003C\u002Fa> and \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fwww.nginx.com\u002Fresources\u002Fwiki\u002F\">https:\u002F\u002Fwww.nginx.com\u002Fresources\u002Fwiki\u002F\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>Set another default user than root for security reasons.\u003C\u002Fp>\n\u003Cp>user nginx;\u003C\u002Fp>\n\u003Cp>The maximum number of connections for Nginx is calculated by:\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>max_clients = worker_processes * worker_c\n\nworker_processes 1;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Maximum file descriptors that can be opened per process\u003C\u002Fp>\n\u003Cp>This should be &gt; worker_connections\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>worker_rlimit_nofile 8192;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Log errors to the following location. Feel free to change these.\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>error_log logs\u002Ferror.log;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Log NXingx process errors to the following location. Feel free to change these.\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Ccode>pid logs\u002Fnginx.pid;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cdiv>\u003Cpre>\u003Ccode>events {\n    # When you need &gt; 8000 * cpu_cores connections, you start optimizing\n    # your OS, and this is probably the point at where you hire people\n    # who are smarter than you, this is *a lot* of requests.\n    worker_connections 8000;\n\n    # This sets up some smart queueing for accept(2)'ing requests\n    # Set it to \"on\" if you have &gt; worker_processes\n    accept_mutex off;\n\n    # These settings are OS specific, by defualt Nginx uses select(2),\n    # however, for a large number of requests epoll(2) and kqueue(2)\n    # are generally faster than the default (select(2))\n    # use epoll; # enable for Linux 2.6+\n    # use kqueue; # enable for *BSD (FreeBSD, OS X, ..)\n}\n\nhttp {\n# Include MIME type to file extension mappings list.\ninclude                 mime.types;\n# The default fallback MIME type.\ndefault_type            application\u002Foctet-stream;\n\n# Format for our log files.\nlog_format              main '$remote_addr - $remote_user [$time_local]  $status '\n                             '\"$request\" $body_bytes_sent \"$http_referer\" '\n                             '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n\n# Log requests to the following location. Feel free to change this.\naccess_log              logs\u002Faccess.log  main;\n\n# The number of seconds to keep a connection open.\nkeepalive_timeout       29;\n# Defines a timeout for reading client request body.\nclient_body_timeout     10;\n# Defines a timeout for reading client request header.\nclient_header_timeout   10;\n# Sets a timeout for transmitting a response to the client.\nsend_timeout            10;\n# Limit requests from an IP address to five requests per second.\n# See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_limit_req_module.html#limit_req_zone\nlimit_req_zone          $binary_remote_addr zone=one:10m rate=5r\u002Fs;\n\n# Disables emitting Nginx version in error messages and in the 'Server' HTTP response header.\nserver_tokens           off;\n\n# To serve static files using Nginx efficiently.\nsendfile                on;\ntcp_nopush              on;\ntcp_nodelay             off;\n\n# Enable GZIP compression.\ngzip                    on;\n# Enable GZIP maximum compression level. Ranges from 1 to 9.\ngzip_comp_level         9;\n# Enable GZIP over HTTP 1.0 (The default is HTTP 1.1).\ngzip_http_version       1.0;\n# Disable GZIP compression for IE 1 to 6.\ngzip_disable            \"MSIE [1-6]\\.\"\n# Enable GZIP compression for the following MIME types (text\u002Fhtml is included by default).\ngzip_types              # Plain Text\n                        text\u002Fplain\n                        text\u002Fcss\n                        text\u002Fmathml\n                        application\u002Frtf\n                        # JSON\n                        application\u002Fjavascript\n                        application\u002Fjson\n                        application\u002Fmanifest+json\n                        application\u002Fx-web-app-manifest+json\n                        text\u002Fcache-manifest\n                        # XML\n                        application\u002Fatom+xml\n                        application\u002Frss+xml\n                        application\u002Fxslt+xml\n                        application\u002Fxml\n                        # Fonts\n                        font\u002Fopentype\n                        font\u002Fotf\n                        font\u002Ftruetype\n                        application\u002Ffont-woff\n                        application\u002Fvnd.ms-fontobject\n                        application\u002Fx-font-ttf\n                        # Images\n                        image\u002Fsvg+xml\n                        image\u002Fx-icon;\n            # Video\n            application\u002Fvnd.apple.mpegurl;\n            video\u002Fmp2t;\n            video\u002F3gpp;                            \n                video\u002Fmp2t;                           \n            video\u002Fmp4;                             \n            video\u002Fmpeg;                            \n                video\u002Fquicktime;                       \n                video\u002Fwebm;                            \n                video\u002Fx-flv;                          \n                video\u002Fx-m4v;                           \n                video\u002Fx-mng;                          \n                video\u002Fx-ms-asf;                       \n                video\u002Fx-ms-wmv;                        \n                video\u002Fx-msvideo;                      \n\n# Enables inserting the 'Vary: Accept-Encoding' response header.\ngzip_vary               on;\n\n# Configuration Use for Virtual Sites\n# mkdir -p \u002Fetc\u002Fnginx\u002Fsites-available\u002F\n# mkdir -p \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F\n# mkdir -p \u002Fvar\u002Fwww\u002Fexample.com\u002Flogs\u002F\n# Create Symbolic Link\n# ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fexample.com.conf \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fexample.com.conf\ninclude \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F*.conf;\nserver_names_hash_bucket_size 64;\n\n# Sets configuration for a virtual server. You can have multiple virtual servers.\n# See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_core_module.html#server\nserver {\n\n    # Listen for requests on specified port including support for HTTP 2.0.\n    # See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_core_module.html#listen\n    listen                      80 http2 default;\n    # Or, if using HTTPS, use this:\n    listen                      443 http2 ssl default;\n    # Configure SSL\u002FTLS\n    # See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fconfiguring_https_servers.html\n    ssl_certificate             \u002Fetc\u002Fssl\u002Fcerts\u002F*.crt;\n    ssl_certificate_key         \u002Fetc\u002Fssl\u002Fcerts\u002F*.key;\n    ssl_protocols               TLSv1.1 TLSv1.2;\n    ssl_prefer_server_ciphers   on;\n    ssl_ciphers                 \"EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH\";\n    ssl_ecdh_curve              secp384r1;\n    ssl_session_cache           shared:SSL:10m;\n    ssl_session_tickets         off;\n    # Ensure your cert is capable before turning on SSL Stapling.\n    ssl_stapling                on;\n    ssl_stapling_verify         on;\n\n    # The name of the virtual server where you can specify one or more domains that you own.\n    server_name localhost;\n    # server_name    example.com www.example.com *.example.com www.example.*;\n\n    # Match incoming requests with the following path and forward them to the specified location.\n    # See http:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_core_module.html#location\n    location \u002F {\n        proxy_pass              http:\u002F\u002Flocalhost:1025;\n        proxy_pass              https:\u002F\u002Flocalhost:1025;\n\n        # The default minimum configuration required for ASP.NET Core\n        # See https:\u002F\u002Fdocs.asp.net\u002Fen\u002Flatest\u002Fpublishing\u002Flinuxproduction.html?highlight=nginx#configure-a-reverse-proxy-server\n        proxy_cache_bypass      $http_upgrade;\n        # Turn off changing the URL's in headers like the 'Location' HTTP header.\n        proxy_redirect          off;\n        # Forwards the Host HTTP header.\n        proxy_set_header        Host $host;\n        # The Kestrel web server we are forwarding requests to only speaks HTTP 1.1.\n        proxy_http_version      1.1;\n        proxy_set_header        Upgrade $http_upgrade;\n        # Adds the 'Connection: keep-alive' HTTP header.\n        proxy_set_header        Connection keep-alive;\n\n        # Sets the maximum allowed size of the client request body.\n        client_max_body_size    10m;\n        # Sets buffer size for reading client request body.\n        client_body_buffer_size 128k;\n        # Defines a timeout for establishing a connection with a proxied server.\n        proxy_connect_timeout   90;\n        # Sets a timeout for transmitting a request to the proxied server.\n        proxy_send_timeout      90;\n        # Defines a timeout for reading a response from the proxied server.\n        proxy_read_timeout      90;\n        # Sets the number and size of the buffers used for reading a response from the proxied server.\n        proxy_buffers           32 4k;\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>","2020-05-12T10:56:50Z","2020-05-12T11:52:33Z",{"login":433,"avatar_url":434,"html_url":435},{"url":574,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268936\u002Freactions",{"id":576,"html_url":577,"body_html":578,"created_at":579,"updated_at":579,"author_association":431,"user":580,"reactions":581},627268985,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627268985","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fd2cda70ce545219b9a426e933dc0260d2944b3c4a34877f6309b96ec78a4f240\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39663533316533373866616231623239633264393762396632363264323032313f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Swapnil\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fd2cda70ce545219b9a426e933dc0260d2944b3c4a34877f6309b96ec78a4f240\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39663533316533373866616231623239633264393762396632363264323032313f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Swapnil\u003C\u002Fstrong> commented on \u003Cstrong>2018-04-06 06:45:13\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Hi Friend.\u003C\u002Fp>\n\u003Cp>i need to host my ASP.NET Core 2.1 with angular5 app in nginx. i am using MongoDB database.\u003C\u002Fp>\n\u003Cp>Please help.\u003C\u002Fp>","2020-05-12T10:56:57Z",{"login":433,"avatar_url":434,"html_url":435},{"url":582,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627268985\u002Freactions",{"id":584,"html_url":585,"body_html":586,"created_at":587,"updated_at":587,"author_association":431,"user":588,"reactions":589},627269040,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627269040","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2018-04-16 09:14:05\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Hi Friend.\u003C\u002Fp>\n\u003Cp>i need to host my ASP.NET Core 2.1 with angular5 app in nginx. i am using MongoDB database.\u003C\u002Fp>\n\u003Cp>Please help.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Please learn to use StackOverflow like everybody else.\u003C\u002Fp>","2020-05-12T10:57:04Z",{"login":433,"avatar_url":434,"html_url":435},{"url":590,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627269040\u002Freactions",{"id":592,"html_url":593,"body_html":594,"created_at":595,"updated_at":595,"author_association":431,"user":596,"reactions":597},627269074,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627269074","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fbb584d3589eea54975528557310a8717a63bb318369dd2b8d8b7313a69a0bf75\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32356565653433333038366436656662396465363265626261653762666235643f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Andrew Simpson\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fbb584d3589eea54975528557310a8717a63bb318369dd2b8d8b7313a69a0bf75\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32356565653433333038366436656662396465363265626261653762666235643f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Andrew Simpson\u003C\u002Fstrong> commented on \u003Cstrong>2019-08-06 12:03:20\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Hi, I have been trying to configure this to use websockets.  I have searched for quite some time, Plenty of examples using node.js but I just want to use Javascript as the client and asp.net c# as the 'other-end'.  I believe it is NGINX that is stopping things working as it works under IIS\u003C\u002Fp>","2020-05-12T10:57:12Z",{"login":433,"avatar_url":434,"html_url":435},{"url":598,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627269074\u002Freactions",{"id":600,"html_url":601,"body_html":602,"created_at":603,"updated_at":603,"author_association":431,"user":604,"reactions":605},627269124,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-627269124","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F80ff6568ce54b867e9d0cec86d6d786341a7c6e4ae0a93dbc9edc011bb15cc58\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33313762616137326366316436613566383332323331383366663063383131363f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Anuj Garg\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F80ff6568ce54b867e9d0cec86d6d786341a7c6e4ae0a93dbc9edc011bb15cc58\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33313762616137326366316436613566383332323331383366663063383131363f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Anuj Garg\u003C\u002Fstrong> commented on \u003Cstrong>2019-10-21 06:28:04\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Hi Rehan,\u003Cbr \u002F>\nNice article! I am trying to use nginx with ASP.NET Core and it works fine except OIDC path.\u003Cbr \u002F>\nWhen it goes to signin-oidc path, it give me 504 gateway timeout.\u003Cbr \u002F>\nI am wondering if it is due to header length or i need to specify port to open in asp.net specifically.\u003Cbr \u002F>\nI have it running it in docker and it works in my Machine but not on Fargate.\u003Cbr \u002F>\nAny clue would help.\u003Cbr \u002F>\nThanks!\u003C\u002Fp>","2020-05-12T10:57:19Z",{"login":433,"avatar_url":434,"html_url":435},{"url":606,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627269124\u002Freactions",{"id":608,"html_url":609,"body_html":610,"created_at":611,"updated_at":611,"author_association":612,"user":613,"reactions":617},1025455100,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-1025455100","\u003Cp>How do you allow nginx 'localhost' CORS access from a remote browser to web page ajax call via \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"http:\u002F\u002Flocalhost\u002F\">http:\u002F\u002Flocalhost\u003C\u002Fa> or \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Flocalhost:5001\u002F\">https:\u002F\u002Flocalhost:5001\u003C\u002Fa>. It works in curl, but browser (Firefox, Chrome, Safari) all block localhost, even when listed as trusted by aspnetcore 6 middleware.\u003C\u002Fp>","2022-01-31T07:35:54Z","NONE",{"login":614,"avatar_url":615,"html_url":616},"BainMcKay","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2262709?v=4","https:\u002F\u002Fgithub.com\u002FBainMcKay",{"url":618,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F1025455100\u002Freactions",{"id":620,"html_url":621,"body_html":622,"created_at":623,"updated_at":624,"author_association":431,"user":625,"reactions":626},1025659220,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F97#issuecomment-1025659220","\u003Cblockquote>\n\u003Cp>How do you allow nginx 'localhost' CORS access from a remote browser to web page ajax call via \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"http:\u002F\u002Flocalhost\u002F\">http:\u002F\u002Flocalhost\u003C\u002Fa> or \u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Flocalhost:5001\u002F\">https:\u002F\u002Flocalhost:5001\u003C\u002Fa>. It works in curl, but browser (Firefox, Chrome, Safari) all block localhost, even when listed as trusted by aspnetcore 6 middleware.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>This sounds like a good question to ask on StackOverflow.\u003C\u002Fp>","2022-01-31T11:52:50Z","2022-01-31T11:53:32Z",{"login":433,"avatar_url":434,"html_url":435},{"url":627,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F1025659220\u002Freactions","2016-08-21T00:00:00+00:00",null,"NGINX is a popular open source web server. It can act as a reverse proxy server for ASP.NET Core web apps. How to configure NGINX for ASP.NET Core.","md",[633,635,636,637,638,639,640,641,642],{"depth":634,"value":82},1,{"depth":634,"value":135},{"depth":634,"value":199},{"depth":634,"value":250},{"depth":634,"value":305},{"depth":418,"value":329},{"depth":418,"value":353},{"depth":634,"value":387},{"depth":634,"value":406},"\u002Fimages\u002Fhero\u002FNGINX-1366x768.png",{},"\u002Fnginx-asp-net-core-depth\u002F",true,"posts\u002F2016\u002Fnginx-asp-net-core-depth\u002Findex",[649,387,366,329,650,651,652,93,653],"ASP.NET Core","IIS","Internet Information Services (IIS)","Kestrel","Web Server",11,[656,660,664,669,674,677,680,684,688,692,695,699,704,707,710,714,718,722,725,728,732,736,739,744,749,753,756,759,762,767,771,774,779,783,787,791,794,798,802,806,810,814,818,822,825,829,833,837,838,841,845,849,852,855,859,863,868,872,876,880,884,888,892,895,898,901,905,909,912,915,918,921,924,927,931,935,938,941,945,949,952,955,958,962,966,970,974,977,980,985,988,991,995,998,1002,1006,1009,1013,1016,1019,1023,1027,1031],{"title":657,"permalink":658,"heroImage":659,"timeToRead":634},"Just Start - The First Blog Post","\u002Fjust-start-the-first-blog-post\u002F","\u002Fimages\u002Fhero\u002FJust-Start-1366x768.png",{"title":661,"permalink":662,"heroImage":663,"timeToRead":418},"ConfigureAwait in Task Parallel Library (TPL)","\u002Fconfigureawait-task-parallel-library\u002F","\u002Fimages\u002Fhero\u002FMicrosoft-.NET-1366x768.png",{"title":665,"permalink":666,"heroImage":667,"timeToRead":668},"Stop The Brace Wars, Use StyleCop","\u002Fstop-brace-wars-use-stylecop\u002F","\u002Fimages\u002Fhero\u002FStyleCop-1366x768.png",3,{"title":670,"permalink":671,"heroImage":672,"timeToRead":673},"Reactive Extensions (Rx) - Part 1 - Replacing C# Events","\u002Freactive-extensions-part1-replacing-events\u002F","\u002Fimages\u002Fhero\u002FReactive-Extensions-1366x768.png",4,{"title":675,"permalink":676,"heroImage":672,"timeToRead":668},"Reactive Extensions (Rx) - Part 2 - Wrapping C# Events","\u002Freactive-extensions-part2-wrapping-events\u002F",{"title":678,"permalink":679,"heroImage":672,"timeToRead":418},"Reactive Extensions (Rx) - Part 3 - Naming Conventions","\u002Freactive-extensions-part3-naming-conventions\u002F",{"title":681,"permalink":682,"heroImage":683,"timeToRead":668},"WPF Metro Part 1 - Modern UI for WPF","\u002Fwpf-metro-part1-modern-ui-for-wpf\u002F","\u002Fimages\u002Fhero\u002FModern-UI-for-WPF-1366x768.png",{"title":685,"permalink":686,"heroImage":687,"timeToRead":668},"WPF Metro Part 2 - MahApps Metro","\u002Fwpf-metro-part2-mahapps-metro\u002F","\u002Fimages\u002Fhero\u002FMahApps-Metro-1366x768.png",{"title":689,"permalink":690,"heroImage":691,"timeToRead":668},"Windows 8.1 TouchScreen Gaming Laptops","\u002Fwindows-8-touchscreen-gaming-laptops\u002F","\u002Fimages\u002Fhero\u002FFry-Shutup-And-Take-My-Money-1366x768.png",{"title":693,"permalink":694,"heroImage":672,"timeToRead":668},"Reactive Extensions (Rx) - Part 4 - Replacing Timers","\u002Freactive-extensions-part4-replacing-timers\u002F",{"title":696,"permalink":697,"heroImage":698,"timeToRead":418},"WPF Metro Part 3 - Elysium","\u002Fwpf-metro-part3-elysium\u002F","\u002Fimages\u002Fhero\u002FElysium-1366x768.png",{"title":700,"permalink":701,"heroImage":702,"timeToRead":703},"WPF Metro Part 4 - Elysium Extra","\u002Fwpf-metro-part4-elysium-extra\u002F","\u002Fimages\u002Fhero\u002FElysium-Extra-1366x768.png",8,{"title":705,"permalink":706,"heroImage":672,"timeToRead":673},"Reactive Extensions (Rx) - Part 5 - Awaiting Observables","\u002Freactive-extensions-part5-awaiting-observables\u002F",{"title":708,"permalink":709,"heroImage":663,"timeToRead":703},"GetHashCode Made Easy","\u002Fgethashcode-made-easy\u002F",{"title":711,"permalink":712,"heroImage":672,"timeToRead":713},"Reactive Extensions (Rx) - Part 6 - Task ToObservable","\u002Freactive-extensions-part6-task-toobservable\u002F",5,{"title":715,"permalink":716,"heroImage":717,"timeToRead":634},"Portable Class Library (PCL) version of NotificationsExtensions NuGet package","\u002Fportable-class-library-version-of-notificationsextensions-nuget-package\u002F","\u002Fimages\u002Fhero\u002FNuGet-1366x768.png",{"title":719,"permalink":720,"heroImage":721,"timeToRead":713},"Model-View-ViewModel (MVVM) - Part 1 - Overview","\u002Fmodel-view-viewmodel-mvvm-part1-overview\u002F","\u002Fimages\u002Fhero\u002FMVVM-1366x768.png",{"title":723,"permalink":724,"heroImage":721,"timeToRead":673},"Model-View-ViewModel (MVVM) - Part 2 - IDisposable","\u002Fmodel-view-viewmodel-mvvm-part2-idisposable\u002F",{"title":726,"permalink":727,"heroImage":721,"timeToRead":654},"Model-View-ViewModel (MVVM) - Part 3 - INotifyPropertyChanged","\u002Fmodel-view-viewmodel-mvvm-part3-inotifypropertychanged\u002F",{"title":729,"permalink":730,"heroImage":731,"timeToRead":668},"Naming Conventions","\u002Fnaming-conventions\u002F","\u002Fimages\u002Fhero\u002FNaming-Conventions-1366x768.png",{"title":733,"permalink":734,"heroImage":721,"timeToRead":735},"Model-View-ViewModel (MVVM) - Part 4 - INotifyDataErrorInfo","\u002Fmodel-view-viewmodel-mvvm-part4-inotifydataerrorinfo\u002F",12,{"title":737,"permalink":738,"heroImage":702,"timeToRead":673},"Elysium Extra 1.1 Released","\u002Felysium-extra-1-1-released\u002F",{"title":740,"permalink":741,"heroImage":742,"timeToRead":743},"ASP.NET Core Boilerplate","\u002Fasp-net-mvc-boilerplate\u002F","\u002Fimages\u002Fhero\u002FASP.NET-Core-Boilerplate-1366x768.png",7,{"title":745,"permalink":746,"heroImage":747,"timeToRead":748},"Internet Favicon Madness (Updated)","\u002Finternet-favicon-madness\u002F","\u002Fimages\u002Fhero\u002FFavicons-1366x768.png",17,{"title":750,"permalink":751,"heroImage":752,"timeToRead":743},"Custom Visual Studio Project Templates","\u002Fcustom-visual-studio-project-templates\u002F","\u002Fimages\u002Fhero\u002FVisual-Studio-1366x768.png",{"title":754,"permalink":755,"heroImage":752,"timeToRead":668},"Configuration File Transforms In Visual Studio Should Be Built In","\u002Fconfiguration-file-transforms-in-visual-studio-should-be-built-in\u002F",{"title":757,"permalink":758,"heroImage":742,"timeToRead":654},"Securing the ASP.NET MVC Web.config","\u002Fsecuring-the-aspnet-mvc-web-config\u002F",{"title":760,"permalink":761,"heroImage":672,"timeToRead":418},"Reactive Extensions (Rx) - Part 7 - Sample Events","\u002Freactive-extensions-part7-sample-events\u002F",{"title":763,"permalink":764,"heroImage":765,"timeToRead":766},"NWebSec ASP.NET MVC Security Through HTTP Headers","\u002Fnwebsec-asp-net-mvc-security-through-http-headers\u002F","\u002Fimages\u002Fhero\u002FNWebSec-1366x768.png",6,{"title":768,"permalink":769,"heroImage":770,"timeToRead":75},"Content Security Policy (CSP) for ASP.NET MVC","\u002Fcontent-security-policy-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FContent-Security-Policy-CSP-for-ASP.NET-MVC-1366x768.png",{"title":772,"permalink":773,"heroImage":663,"timeToRead":713},"C# 6.0 - Saving Developers From Themselves","\u002Fc-6-0-saving-developers-from-themselves\u002F",{"title":775,"permalink":776,"heroImage":777,"timeToRead":778},"Building RSS\u002FAtom Feeds for ASP.NET MVC","\u002Fbuilding-rssatom-feeds-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FRSS-And-Atom-1366x768.png",19,{"title":780,"permalink":781,"heroImage":782,"timeToRead":654},"Canonical URL's for ASP.NET MVC","\u002Fcanonical-urls-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FLink-Juice-1366x768.png",{"title":784,"permalink":785,"heroImage":786,"timeToRead":673},"Dynamically Generating Robots.txt Using ASP.NET MVC","\u002Fdynamically-generating-robots-txt-using-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FRobots.txt-1366x768.jpg",{"title":788,"permalink":789,"heroImage":790,"timeToRead":673},"Minifying HTML for ASP.NET MVC","\u002Fminifying-html-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FThe-Internet-Is-A-Series-Of-Tubes-1366x768.jpg",{"title":792,"permalink":793,"heroImage":742,"timeToRead":418},"Whats New in ASP.NET Core Boilerplate","\u002Fwhats-new-in-asp-net-5-mvc-6-boilerplate\u002F",{"title":795,"permalink":796,"heroImage":797,"timeToRead":743},"Dynamically Generating Sitemap.xml for ASP.NET MVC","\u002Fdynamically-generating-sitemap-xml-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FSitemaps-1366x768.png",{"title":799,"permalink":800,"heroImage":801,"timeToRead":418},"So I've Been Awarded Microsoft MVP Status!","\u002Fso-ive-been-awarded-microsoft-mvp-status\u002F","\u002Fimages\u002Fhero\u002FMicrosoft-MVP-1366x768.png",{"title":803,"permalink":804,"heroImage":805,"timeToRead":634},".NET Big-O Algorithm Complexity Cheat Sheet","\u002Fnet-big-o-algorithm-complexity-cheat-sheet\u002F","\u002Fimages\u002Fhero\u002FNET-Big-O-Algorithm-Complexity-Cheat-Sheet-1366x768.jpg",{"title":807,"permalink":808,"heroImage":809,"timeToRead":668},"Logging with Serilog.Exceptions","\u002Flogging-with-serilog-exceptions\u002F","\u002Fimages\u002Fhero\u002FSerilog.Exceptions-1366x768.png",{"title":811,"permalink":812,"heroImage":813,"timeToRead":634},"Make Certificate","\u002Fmake-certificate\u002F","\u002Fimages\u002Fhero\u002FMake-Certificate-1366x768.png",{"title":815,"permalink":816,"heroImage":817,"timeToRead":418},"Colorful.Console","\u002Fcolorful-console\u002F","\u002Fimages\u002Fhero\u002FColorful.Console-1366x768.png",{"title":819,"permalink":820,"heroImage":821,"timeToRead":668},"Subresource Integrity TagHelper Using ASP.NET Core - Part 1","\u002Fsubresource-integrity-taghelper-using-asp-net-core\u002F","\u002Fimages\u002Fhero\u002FMake-Security-Easy-1366x768.png",{"title":823,"permalink":824,"heroImage":821,"timeToRead":673},"Subresource Integrity TagHelper Using ASP.NET Core - Part 2","\u002Fsubresource-integrity-taghelper-using-asp-net-core-part-2\u002F",{"title":826,"permalink":827,"heroImage":828,"timeToRead":713},"Social TagHelpers for ASP.NET Core","\u002Fsocial-taghelpers-for-asp-net-core\u002F","\u002Fimages\u002Fhero\u002FSocial-Media-1366x768.png",{"title":830,"permalink":831,"heroImage":832,"timeToRead":766},"Azure Active Directory Versus Identity Server","\u002Fazure-active-directory-versus-identity-server\u002F","\u002Fimages\u002Fhero\u002FAzure-Active-Directory-Versus-Identity-Server-1366x768.png",{"title":834,"permalink":835,"heroImage":836,"timeToRead":418},"ASP.NET Core Fluent Interface Extensions","\u002Fasp-net-core-fluent-interface-extensions\u002F","\u002Fimages\u002Fhero\u002FFluent-Interface-All-The-Things-1366x768.png",{"title":41,"permalink":645,"heroImage":643,"timeToRead":654},{"title":839,"permalink":840,"heroImage":663,"timeToRead":418},"The Dotnet Watch Tool","\u002Fthe-dotnet-watch-tool\u002F",{"title":842,"permalink":843,"heroImage":844,"timeToRead":673},"Making Application Insights Fast & Secure","\u002Fmaking-application-insights-fast-and-secure\u002F","\u002Fimages\u002Fhero\u002FApplication-Insights-1366x768.png",{"title":846,"permalink":847,"heroImage":848,"timeToRead":743},"SEO Friendly URL's for ASP.NET Core","\u002Fseo-friendly-urls-asp-net-core\u002F","\u002Fimages\u002Fhero\u002FSearch-Engine-Optimization-SEO-1366x768.png",{"title":850,"permalink":851,"heroImage":672,"timeToRead":634},"Reactive Extensions (Rx) - Part 8 - Timeouts","\u002Freactive-extensions-rx-part-8-timeouts\u002F",{"title":853,"permalink":854,"heroImage":663,"timeToRead":673},"Custom Project Templates Using dotnet new","\u002Fcustom-project-templates-using-dotnet-new\u002F",{"title":856,"permalink":857,"heroImage":858,"timeToRead":703},"Cross-Platform DevOps for .NET Core","\u002Fcross-platform-devops-net-core\u002F","\u002Fimages\u002Fhero\u002FDotnet-Cake-AppVeyor-Travis-1366x768.png",{"title":860,"permalink":861,"heroImage":862,"timeToRead":743},"Cleaning Up CSPROJ","\u002Fcleaning-up-csproj\u002F","\u002Fimages\u002Fhero\u002FCleaning-Up-CSPROJ-1366x768.png",{"title":864,"permalink":865,"heroImage":866,"timeToRead":867},"dotnet new Feature Selection","\u002Fdotnet-new-feature-selection\u002F","\u002Fimages\u002Fhero\u002FWho-Wants-To-Be-A-Millionaire-1366x768.png",9,{"title":869,"permalink":870,"heroImage":871,"timeToRead":673},"ASP.NET Core Lazy Command Pattern","\u002Fasp-net-core-lazy-command-pattern\u002F","\u002Fimages\u002Fhero\u002FASP.NET-Core-Lazy-Command-Pattern-1366x768.png",{"title":873,"permalink":874,"heroImage":875,"timeToRead":418},"Structured Data using Schema.NET","\u002Fstructured-data-using-schema-net\u002F","\u002Fimages\u002Fhero\u002FSchema.NET-1366x768.png",{"title":877,"permalink":878,"heroImage":879,"timeToRead":766},"Keeping Up With Software Development","\u002Fkeeping-software-development\u002F","\u002Fimages\u002Fhero\u002FKeeping-up-with-Software-Development-1366x768.png",{"title":881,"permalink":882,"heroImage":883,"timeToRead":418},"A Very Generic .editorconfig File (Updated)","\u002Fgeneric-editorconfig-file\u002F","\u002Fimages\u002Fhero\u002FA-Very-Generic-Editorconfig-File-1366x768.png",{"title":885,"permalink":886,"heroImage":887,"timeToRead":713},"ASP.NET Core Caching in Practice","\u002Fasp-net-core-caching-in-practice\u002F","\u002Fimages\u002Fhero\u002FASP.NET-Core-Caching-in-Practice-1366x768.png",{"title":889,"permalink":890,"heroImage":891,"timeToRead":634},"Docker Read-Only File Systems","\u002Fdocker-read-file-systems\u002F","\u002Fimages\u002Fhero\u002FDocker-1366x768.png",{"title":893,"permalink":894,"heroImage":891,"timeToRead":668},"Docker Labels in Depth","\u002Fdocker-labels-depth\u002F",{"title":896,"permalink":897,"heroImage":891,"timeToRead":673},"Useful Docker Images - Part 1","\u002Fuseful-docker-images-part1\u002F",{"title":899,"permalink":900,"heroImage":891,"timeToRead":713},"Useful Docker Images - Part 2","\u002Fuseful-docker-images-part2\u002F",{"title":902,"permalink":903,"heroImage":904,"timeToRead":673},"Writing your Webpack configuration in TypeScript","\u002Fwriting-your-webpack-configuration-in-typescript\u002F","\u002Fimages\u002Fhero\u002FTypeScript-1366x768.png",{"title":906,"permalink":907,"heroImage":908,"timeToRead":713},"Writing Code while Asleep","\u002Fwriting-code-asleep\u002F","\u002Fimages\u002Fhero\u002FWhile-Alive-Eat-Sleep-Code-Repeat-1366x768.png",{"title":910,"permalink":911,"heroImage":663,"timeToRead":418},"The Dotnet Watch Tool Revisited","\u002Fthe-dotnet-watch-tool-revisited\u002F",{"title":387,"permalink":913,"heroImage":914,"timeToRead":418},"\u002Fnet-boxed\u002F","\u002Fimages\u002Fhero\u002FDotnet-Boxed-1366x768.png",{"title":916,"permalink":917,"heroImage":663,"timeToRead":418},"Migrating to Entity Framework Core Seed Data","\u002Fmigrating-to-entity-framework-core-seed-data\u002F",{"title":919,"permalink":920,"heroImage":663,"timeToRead":668},"Optimally Configuring Entity Framework Core","\u002Foptimally-configuring-entity-framework-core\u002F",{"title":922,"permalink":923,"heroImage":663,"timeToRead":634},"ASP.NET Core Hidden Gem - QueryHelpers","\u002Fasp-net-core-hidden-gem-queryhelpers\u002F",{"title":925,"permalink":926,"heroImage":663,"timeToRead":867},"Optimally Configuring ASP.NET Core HttpClientFactory","\u002Foptimally-configuring-asp-net-core-httpclientfactory\u002F",{"title":928,"permalink":929,"heroImage":930,"timeToRead":743},"PluralSight vs LinkedIn Learning vs FrontendMasters vs Egghead.io vs YouTube","\u002Fpluralsight-vs-linkedin-learning-vs-frontendmasters-vs-egghead-io-vs-youtube\u002F","\u002Fimages\u002Fhero\u002FOnline-Learning-1366x768.png",{"title":932,"permalink":933,"heroImage":934,"timeToRead":867},"Is ASP.NET Core now a Mature Platform?","\u002Fis-asp-net-core-now-a-mature-platform\u002F","\u002Fimages\u002Fhero\u002FRocket-1366x768.jpg",{"title":936,"permalink":937,"heroImage":914,"timeToRead":867},"A Simple and Fast Object Mapper","\u002Fa-simple-and-fast-object-mapper\u002F",{"title":939,"permalink":940,"heroImage":891,"timeToRead":634},"Securing ASP.NET Core in Docker","\u002Fsecuring-asp-net-core-in-docker\u002F",{"title":942,"permalink":943,"heroImage":944,"timeToRead":673},"Git Cloning the Windows OS Repo","\u002Fgit-cloning-the-windows-os-repo\u002F","\u002Fimages\u002Fhero\u002FWindows-1366x768.png",{"title":946,"permalink":947,"heroImage":948,"timeToRead":743},".gitattributes Best Practices","\u002Fgitattributes-best-practices\u002F","\u002Fimages\u002Fhero\u002FGit-1366x768.png",{"title":950,"permalink":951,"heroImage":663,"timeToRead":668},"Unit Testing dotnet new Templates","\u002Funit-testing-dotnet-new-templates\u002F",{"title":953,"permalink":954,"heroImage":914,"timeToRead":713},"What dotnet new Could Be","\u002Fwhat-dotnet-new-could-be\u002F",{"title":956,"permalink":957,"heroImage":663,"timeToRead":673},"ASP.NET Core Integration Testing & Mocking using Moq","\u002Fasp-net-core-integration-testing-mocking-using-moq\u002F",{"title":959,"permalink":960,"heroImage":961,"timeToRead":743},"Choosing a Static Site Generator","\u002Fchoosing-a-static-site-generator\u002F","\u002Fimages\u002Fhero\u002FStatic-Site-Generators-1600x900.png",{"title":963,"permalink":964,"heroImage":965,"timeToRead":418},"Spicing up your Browser Console","\u002Fspicing-up-your-browser-console\u002F","\u002Fimages\u002Fhero\u002FFiglet-Fonts-1600x900.png",{"title":967,"permalink":968,"heroImage":969,"timeToRead":713},"Racism in Software Development & Beyond","\u002Fracism-in-software-development-and-beyond\u002F","\u002Fimages\u002Fhero\u002FBlack-Glowing-Fist-1600x900.png",{"title":971,"permalink":972,"heroImage":973,"timeToRead":713},"The Easiest Way to Version NuGet Packages","\u002Fthe-easiest-way-to-version-nuget-packages\u002F","\u002Fimages\u002Fhero\u002FSemantic-Versioning-1600x900.png",{"title":975,"permalink":976,"heroImage":717,"timeToRead":766},"The Fastest NuGet Package Ever Published (Probably)","\u002Fthe-fastest-nuget-package-ever-published-probably\u002F",{"title":978,"permalink":979,"heroImage":663,"timeToRead":668},"Automating .NET Security Updates","\u002Fautomating-dotnet-security-updates\u002F",{"title":981,"permalink":982,"heroImage":983,"timeToRead":984},"Deep Dive into Open Telemetry for .NET","\u002Fdeep-dive-into-open-telemetry-for-net\u002F","\u002Fimages\u002Fhero\u002FOpen-Telemetry-1600x900.png",10,{"title":986,"permalink":987,"heroImage":983,"timeToRead":668},"Open Telemetry for ASP.NET Core","\u002Fopen-telemetry-for-asp-net-core\u002F",{"title":989,"permalink":990,"heroImage":983,"timeToRead":668},"Exporting Open Telemetry Data to Jaeger","\u002Fexporting-open-telemetry-data-to-jaeger\u002F",{"title":992,"permalink":993,"heroImage":994,"timeToRead":668},"A System for Grouping & Sorting CSS Properties","\u002Fsystem-for-grouping-and-sorting-css-properties\u002F","\u002Fimages\u002Fhero\u002FCSS-1600x900.png",{"title":996,"permalink":997,"heroImage":994,"timeToRead":766},"CSS General Rules of Thumb","\u002Fcss-general-rules-of-thumb\u002F",{"title":999,"permalink":1000,"heroImage":1001,"timeToRead":673},"Web Component Custom Element Gotchas","\u002Fweb-component-custom-element-gotchas\u002F","\u002Fimages\u002Fhero\u002FWeb-Components-1600x900.png",{"title":1003,"permalink":1004,"heroImage":1005,"timeToRead":418},"Code Coverage & Frontend Testing","\u002Fcode-coverage-and-frontend-testing\u002F","\u002Fimages\u002Fhero\u002FJest-Cypress-1600x900.png",{"title":1007,"permalink":1008,"heroImage":752,"timeToRead":634},".NET Boxed Visual Studio Integration","\u002Fdotnet-boxed-visual-studio-integration\u002F",{"title":1010,"permalink":1011,"heroImage":1012,"timeToRead":668},"The Windows Package Manager","\u002Fwindows-package-manager\u002F","\u002Fimages\u002Fhero\u002FWinget-1600x900.png",{"title":1014,"permalink":1015,"heroImage":663,"timeToRead":668},"The Problem with C# 10 Implicit Usings","\u002Fthe-problem-with-csharp-10-implicit-usings\u002F",{"title":1017,"permalink":1018,"heroImage":983,"timeToRead":673},"Optimally Configuring Open Telemetry Tracing for ASP.NET Core","\u002Foptimally-configuring-open-telemetry-tracing-for-asp-net-core\u002F",{"title":1020,"permalink":1021,"heroImage":1022,"timeToRead":418},"Live Streaming .NET","\u002Flive-streaming-dotnet\u002F","\u002Fimages\u002Fhero\u002FMy-YouTube-1920x1080.jpg",{"title":1024,"permalink":1025,"heroImage":1026,"timeToRead":418},"I Was Awarded as an Open UK Honouree","\u002Fopen-uk-honouree\u002F","\u002Fimages\u002Fhero\u002FOpen-UK-Honours-1366x768.jpg",{"title":1028,"permalink":1029,"heroImage":1030,"timeToRead":673},"On the Etiquette of Pull Request Comments","\u002Fon-the-etiquette-of-pull-request-comments\u002F","\u002Fimages\u002Fhero\u002FPrecious-PR-1600x900.jpg",{"title":1032,"permalink":1033,"heroImage":1034,"timeToRead":634},"AI Gone Rogue","\u002Fai-gone-rogue\u002F","\u002Fimages\u002Fhero\u002FHAL-9000-Prop-1600x900.png",{"left":4,"top":4,"width":26,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":1036},"\u003Cpath fill=\"currentColor\" d=\"M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.55 96.55 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.3 96.3 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96s-42.981-96-96-96\"\u002F>",{"left":4,"top":4,"width":18,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":1038},"\u003Cpath fill=\"currentColor\" d=\"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48c27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256\"\u002F>",{"left":4,"top":4,"width":18,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":1040},"\u003Cpath fill=\"currentColor\" d=\"M459.37 151.716c.325 4.548.325 9.097.325 13.645c0 138.72-105.583 298.558-298.558 298.558c-59.452 0-114.68-17.219-161.137-47.106c8.447.974 16.568 1.299 25.34 1.299c49.055 0 94.213-16.568 130.274-44.832c-46.132-.975-84.792-31.188-98.112-72.772c6.498.974 12.995 1.624 19.818 1.624c9.421 0 18.843-1.3 27.614-3.573c-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319c-28.264-18.843-46.781-51.005-46.781-87.391c0-19.492 5.197-37.36 14.294-52.954c51.655 63.675 129.3 105.258 216.365 109.807c-1.624-7.797-2.599-15.918-2.599-24.04c0-57.828 46.782-104.934 104.934-104.934c30.213 0 57.502 12.67 76.67 33.137c23.715-4.548 46.456-13.32 66.599-25.34c-7.798 24.366-24.366 44.833-46.132 57.827c21.117-2.273 41.584-8.122 60.426-16.243c-14.292 20.791-32.161 39.308-52.628 54.253\"\u002F>",{"left":4,"top":4,"width":18,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":1042},"\u003Cpath fill=\"currentColor\" d=\"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6c0-13.8 11.1-24.9 24.9-24.9c13.6 0 24.6 11.1 24.6 24.9c0 13.6-11.1 24.6-24.6 24.6M504 256c0 137-111 248-248 248S8 393 8 256S119 8 256 8s248 111 248 248m-132.3-41.2c-9.4 0-17.7 3.9-23.8 10c-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3l55.4 12.5c0 13.6 11.1 24.6 24.6 24.6c13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8c-6.1-6.4-14.7-10.2-24.1-10.2c-34.9 0-46.3 46.9-14.4 62.8c-1.1 5-1.7 10.2-1.7 15.5c0 52.6 59.2 95.2 132 95.2c73.1 0 132.3-42.6 132.3-95.2c0-5.3-.6-10.8-1.9-15.8c31.3-16 19.8-62.5-14.9-62.5M302.8 331c-18.2 18.2-76.1 17.9-93.6 0c-2.2-2.2-6.1-2.2-8.3 0c-2.5 2.5-2.5 6.4 0 8.6c22.8 22.8 87.3 22.8 110.2 0c2.5-2.2 2.5-6.1 0-8.6c-2.2-2.2-6.1-2.2-8.3 0m7.7-75c-13.6 0-24.6 11.1-24.6 24.9c0 13.6 11.1 24.6 24.6 24.6c13.8 0 24.9-11.1 24.9-24.6c0-13.8-11-24.9-24.9-24.9\"\u002F>",{"left":4,"top":4,"width":18,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":1044},"\u003Cpath fill=\"currentColor\" d=\"M512 194.8c0 101.3-82.4 183.8-183.8 183.8c-101.7 0-184.4-82.4-184.4-183.8c0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8M0 501.5h90v-491H0z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1046},"\u003Cpath fill=\"currentColor\" d=\"m20.216 6.415l-.132-.666c-.119-.598-.388-1.163-1.001-1.379c-.197-.069-.42-.098-.57-.241c-.152-.143-.196-.366-.231-.572c-.065-.378-.125-.756-.192-1.133c-.057-.325-.102-.69-.25-.987c-.195-.4-.597-.634-.996-.788a6 6 0 0 0-.626-.194c-1-.263-2.05-.36-3.077-.416a26 26 0 0 0-3.7.062c-.915.083-1.88.184-2.75.5c-.318.116-.646.256-.888.501c-.297.302-.393.77-.177 1.146c.154.267.415.456.692.58c.36.162.737.284 1.123.366c1.075.238 2.189.331 3.287.37q1.829.074 3.65-.118q.449-.05.896-.119c.352-.054.578-.513.474-.834c-.124-.383-.457-.531-.834-.473c-.466.074-.96.108-1.382.146q-1.767.12-3.536.006a22 22 0 0 1-1.157-.107c-.086-.01-.18-.025-.258-.036q-.364-.055-.724-.13c-.111-.027-.111-.185 0-.212h.005q.416-.09.838-.147h.002c.131-.009.263-.032.394-.048a25 25 0 0 1 3.426-.12q1.011.029 2.017.144l.228.031q.4.06.798.145c.392.085.895.113 1.07.542c.055.137.08.288.111.431l.319 1.484a.237.237 0 0 1-.199.284h-.003l-.112.015a37 37 0 0 1-4.743.295a37 37 0 0 1-4.699-.304c-.14-.017-.293-.042-.417-.06c-.326-.048-.649-.108-.973-.161c-.393-.065-.768-.032-1.123.161c-.29.16-.527.404-.675.701c-.154.316-.199.66-.267 1c-.069.34-.176.707-.135 1.056c.087.753.613 1.365 1.37 1.502a39.7 39.7 0 0 0 11.343.376a.483.483 0 0 1 .535.53l-.071.697l-1.018 9.907c-.041.41-.047.832-.125 1.237c-.122.637-.553 1.028-1.182 1.171q-.868.197-1.756.205c-.656.004-1.31-.025-1.966-.022c-.699.004-1.556-.06-2.095-.58c-.475-.458-.54-1.174-.605-1.793l-.731-7.013l-.322-3.094c-.037-.351-.286-.695-.678-.678c-.336.015-.718.3-.678.679l.228 2.185l.949 9.112c.147 1.344 1.174 2.068 2.446 2.272c.742.12 1.503.144 2.257.156c.966.016 1.942.053 2.892-.122c1.408-.258 2.465-1.198 2.616-2.657l1.024-9.995l.215-2.087a.48.48 0 0 1 .39-.426c.402-.078.787-.212 1.074-.518c.455-.488.546-1.124.385-1.766zm-1.478.772c-.145.137-.363.201-.578.233c-2.416.359-4.866.54-7.308.46c-1.748-.06-3.477-.254-5.207-.498c-.17-.024-.353-.055-.47-.18c-.22-.236-.111-.71-.054-.995c.052-.26.152-.609.463-.646c.484-.057 1.046.148 1.526.22q.865.132 1.737.212c2.48.226 5.002.19 7.472-.14q.675-.09 1.345-.21c.399-.072.84-.206 1.08.206c.166.281.188.657.162.974a.54.54 0 0 1-.169.364zm-6.159 3.9c-.862.37-1.84.788-3.109.788a6 6 0 0 1-1.569-.217l.877 9.004c.065.78.717 1.38 1.5 1.38c0 0 1.243.065 1.658.065c.447 0 1.786-.065 1.786-.065c.783 0 1.434-.6 1.499-1.38l.94-9.95a4 4 0 0 0-1.322-.238c-.826 0-1.491.284-2.26.613\"\u002F>",{"left":4,"top":4,"width":29,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":1048},"\u003Cpath fill=\"currentColor\" d=\"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134c-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9c152.3 0 165.1-3.7 204 11.4c60.1 23.3 65.6 79.5 44 140.3c-21.5 62.6-72.5 89.5-140.1 90.3c-43.4.7-69.5-7-75.3 24.2M357.1 152c-1.8-1.3-2.5-1.8-3 1.3c-2 11.4-5.1 22.5-8.8 33.6c-39.9 113.8-150.5 103.9-204.5 103.9c-6.1 0-10.1 3.3-10.9 9.4c-22.6 140.4-27.1 169.7-27.1 169.7c-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9c.7-5.4-1.1 6.1 14.4-91.3c4.6-22 14.3-19.7 29.3-19.7c71 0 126.4-28.8 142.9-112.3c6.5-34.8 4.6-71.4-23.8-92.6\"\u002F>",{"left":4,"top":4,"width":18,"height":18,"rotate":4,"vFlip":6,"hFlip":6,"body":1050},"\u003Cpath fill=\"currentColor\" d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8m0 448c-110.532 0-200-89.431-200-200c0-110.495 89.472-200 200-200c110.491 0 200 89.471 200 200c0 110.53-89.431 200-200 200m107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516c17.561-9.845 28.324-16.541 28.324-29.579c0-17.246-21.999-28.693-39.784-28.693c-23.189 0-33.894 10.977-48.942 29.969c-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8M298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42s18.841-42 42-42s42 18.841 42 42\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1052},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 12H5m7 7l-7-7l7-7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1054},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",1793144466381]