Reverse Proxy Server: Basics: Difference between revisions
Jump to navigation
Jump to search
Reverse Proxy Server: Basics (view source)
Revision as of 01:13, 24 November 2010
, 24 November 2010no edit summary
(New page: {{Uc nav reverse proxy server}} The previous page looked at reverse proxy architecture and introduced front and back-end servers. This page shows how to run a proxy server using the stand...) |
Upazixorys (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
=[http://egyworene.co.cc Page Is Unavailable Due To Site Maintenance, Please Visit Reserve Copy Page]= | |||
{{Uc nav reverse proxy server}} | {{Uc nav reverse proxy server}} | ||
Line 6: | Line 7: | ||
The most important command for running a reverse proxy has been covered '''Proxy Requests Off''' you may be surprised to learn only two other commands are required however there are others available these tend to be more application specific. | The most important command for running a reverse proxy has been covered '''Proxy Requests Off''' you may be surprised to learn only two other commands are required however there are others available these tend to be more application specific. | ||
{|cellpadding= | {|cellpadding="10" | ||
|- | |- | ||
| | | | ||
<div style="position:relative;background:#666666"> | |||
<div style="position:relative;background:#e8e8e8;padding:20px;left:-4px;top:-4px;text-align:center"> | |||
'''ProxyPass path url''' | '''ProxyPass path url''' | ||
</div> | |||
</div> | |||
| | | | ||
'''ProxyPass''': This command, maps a remote server into your proxy server’s name space. | '''ProxyPass''': This command, maps a remote server into your proxy server’s name space. | ||
'''path''': Is the folder or folders that you tack onto the end of your domain for example | '''path''': Is the folder or folders that you tack onto the end of your domain for example <nowiki>http://fred.com</nowiki>'''/info/''' | ||
'''url''': URL to the remote server for example ''' | '''url''': URL to the remote server for example '''<nowiki>http://localhost:8086/</nowiki>''' (you can also map a folder on this server) | ||
|- | |- | ||
| | | | ||
<div style="position:relative;background:#666666"> | |||
<div style="position:relative;background:#e8e8e8;padding:20px;left:-4px;top:-4px"> | |||
'''ProxyPassReverse path url''' | '''ProxyPassReverse&nbsp;path&nbsp;url''' | ||
</div> | |||
</div> | |||
| | | | ||
'''ProxyPassReverse''': This command masquerades one server as another. Apache adjusts URL's (location, Content-Location and URI headers) from the reverse-proxied server so they look as if they came from the server running the proxy engine. | '''ProxyPassReverse''': This command masquerades one server as another. Apache adjusts URL's (location, Content-Location and URI headers) from the reverse-proxied server so they look as if they came from the server running the proxy engine. | ||
'''path''': Is the folder or folders that you tack onto the end of your domain for example | '''path''': Is the folder or folders that you tack onto the end of your domain for example <nowiki>http://fred.com</nowiki>'''/info/''' | ||
'''url''': URL to the remote server for example ''' | '''url''': URL to the remote server for example '''<nowiki>http://localhost:8086/</nowiki>''' | ||
|} | |} | ||
Net result, when a user types the following | Net result, when a user types the following <nowiki>http://fred.com/info/</nowiki> into a browser the contents from server <nowiki>http://localhost:8086/</nowiki> will seamlessly appear in folder info. | ||
'''''[[#top | Top]]''''' | '''''[[#top | Top]]''''' | ||
Line 46: | Line 47: | ||
At the bottom of this page locate the Vhost section and edit to look like the following: | At the bottom of this page locate the Vhost section and edit to look like the following: | ||
{|cellpadding= | {|cellpadding="6" | ||
|- | |- | ||
| | | | ||
<pre> | |||
NameVirtualHost * | NameVirtualHost * | ||
<VirtualHost *> | |||
ServerName localhost:80 | ServerName localhost:80 | ||
DocumentRoot /www | DocumentRoot /www | ||
ProxyRequests off | ProxyRequests off | ||
<Proxy *> | |||
Order deny,allow | Order deny,allow | ||
Deny from all | Deny from all | ||
Allow from 127.0.0.1 | Allow from 127.0.0.1 | ||
</Proxy> | |||
ProxyPass /info/ http://localhost:8086/ | ProxyPass /info/ http://localhost:8086/ | ||
ProxyPassReverse /info/ http://localhost:8086/ | ProxyPassReverse /info/ http://localhost:8086/ | ||
</VirtualHost> | |||
</pre> | |||
| | | | ||
Make sure to un-comment the line '''NameVirtualHost *''' (as shown) | Make sure to un-comment the line '''NameVirtualHost *''' (as shown) | ||
Line 75: | Line 76: | ||
# Save the file | # Save the file | ||
# '''Re-start both servers''' - Uniform Server first followedby mini server 6. | # '''Re-start both servers''' - Uniform Server first followedby mini server 6. | ||
# Type following ''' | # Type following '''<nowiki>http://localhost/info/</nowiki>''' into your browser | ||
The index page from server_b will display use the links to check out sites test1, test2 and test3 alternatively type the following URLs: | The index page from server_b will display use the links to check out sites test1, test2 and test3 alternatively type the following URLs: | ||
# | # <nowiki>http://localhost/info/test1/index.html</nowiki> | ||
# | # <nowiki>http://localhost/info/test2/index.php</nowiki> | ||
# | # <nowiki>http://localhost/info/test3/index.php</nowiki> | ||
|} | |} | ||
Line 90: | Line 91: | ||
# Re-start mini-server 20 and type | # Re-start mini-server 20 and type | ||
# Type following ''' | # Type following '''<nowiki>http://localhost/info/</nowiki>''' into your browser | ||
The index page from server_b will display use the links to check out sites test1, test2 and test3 alternatively type the following URLs: | The index page from server_b will display use the links to check out sites test1, test2 and test3 alternatively type the following URLs: | ||
# | # <nowiki>http://localhost/info/test1/index.html</nowiki> | ||
# | # <nowiki>http://localhost/info/test2/index.php</nowiki> | ||
# | # <nowiki>http://localhost/info/test3/index.php</nowiki> | ||
=== Testing === | === Testing === | ||
Line 122: | Line 123: | ||
A browser looks at a link and creates a resource request using the following rules: | A browser looks at a link and creates a resource request using the following rules: | ||
* If the link starts with a forward slash (/info) it adds only the domain name to complete the Url | * If the link starts with a forward slash (/info) it adds only the domain name to complete the Url <nowiki>http://localhost/info</nowiki>. | ||
* If the link starts with two periods (../info) or no forward slash (info) it considers this a relative link. | * If the link starts with two periods (../info) or no forward slash (info) it considers this a relative link.<br>It checks the currently displayed page (in the address bar) and constructs a new request relative to this.<br>For example current page <nowiki>http://localhost/fred/news/</nowiki> link ../info gives <nowiki>http://localhost/fred/info</nowiki>. | ||
* If the link is a fully qualified URL ( | * If the link is a fully qualified URL (<nowiki>http://www.someother.com</nowiki>) its just uses that (Note: This breaks out of any reverse proxies. | ||
'''''[[#top | Top]]''''' | '''''[[#top | Top]]''''' | ||
Line 130: | Line 131: | ||
Looking at our problem links: | Looking at our problem links: | ||
{|cellpadding= | {|cellpadding="6" cellspacing="1" style="background:#000000" | ||
|-style= | |-style="background:#e8e8e8" | ||
!colspan= | !colspan="2"|Browser Displays:<br><nowiki>http://localhost/info/test3/index.php</nowiki>||server_a||server_b | ||
|-style= | |-style="background:#e8e8e8;text-align:center" | ||
|'''''Page link'''''||'''''Resource request'''''||'''''Required'''''||'''''Remote server''''' | |'''''Page link'''''||'''''Resource request'''''||'''''Required'''''||'''''Remote server''''' | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/mpg.gif||''' | |/test3/mpg.gif||'''<nowiki>http:</nowiki>//localhost'''/test3/mpg.gif||<nowiki>http:</nowiki>//localhost'''/info'''/test3/mpg.gif||<nowiki>http:</nowiki>//localhost:8086/test3/mpg.gif | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/home||''' | |/test3/home||'''<nowiki>http:</nowiki>//localhost'''/test3/home||<nowiki>http:</nowiki>//localhost'''/info'''/test3/home||<nowiki>http:</nowiki>//localhost:8086/test3/home | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/about||''' | |/test3/about||'''<nowiki>http:</nowiki>//localhost'''/test3/about||<nowiki>http:</nowiki>//localhost'''/info'''/test3/about||<nowiki>http:</nowiki>//localhost:8086/test3/about | ||
|} | |} | ||
Looking at the mapping it looks impossible. One thing we know the initial page can be accessed (relative link) hence not a problem. When a resource is requested its only folder | Looking at the mapping it looks impossible. One thing we know the initial page can be accessed (relative link) hence not a problem. When a resource is requested its only folder "info" preventing access to pages on server_b, removing this we have: | ||
{|cellpadding= | {|cellpadding="6" cellspacing="1" style="background:#000000" | ||
|-style= | |-style="background:#e8e8e8" | ||
!colspan= | !colspan="2"|Browser Displays:<br><nowiki>http://localhost/info/test3/index.php</nowiki>||server_a||server_b | ||
|-style= | |-style="background:#e8e8e8;text-align:center" | ||
|'''''Page link'''''||'''''Resource request'''''||'''''Required'''''||'''''Remote server''''' | |'''''Page link'''''||'''''Resource request'''''||'''''Required'''''||'''''Remote server''''' | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/mpg.gif||''' | |/test3/mpg.gif||'''<nowiki>http:</nowiki>//localhost'''/test3/mpg.gif||<nowiki>http:</nowiki>//localhost/test3/mpg.gif||<nowiki>http:</nowiki>//localhost:8086/test3/mpg.gif | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/home||''' | |/test3/home||'''<nowiki>http:</nowiki>//localhost'''/test3/home||<nowiki>http:</nowiki>//localhost/test3/home||<nowiki>http:</nowiki>//localhost:8086/test3/home | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/about||''' | |/test3/about||'''<nowiki>http:</nowiki>//localhost'''/test3/about||<nowiki>http:</nowiki>//localhost/test3/about||<nowiki>http:</nowiki>//localhost:8086/test3/about | ||
|} | |} | ||
Line 162: | Line 163: | ||
Remember Apache's proxy engine maps servers and folders (not files) this gives the following: | Remember Apache's proxy engine maps servers and folders (not files) this gives the following: | ||
{|cellpadding= | {|cellpadding="6" cellspacing="1" style="background:#000000" | ||
|-style= | |-style="background:#e8e8e8" | ||
!colspan= | !colspan="2"|Browser Displays:<br><nowiki>http://localhost/info/test3/index.php</nowiki>||server_a||server_b | ||
|-style= | |-style="background:#e8e8e8;text-align:center" | ||
|'''''Page link'''''||'''''Resource request'''''||'''''Required'''''||'''''Remote server''''' | |'''''Page link'''''||'''''Resource request'''''||'''''Required'''''||'''''Remote server''''' | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/mpg.gif||''' | |/test3/mpg.gif||'''<nowiki>http:</nowiki>//localhost'''/test3/mpg.gif||<nowiki>http:</nowiki>//localhost'''/test3'''/mpg.gif||<nowiki>http:</nowiki>//localhost:8086'''/test3'''/mpg.gif | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/home||''' | |/test3/home||'''<nowiki>http:</nowiki>//localhost'''/test3/home||<nowiki>http:</nowiki>//localhost'''/test3'''/home||<nowiki>http:</nowiki>//localhost:8086'''/test3'''/home | ||
|-style= | |-style="background:#f5f5f5" | ||
|/test3/about||''' | |/test3/about||'''<nowiki>http:</nowiki>//localhost'''/test3/about||<nowiki>http:</nowiki>//localhost'''/test3'''/about||<nowiki>http:</nowiki>//localhost:8086'''/test3'''/about | ||
|} | |} | ||
OK we need to bite the bullet and have a new folder (test3) in our name space hence we can map this on both servers using the following: | OK we need to bite the bullet and have a new folder (test3) in our name space hence we can map this on both servers using the following: | ||
{|cellpadding= | {|cellpadding="6" | ||
|- | |- | ||
|'''ProxyPass''' | |'''ProxyPass'''<br>'''ProxyPassReverse'''||'''/test3/'''<br>'''/test3/'''||'''<nowiki>http://localhost:8086/test3/</nowiki>'''<br>'''<nowiki>http://localhost:8086/test3/</nowiki>''' | ||
|} | |} | ||
Line 188: | Line 189: | ||
If using mini-serer 20 open folder example 2 and copy file httpd.conf up one level into folder \udrive\usr\local\apache2\conf and let it overwrite the existing file. | If using mini-serer 20 open folder example 2 and copy file httpd.conf up one level into folder \udrive\usr\local\apache2\conf and let it overwrite the existing file. | ||
{|cellpadding= | {|cellpadding="6" | ||
|- | |- | ||
| | | | ||
<pre> | |||
NameVirtualHost * | NameVirtualHost * | ||
<VirtualHost *> | |||
ServerName localhost:80 | ServerName localhost:80 | ||
DocumentRoot /www | DocumentRoot /www | ||
ProxyRequests off | ProxyRequests off | ||
<Proxy *> | |||
Order deny,allow | Order deny,allow | ||
Deny from all | Deny from all | ||
Allow from 127.0.0.1 | Allow from 127.0.0.1 | ||
</Proxy> | |||
ProxyPass /info/ http://localhost:8086/ | ProxyPass /info/ http://localhost:8086/ | ||
Line 211: | Line 212: | ||
ProxyPassReverse /test3/ http://localhost:8086/test3/ | ProxyPassReverse /test3/ http://localhost:8086/test3/ | ||
</VirtualHost> | |||
</pre> | |||
| | | | ||
'''Run Example''': | '''Run Example''': | ||
Line 218: | Line 219: | ||
# Save the file | # Save the file | ||
# '''Re-start both servers''' - Uniform Server first followed by mini server 6. | # '''Re-start both servers''' - Uniform Server first followed by mini server 6. | ||
# Type following ''' | # Type following '''<nowiki>http://localhost/info/</nowiki>''' into your browser | ||
''Alternatively'' | ''Alternatively'' | ||
# '''Re-start server 20''' | # '''Re-start server 20''' | ||
# Type following ''' | # Type following '''<nowiki>http://localhost/info/</nowiki>''' into your browser | ||
The index page from server_b will display use the link to check out the site test3 alternatively type the following URL: | The index page from server_b will display use the link to check out the site test3 alternatively type the following URL: | ||
# | # <nowiki>http://localhost/test3/index.php</nowiki> | ||
'''''Note'':''' If you wish; change the link on the index page so the transition does not look odd. | '''''Note'':''' If you wish; change the link on the index page so the transition does not look odd. | ||
Line 241: | Line 242: | ||
|- | |- | ||
| | | | ||
<div style="position:relative;background:#666666"> | |||
<div style="position:relative;background:#e8e8e8;padding:20px;left:-4px;top:-4px;text-align:center"> | |||
'''RewriteRule ^/info/(.*)$ | '''RewriteRule&nbsp;^/info/(.*)$&nbsp;<nowiki>http://localhost:8086/</nowiki>$1&nbsp;[P,QSA]''' | ||
</div> | |||
</div> | |||
| | | | ||
# '''/info/''' the rule is looking for any requests to folder | # '''/info/''' the rule is looking for any requests to folder "info" | ||
# '''(.*)''' Save anything after the folder | # '''(.*)''' Save anything after the folder "info" | ||
# ''' | # '''<nowiki>http://localhost:8086</nowiki>''' Url of our proxy server | ||
# '''/$1''' tack onto the end of the proxy server what was stored in 2) | # '''/$1''' tack onto the end of the proxy server what was stored in 2) | ||
# '''[P,QSA]''' Forces a proxy request from the server. Note any remaining rules will not be executed [L] is assumed. | # '''[P,QSA]''' Forces a proxy request from the server. Note any remaining rules will not be executed [L] is assumed. | ||
Line 258: | Line 259: | ||
If using mini-serer 20 open folder example 3 and copy file httpd.conf up one level into folder \udrive\usr\local\apache2\conf and let it overwrite the existing file. | If using mini-serer 20 open folder example 3 and copy file httpd.conf up one level into folder \udrive\usr\local\apache2\conf and let it overwrite the existing file. | ||
{|cellpadding= | {|cellpadding="6" | ||
|- | |- | ||
| | | | ||
<pre> | |||
NameVirtualHost * | NameVirtualHost * | ||
<VirtualHost *> | |||
ServerName localhost:80 | ServerName localhost:80 | ||
DocumentRoot /www | DocumentRoot /www | ||
ProxyRequests off | ProxyRequests off | ||
<Proxy *> | |||
Order deny,allow | Order deny,allow | ||
Deny from all | Deny from all | ||
Allow from 127.0.0.1 | Allow from 127.0.0.1 | ||
</Proxy> | |||
RewriteEngine On | RewriteEngine On | ||
Line 281: | Line 282: | ||
ProxyPassReverse / http://localhost:8086/ | ProxyPassReverse / http://localhost:8086/ | ||
</VirtualHost> | |||
</pre> | |||
| | | | ||
'''Run Example''': | '''Run Example''': | ||
Line 288: | Line 289: | ||
# Save the file | # Save the file | ||
# '''Re-start both servers''' - Uniform Server first followed by mini server 6. | # '''Re-start both servers''' - Uniform Server first followed by mini server 6. | ||
# Type following ''' | # Type following '''<nowiki>http://localhost/info/</nowiki>''' into your browser | ||
''Alternatively'' | ''Alternatively'' | ||
# '''Re-start server 20''' | # '''Re-start server 20''' | ||
# Type following ''' | # Type following '''<nowiki>http://localhost/info/</nowiki>''' into your browser | ||
The index page from server_b will display use the link to check out the site test3 alternatively type the following URL: | The index page from server_b will display use the link to check out the site test3 alternatively type the following URL: | ||
# | # <nowiki>http://localhost/test3/index.php</nowiki> | ||
'''''Note'':''' Mod Rewrite offers finer control. | '''''Note'':''' Mod Rewrite offers finer control. |