nginx – basics

This is a quick aid based on the Raspberry Pi documentation.

Some basic commands are:

sudo nginx -s reload
sudo nano /etc/nginx/nginx.conf
systemctl status nginx.service



The current identity (IIS APPPOOl\xxxxxxx) does not have write access to…

If you encounter the following error then this may be the fix you’re looking for.

Server Error in ‘/’ Application.

The current identity (IIS APPPOOL\xxxxx) does not have write access to ‘C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files’.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: The current identity (IIS APPPOOL\xxxxx) does not have write access to ‘C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files’.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[HttpException (0x80004005): The current identity (IIS APPPOOL\xxxxx) does not have write access to ‘C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files’.]
System.Web.HttpRuntime.SetUpCodegenDirectory(CompilationSection compilationSection) +10003412
System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags, PolicyLevel policyLevel, Exception appDomainCreationException) +204

[HttpException (0x80004005): The current identity (IIS APPPOOL\xxxxx) does not have write access to ‘C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files’.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9947380
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +456


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1055.0

Simply run this code, from the Developer Command prompt: aspnet_regiis -i

Update 3-Jul-17:
On Windows Server 2012 you may need to run this command:

dism /online /enable-feature /featurename:IIS-ASPNET45 /all


How to stop Google using your SSID for location services

Just found out that you can stop this.

By default, Google, and possibly others, use your SSID to help improve their location services. You can opt out by changing your SSID, shouldn’t it be if you want to opt in? Anyway if you add “_nomap” then they won’t record your data, alternatively maybe hiding the SSID does the same?
More details here:

Debugging multiple websites from one solution? Breakpoints not being hit?

If you see this tooltip when examining your break points “The break point will not currently be hit. No symbols have been loaded for this document” then you’ve found the same issue that has been driving me mad for a few hours, it must mean you’re new to debugging web sites as well!

Simple solution (sic) is to right-click on your solution file and select “Properties” and then under Common Properties->Startup Project select the “Multiple startup projects” and set whatever action you require against the project(s) you want to debug.

Simples! Applies to Visual Studio 2010 onwards, and not just VS2013 as I at first thought.

Cross Origin Resource Sharing or using ajax sensibly

By default ajax requests that go across domains are blocked by most modern browsers, read Chrome, Firefox and Internet Explorer 8+.

To enable this functionality you need to add new headers to your sever specify the domains that can access your data or just let anyone in.

Full details can be found here:

If you cannot be bothered to read the article then you just need to add the following headers.

  1. Access-Control-Allow-Headers – Try X-Requested-With, Content-Type, Accept
  2. Access-Control-Allow-MethodsGET, POST, PUT, DELETE, OPTIONS
  3. Access-Control-Allow-Origin*

Obviously the above is over kill and can be cut down to meet your specific requirements.
For example (2) could be reduced but you may find you have to keep the OPTIONS value in as this can be issued by the browser before a GET or POST to determine what the server supports (a preflight request).
The value of “*” for (3) allows any site to access your data using XmlHttpRequest, this could be reduced to a list of space separated domains if required.
The final list (4) is again over the top and could be reduced significantly.

If you happen to be using OAuth 2.0 then and sending the access_token via the header, rather than the querystring, then you need to add Authorize to the Access-Control-Allow-Headers, as the token should be sent using the Bearer field.
In fact if you use any custom headers then you’ll need to add them all as CORS strips them all out.

Setting the MTU on Windows 7

To find out what your current MTU is open an admistrative command prompt and then type
netsh interface ipv4 show subinterfaces
Then start pinging a site until you get the “Packet needs to be fragmented but DF set”, drop down until you no longer recieve this.
ping -f -l 1464
Add the 28 byte overhead to the maximum value you used above, this gives you your new MTU size. In my case 1464 + 28 = 1492, the normal for a PPoE connection.
Then set this value in your router and also in Windows. To set the value in Windows 7 use:
netsh interface ipv4 set subinterface "Local Area Connection" mtu=1492 store=persistent

You should probably do some speed tests before and after just to see if that has improved.