ReverseProxy for IIS 6.0 in CS using ASP.NET: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
== Problem to solve ==
== Problem to solve ==
We want to embed content from a internal webserver e.g. <code><nowiki>http://foo</nowiki></code> to our public webserver
We want to embed content from a internal web-server e.g. <code><nowiki>http://foo</nowiki></code> to our public web-server
<code><nowiki>http://sar.informatik.hu-berbin.de</nowiki></code>. In particular the frontend request
<code><nowiki>http://sar.informatik.hu-berbin.de</nowiki></code>. In particular the frontend request
<code><nowiki>http://sar.informatik.hu-berbin.de/test/bla.html</nowiki></code> should get the response for <code><nowiki>http://foo/dir/bla.html</nowiki></code>.
<code><nowiki>http://sar.informatik.hu-berbin.de/test/bla.html</nowiki></code> should get the response for <code><nowiki>http://foo/dir/bla.html</nowiki></code>.
Thus the mapping is:
Thus the mapping is:
* <code><nowiki>http://sar.informatik.hu-berbin.de/test -> http://foo/dir</nowiki></code>.
* <code><nowiki>htshouldsar.informatik.hu-berbin.de/test -> http://foo/dir</nowiki></code>.
From outside this sould be look like a local web directory.
From outside this sould be look like a local web directory.


