Search squid archive

Re: Reverce proxy setup with neighboor support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello all,

Many thanks for the responses so far, I gave it a go without much
success unfortunatelly.

The errors:

2009/12/17 15:20:00| icmpSend: send: (111) Connection refused
2009/12/17 15:20:00| Closing Pinger socket on FD 18
2009/12/17 15:20:02| WARNING: Forwarding loop detected for:
Client: <cache1_IP> http_port: <cache2_IP>:80


On Thu, 2009-12-17 at 10:00 +1300, Amos Jeffries wrote:
> On Wed, 16 Dec 2009 11:50:26 +0000, "Nikolaos Pavlidis"
> <Nikolaos.Pavlidis@xxxxxxxxxx> wrote:
> > Hello all,
> > 
> > I figured the easiest way to describe what I am trying to do is to...
> > draw it. First of all pardon my ignorance since I am relatively new to
> > squid. Any help will be much appreciated.
> > 
> > 
> > The Problem:
> > 
> > Dec  9 17:42:35 cache2 squid[27234]: WARNING: Forwarding loop detected
> > for: Client: <cache1_IP> http_port: <cache2_IP>:3128 GET
> > internal://site1.domain.com/squid-internal-dynamic/netdb HTTP/1.0  Via:
> > 1.0 site1.domain.com:80 (squid)  X-Forwarded-For: unknown  Host:
> > <cache2_IP>:3128  Cache-Control: max-age=259200  Connection:
> > keep-alive   
> > 
> > 
> > 
> > 
> > Reverse proxy Setup:
> > 
> > 		O F5 load balanced vhost 
> > 		|  (DNS A name resolving site1.domain.com
> > 		|			 site2.domain.com
> > 		|			 site3.domain.com etc.)
> > 		|
> > 	|---------------|
> > 	|		|
> > 	|		|
> > cache1	O---------------O cache2
> > 		|
> > 		|
> > 		|
> > 		|
> > 	O---------------O--------------O
> > 	web1		web2		web3
> > 	site1		site3		site4
> > 	site2				site5
> > 
> > Desired path:
> > 1. Request for site1
> > 2. F5 load balances request to cache1
> > 3. cache1 checks own cache
> > 4. if NO-HIT check cache2
> > 5. else go directly to web1
> > 
> 
> Excellent. This is a basic reverse-proxy with virtual hosting.
> 
> The error you mentioned earlier indicates:
> 
>  1. Request for site1
>  2. F5 load balances request to cache1
>  3. cache1: checks own cache
>  4. cache1: if NO-HIT check cache2
>  5. cache2: if NO-HIT check cache1
>  6. cache1: if NO-HIT check cache2 ... FAIL!!
>  ...
> 
> 
> > Server:
> > 64bit SLES 11
> > 
> > Configuration file (what I have done so far):
> > 
> > # NETWORK OPTIONS
> > #
> >
> -----------------------------------------------------------------------------
> > http_port 80 accel defaultsite=site1.domain.com vhost
> > http_port 3128 accel defaultsite=site1.domain.com vhost
> 
> There should be no need for port 3128 to be reverse-proxy as well.
> Dedicate that or another port to proxy-proxy communications.
> 

Totally right, removed the whole line
"http_port 3128 accel defaultsite=site1.domain.com vhost"