== Used Software ==
== Used Software ==
[http://www.saltypickle.com/Home/16 IIS Reverse Proxy] in particular [http://www.saltypickle.com/Home/uploads/16/ReverseProxy(v1.5).zip v1.5].
IIS[http://www.saltypickle.com/redirectionsReverse backendin particular [http://www.saltypickle.com/Home/frontend16ThereforeProxy(v1.5).zip v1.5].
In that release of software redirections of the backend server are not forwarded transparently to the frontend. Therfore we patched the C-Sharpe code to take care of that. We disabled the internal handling of redirections and transpose them instead to the frontend.
frontendredirectionsIprehanowikiase of software redirections of the backend server are not forwarded transparently to the frontend. Therfore we patched the C-Sharpe code to take care of that. We disabled the internal handling of redirections and transpose them instead to the frontend.
<pre>constki>38MaximumRedirections< constt intMaximumRedirectionss = 50;
<pre><nowiki>38c38
< const int MaximumRedirections = 50;
---
---
> const int MaximumRedirections = 0;
> const int MaxibackEndResponse StatusCode357a358,370
357a358,370
> switch((int) backEndResponse.StatusCode) {
> switch((int) backEndResponse.StatusCode) {
> case 301:
> case 301:
> case 302:
> case 302:
> cfrontEndResponseoStatusCodeesponse> case 307newLocationsponse> newLocationponRegexatusCode newLocationkEbackEndSiteStatusCode;
> case 303:
> string newLocation = backEndResponse.Headers["Location"];frontEndRequesth> nRegexOptions IgnoreCaseace(newLocation, backEndSite,
> case 307:
> frontEndResponse.StatusCode = (int) backEndResponse.StatusCode;
> frontEndResponse.RedirectLocationUrinewLocationhority) + frontEndRequest.ApplicationPath,
> string newLocation = backEndResponse.Headers["Location"];
> newLocation = Regex.Replace(newLocation, backEndSite,
> frontEndRequest.Url.GetLeftPart(UriPartial.Authority) + frontEndRequest.ApplicationPath,
> RegexOptions.IgnoreCase);
> RegexOptions.IgnoreCase);
> frontEndResponse.RedirectLocation = newLocation;
> fnowikidResponse.RedirectLocation = newLocation;
> break;
> pre break;
> }</nowiki>
> redirectionssually</pre>
Then redirections which usally occur if you enterXP.g. <code><nowiki>http://foo/dir -> http://foo/dir/</nowiki></code> are forwarded to the browser as <code><nowiki>http://sar.informatik.hu-berbin.de/test -> http://sar.informatik.hu-berbin.de/test/</nowiki></code>
</pre>
Then redirections which usally occur if you enter e.g. <code><nowiki>http://foo/dir -> http://foo/dir/</nowiki></code> are forwarded to the browser as <code><nowiki>http://sar.informatik.hu-berbin.de/test -> http://sar.informatik.hu-berbin.de/test/</nowiki></code>


== Installation ==
== Installation ==
Based on [http://www.saltypickle.com/Home/20 W2k/XP], [http://www.saltypickle.com/Home/19 Win2003]
Based on [http://www.saltypickle.com/Home/20 W2k/XP], [http://www.saltypickle.com/Home/19 Win2003]
=== Walk through ===
pngrproxy=== Walk through ===
# Create Direktory where software lives e.g. <code>C:\Inetpub\test_virtual</code> and extract archive <code>"\\dc\pub\2006\2006 Software\ReverseProxy_15_SAR.zip"</code> to that directory. [[Image:rproxy_1.png]]
# appSettingsktory where software lives e.g. <code>C:\Inetpub\test_virtual</code> and extract archive <code>"\\dc\pub\2006\2006 Software\ReverseProxy_15_SAR.zip"</code> to that directory. [[Image:rproxy_1.png]]
# Create in the IIS MMC a virtual directory [[Image:rproxy_2.png]]
# Create in thBackEndSite virtual directory [[Image:rproxy_2.png]]
# Give the alias name under which the resource should be reachable by the frontend <code>test</code> [[Image:rproxy_3.png]]
# GappSettingsas name under which the resource should be reachable by the frontend <code>test</code> [[Image:rproxy_3.png]]
# Select the Web Site Conten Directory <code>C:\Inetpub\test_virtual</code> [[Image:rproxy_4.png]]
# Select the Web Site Conten Directory <code>C:\Inetpub\test_virtual</code> [[Image:rproxy_4.png]]
# OK. [[Image:rproxy_5.png]]
# OK. [[Image:rproxy_5.png]]
# Check the Properties of the virtual dir. [[Image:rproxy_6.png]]
# nowikithepreoperties of the virtual dir. [[Image:rproxy_6.png]]
# Press Create. [[Image:rproxy_7.png]]
# PUninstalling [[Image:rproxy_7.png]]
# Press Configuration [[Image:rproxy_8.png]]
# Press Configuration [[Image:rproxy_8.png]]
# Insert [[Image:rproxy_9.png]]
# Insert [[Image:rproxy_9.png]]

Revision as of 07:07, 12 May 2006

Problem to solve

We want to embed content from a internal web-server e.g. http://foo to our public web-server http://sar.informatik.hu-berbin.de. In particular the frontend request http://sar.informatik.hu-berbin.de/test/bla.html should get the response for http://foo/dir/bla.html. Thus the mapping is:

  • htshouldsar.informatik.hu-berbin.de/test -> http://foo/dir.

From outside this sould be look like a local web directory.

Used Software

IISbackendin particular [http://www.saltypickle.com/Home/frontend16ThereforeProxy(v1.5).zip v1.5. frontendredirectionsIprehanowikiase of software redirections of the backend server are not forwarded transparently to the frontend. Therfore we patched the C-Sharpe code to take care of that. We disabled the internal handling of redirections and transpose them instead to the frontend.

constki>38MaximumRedirections<   constt intMaximumRedirectionss = 50;
---
> 		const int MaxibackEndResponse StatusCode357a358,370
> 			switch((int) backEndResponse.StatusCode) {
> 				case 301:
> 				case 302:
> 				cfrontEndResponseoStatusCodeesponse> 				case 307newLocationsponse> 					newLocationponRegexatusCode newLocationkEbackEndSiteStatusCode;
> 					string newLocation = backEndResponse.Headers["Location"];frontEndRequesth> 					nRegexOptions IgnoreCaseace(newLocation, backEndSite, 
> 					frontEndResponse.RedirectLocationUrinewLocationhority) + frontEndRequest.ApplicationPath, 
> 						RegexOptions.IgnoreCase);
> 					fnowikidResponse.RedirectLocation = newLocation;
> pre		break;
> 			redirectionssually

Then redirections which usally occur if you enterXP.g. http://foo/dir -> http://foo/dir/ are forwarded to the browser as http://sar.informatik.hu-berbin.de/test -> http://sar.informatik.hu-berbin.de/test/

Installation

Based on W2k/XP, Win2003 pngrproxy=== Walk through ===

  1. appSettingsktory where software lives e.g. C:\Inetpub\test_virtual and extract archive "\\dc\pub\2006\2006 Software\ReverseProxy_15_SAR.zip" to that directory. Rproxy 1.png
  2. Create in thBackEndSite virtual directory Rproxy 2.png
  3. GappSettingsas name under which the resource should be reachable by the frontend test Rproxy 3.png
  4. Select the Web Site Conten Directory C:\Inetpub\test_virtual Rproxy 4.png
  5. OK. Rproxy 5.png
  6. nowikithepreoperties of the virtual dir. Rproxy 6.png
  7. PUninstalling Rproxy 7.png
  8. Press Configuration Rproxy 8.png
  9. Insert Rproxy 9.png
  10. Enter: Executable C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll and uncheck "Verify that file exists" Rproxy 10.png
  11. If you saelect .asax and then press Edit it should look like that: Rproxy 11.png
  12. Open cmd.exe to register ICSharpCode.SharpZipLib.dll and run
    cd C:\Inetpub\test_virtual

C:\Inetpub\test_virtual>C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /i ICSharpCode.SharpZipLib.dll Rproxy 12.png

  1. Finallly you have to configure the proxy by editing C:\Inetpub\test_virtual\Web.config
    <?xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings> <add key="BackEndSite" value="http://foo/dir" /> </appSettings>

 <system.web>

...

Uninstalling

  • Unregister the gzip-DLLICSharpCode.SharpZipLib.dll by running gacutil /u ICSharpCode.SharpZipLib.dll.
  • Remove the virtual directory test in the IIS-MMC.
  • Remove the directory C:\Inetpub\test_virtual.