> > visible_hostname site1.domain.com
> > offline_mode off
> > 
> > # OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
> > #
> >
> -----------------------------------------------------------------------------
> > hierarchy_stoplist cgi-bin ?
> > acl QUERY urlpath_regex cgi-bin \?
> > no_cache deny QUERY
> > 
> > # OPTIONS WHICH AFFECT THE CACHE SIZE
> > #
> >
> -----------------------------------------------------------------------------
> > cache_mem 512 MB
> > maximum_object_size 32 KB
> > maximum_object_size_in_memory 64 Kb
> > 
> > # LOGFILE PATHNAMES AND CACHE DIRECTORIES
> > #
> >
> -----------------------------------------------------------------------------
> > cache_dir aufs /var/cache/squid 61440 16 256
> > emulate_httpd_log on
> > logfile_rotate 100
> > logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st
> > "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
> > access_log /var/log/squid/access.log combined
> > cache_log /var/log/squid/cache.log
> > cache_store_log /var/log/squid/store.log
> > debug_options ALL,1,33,3,20,3
> > 
> > # OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
> > #
> >
> -----------------------------------------------------------------------------
> > auth_param basic children 10
> > auth_param basic realm Squid proxy-caching web server
> > auth_param basic credentialsttl 2 hours
> > auth_param basic casesensitive off
> > 
> > # OPTIONS FOR TUNING THE CACHE
> > #
> >
> -----------------------------------------------------------------------------
> > refresh_pattern ^ftp:           1440    20%     10080
> > refresh_pattern ^gopher:        1440    0%      1440
> > refresh_pattern -i \.css        1440    50%     2880 override-expire
> > refresh_pattern -i \.swf        1440    50%     2880 ignore-reload
> > override-expire
> > refresh_pattern .               1440    50%     4320 override-expire
> > 
> > # ACCESS CONTROLS
> > #
> >
> -----------------------------------------------------------------------------
> > 
> > acl all src all
> > acl manager proto cache_object
> > acl localhost src 127.0.0.1/255.255.255.255
> > acl to_localhost dst 127.0.0.0/8
> > acl SSL_ports port 443 563
> > acl Safe_ports port 80          # http
> > acl Safe_ports port 21          # ftp
> > acl Safe_ports port 443 563     # https, snews
> > acl Safe_ports port 70          # gopher
> > acl Safe_ports port 210         # wais
> > acl Safe_ports port 1025-65535  # unregistered ports
> > acl Safe_ports port 280         # http-mgmt
> > acl Safe_ports port 488         # gss-http
> > acl Safe_ports port 591         # filemaker
> > acl Safe_ports port 777         # multiling http 
> > acl purge method PURGE
> > acl CONNECT method CONNECT
> > acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9]
> > upgrade_http0.9 deny shoutcast
> > acl apache rep_header Server ^Apache
> > broken_vary_encoding allow apache
> > 
> 
> Part 1 of the problem:
> 
> You are running a reverse-proxy. All of these initial http_access rules
> are forward-proxy security restrictions. In the case of the "allow all" its
> attempting to bypass the regular forward-proxy config by turning it into an
> open proxy instead.
> 
> The reverse proxy config (your "UNIVERSITY SERVICES ENTRIES" settings)
> need to be set right here above the forward-proxy config.
> 
> 
> > http_access allow manager localhost
> > http_access deny manager
> > http_access allow purge localhost
> > http_access deny purge
> > http_access deny !Safe_ports
> > http_access deny CONNECT !SSL_ports
> > http_access allow localhost
> > http_access allow all
> 
> With the reverse-proxy config in the right place you can turn the basic
> security back on by changing that above line to "deny all"
> 
> > http_reply_access allow all
> > 
> > icp_access allow all
> > 
> > ##########################################
> > ###### UNIVERSITY SERVICES ENTRIES  ######
> > ##########################################
> > 
> > cache_peer <web1_IP> parent 80 0 no-query originserver name=web1
> > cache_peer <cache2_IP> parent 3128 3130 proxy-only default
> 
> Part 2 of the problem:
>  The above config indicates that cache2 is the primary web server (on port
> 3128) with web1 as a backup source.
> 
> I believe your setup needs cache1 and cache2 in a sibling relationship as
> 'alternative' backup sources of data to each other. Siblings are checked
> before parents but a failure at sibling is not fatal to locating the file.
> 
> Also requests received in port 3128 (ie from a sibling) should be denied
> forwarding to the sibling.
> 
> > acl sites_web1 dstdomain site1.domain.com site2.domain.com
> > http_access allow sites_web1
> > cache_peer_access web1 allow sites_web1
> > cache_peer_access web1 deny all
> > 
Ok I gave it a go, looks like that:


# reverce-proxy configuration
#
-----------------------------------------------------------------------------

cache_peer <web1_IP> parent 80 0 no-query originserver name=web1
cache_peer <cache2_IP> sibling 80 3130 proxy-only
acl sites_www dstdomain site1.domain.com site2.domain.com
acl from_cache2 src <cache2_IP>
cache_peer_access cache2 deny from_cache2
http_access allow sites_web1
cache_peer_access web1 allow sites_web1
cache_peer_access web1 deny all

# forward-proxy security restrictions
#
-----------------------------------------------------------------------------

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all

http_reply_access allow all
acl cache2 src <cache2_IP>
icp_access allow cache2
icp_access deny all

> > # ADMINISTRATIVE PARAMETERS
> > #
> >
> -----------------------------------------------------------------------------
> > 
> > shutdown_lifetime 3 second
> > httpd_suppress_version_string on
> > cache_mgr cachemgr@xxxxxxxxxx
> > 
> > # ICP OPTIONS
> > #
> >
> -----------------------------------------------------------------------------
> > 
> > log_icp_queries on
> > 
> > # MISCELLANEOUS
> > #
> >
> -----------------------------------------------------------------------------
> > 
> > memory_pools_limit 1024 MB
> > 
> > # DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)
> > #
> >
> -----------------------------------------------------------------------------
> > 
> > coredump_dir /var/spool/squid
> > 
> > -------------------------EO Configuration file -------------------------
> > 
> > Any comments on the configuration would be much appreciated. Thank you
> > in advance. 
> > 
> > Kind regards,
> > 
> > Nik

Many thanks in advance for all your help.

Kind regards,

Nik
-- 
Nikolaos Pavlidis BSc (Hons) MBCS NCLP CEH CHFI
Systems Administrator
University Of Bedfordshire
Park Square LU1 3JU
Luton, Beds, UK
Tel: +441582489277 (Ext 2277)



[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux