Release-Notes-1.0.txt
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:17k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. $Id: Release-Notes-1.0.txt,v 1.5 1997/07/16 20:31:49 wessels Exp $
  2. Release Notes for version 1.0 of the Squid cache.
  3. TABLE OF CONTENTS:
  4. Private Objects
  5. Proper parsing of HTTP reply codes
  6. Support for If-Modified-Since GET
  7. Improvements to the access log
  8. Metadata reloads in the background
  9. Unlinking swap files on restart and the -U option
  10. Changes to debugging
  11. New Access Control scheme
  12. Using SIGHUP to reconfigure the cache
  13. ftpget server
  14. Changes to cache shutdown
  15. Assigning weights to cache neighbors
  16. Converting 'cache/log' from cached-1.4.pl3
  17. Notes on stoplists vs ttl_pattern
  18.         SIGUSR1 now rotates log files
  19. ``no-query'' option for cache_host lines
  20. Private Objects
  21. ==============================================================================
  22. The Squid cache uses the notions of ``private'' and ``public''
  23. objects.  An object can start out as being private, but may later be
  24. given public status.  Private objects are associated with only a single
  25. client whereas a public object may be sent to multiple clients at the
  26. same time.  When the cache finishes retrieving an object, if the object
  27. is private it will be ejected from the cache.  Only public objects
  28. are saved on disk.
  29. There are a few ways to determine whether an object should be private
  30. or public.  One is the request method.  Only URLs requested with
  31. the ``GET'' method can be public.  Another way is by examining the 
  32. URL string.  URLs which match one of the stoplist entries will 
  33. always be private objects.  Usually this includes ``cgi-bin'' scripts.
  34. A third way is by checking the HTTP request and reply headers.  For 
  35. example, if the request includes user authentication information, then
  36. the object should never be made public.  Additionally, some HTTP
  37. replies such as ``401 Unauthorized'' should also never be made public.
  38. For these reasons, Squid starts all objects out as private and changes
  39. them to public only after the HTTP reply headers have been read.
  40. Unfortunately, this causes some problems with the UDP-based Internet
  41. Cache Protocol (ICP) used to query neighboring caches.  Specifically, when
  42. an ICP reply packet is received, it only contains the object URL which
  43. is not sufficient enough to locate private objects in the cache metadata.
  44. To get the additional information needed to locate private objects, we
  45. decided to use the ``reqnum'' field of the ICP packet.  This is an
  46. acceptable solution, except that as implemented in cached-1.4.pl3 and
  47. earlier, all ICP replies have the reqnum field reset to zero!
  48. Squid will make use of private objects until it notices that one of
  49. its neighbors is sending ICP replies with the reqnum field set to zero.
  50. It will then only use private keys for objects which are not going to
  51. be queried for via ICP.  These include objects in the stoplist and
  52. If-Modified-Since requests.  
  53. Proper parsing of HTTP reply codes
  54. ==============================================================================
  55. Squid parses HTTP replies to extract the reply code.  The codes are used
  56. to determine which objects should be cached, which should be ejected,
  57. and which should be negative-cached. 
  58. See HTTP-codes.txt for a list of HTTP response codes, and how they are
  59. cached.
  60. The HTTP codes are now logged to "access.log" in the native format 
  61. (ie with 'emulate_httpd_log off').
  62. Support for If-Modified-Since GET
  63. ==============================================================================
  64. Squid supports IMS GET retrievals, but not through any neighbor caches.
  65. Whenever an IMS GET request is received, Squid handles the requst in
  66. one of three ways:
  67.     * if the object is not in the cache, the request is treated as
  68.       a regular MISS.
  69.     * if the object is in the cache, and it has a more recent timestamp,
  70.       it is treated as a regular HIT.
  71.     * otherwise the cached object is assumed to be valid, and Squid
  72.       returns a NOT MODIFIED response.
  73. This means you should chose your TTL settings very carefully. 
  74. Improvements to the access log
  75. ==============================================================================
  76. The "access.log" file has been improved in a number of ways.  There is now
  77. only one log entry per client request and the size is always correct. 
  78. The format is now
  79.    timestamp  elapsed  src-address  type/code/hierarchy  size  method  URL
  80. - timestamp: When the request is completed with millisecond
  81. resolution.
  82. - elapsed: elapsed time of the request, in milliseconds.
  83. - src-address:  IP address of the requesting client.
  84. - type: An indication of how the request was handled
  85. by the cache.  These are described further below.
  86. - code:  The HTTP reply code when available.  For ICP
  87. requests this is always "000."  If the reply code
  88. was not given, it will be logged as "555."
  89. - hierarchy: The code from the hierarchy.log file.
  90. - size: For TCP requests, the amount of data written
  91. to the client.  For UDP requests, the size
  92. of the request (in bytes).
  93. - method: The request method (GET, POST, etc).
  94. - URL: The URL of the request.
  95. Access Log Types:
  96. "TCP_" refers to requests on the HTTP port (3128)
  97. TCP_HIT A valid copy of the requested object was in the cache.
  98. TCP_MISS The requested object was not in the cache.
  99. TCP_EXPIRED The object was in the cache, but it had expired.
  100. TCP_REFRESH The user forced a refresh ("reload").
  101. TCP_IFMODSINCE An If-Modified-Since GET request.
  102. TCP_SWAPFAIL The object was believed to be in the cache,
  103. but could not be accessed.
  104. TCP_DENIED Access was denied for this request.
  105. "UDP_" refers to requests on the ICP port (3130)
  106. UDP_HIT A valid copy of the requested object was in the cache.
  107. UDP_HIT_OBJ Same as UDP_HIT, but the object data was small enough
  108. to be sent in the UDP reply packet.  Saves the
  109. following TCP request.
  110. UDP_MISS The requested object was not in the cache.
  111. UDP_DENIED Access was denied for this request.
  112. UDP_INVALID An invalid request was received.
  113. ..............................................................................
  114. Hierarchy Log Types:
  115. DEAD_NEIGHBOR A sibling has been detected as dead after
  116. failing to reply to 20 consecutive ICP
  117. queries.
  118. DEAD_PARENT A parent has been detected as dead.
  119. DIRECT The object has been requested from the origin
  120. server.
  121. FIREWALL_IP_DIRECT The object has been requested from the origin
  122. server because the origin host IP address is
  123. inside your firewall.
  124. FIRST_PARENT_MISS The object has been requested from the
  125. parent cache with the fastest weighted round
  126. trip time.
  127. FIRST_UP_PARENT The object has been requested from the first
  128. available parent in your list.
  129. LOCAL_IP_DIRECT The object has been requested from the origin
  130. server because the origin host IP address 
  131. matched your 'local_ip' list.
  132. NEIGHBOR_HIT The object was requested from a sibling cache
  133. which replied with a UDP_HIT.
  134. NO_DIRECT_FAIL The object could not be requested because
  135. of firewall restrictions and no parent caches
  136. were available.
  137. NO_PARENT_DIRECT The object was requested from the origin server
  138. because no parent caches exist for the URL.
  139. PARENT_HIT The object was requested from a parent cache
  140. which replied with a UDP_HIT.
  141. REVIVE_NEIGHBOR A sibling cache was detected as alive again.
  142. REVIVE_PARENT A parent cache was detected as alive again.
  143. SINGLE_PARENT The object was requested from the only
  144. parent cache appropriate for this URL.
  145. SOURCE_FASTEST The object was requested from the origin server
  146. because the 'source_ping' reply arrived first.
  147. UDP_HIT_OBJ The object was received in a UDP_HIT_OBJ reply
  148. from a neighbor cache.
  149. Almost any of these may be preceeded by 'TIMEOUT_' if the two-second
  150. (default) timeout occurs waiting for all ICP replies to arrive from
  151. neighbors.
  152. Metadata reloads in the background
  153. ==============================================================================
  154. Upon restart, Squid automatically loads cache metadata in the
  155. background.  It will be able to service new requests immediately.  As
  156. new objects are added, there may be some "clashes" with old objects
  157. using the same swap file on disk.  In these cases you may see a message
  158. in the cache logfile about "Active clash."  This means the old object
  159. has been discarded since it was replaced by a new object.
  160. The -F option causes the old behaviour -- reload all the metadata before
  161. processing any requests,
  162. Unlinking swap files on restart and the -U option
  163. ==============================================================================
  164. When the cache reloads object metadata from disk some of the objects
  165. will be expired or otherwise invalid.  In the interest of speed, these
  166. invalid objects will not be removed from the filesystem by default.  They
  167. will eventually be overwritten by new objects as enter the cache and
  168. get saved to disk.
  169. The -U option can be used to actually remove the invalid objects from
  170. disk.  
  171. In addition, the -z option will not cause 'rm -rf [0-9][0-9]' to be
  172. executed unless the -U option is also given.  
  173. When swap files are not removed during restart there internal counters
  174. for disk space taken will not match the actual disk space used.  If you
  175. have a large cache or plenty of extra disk space, this should not be a
  176. problem.  However, if space is an issue, you may want to use the -U
  177. option at the cost of a slower restart.
  178. Changes to debugging
  179. ==============================================================================
  180. Squid has a flexible debugging scheme.  You can enable more debugging
  181. for certain functions and less for others.  For example if you needed
  182. to figure out why your access controls were behaving strangely, you 
  183. could enable debugging for section 28 at level 9.  Currently, each
  184. section corresponds to separate source code file:
  185. main.c:              Section 1
  186. cache_cf.c:          Section 3
  187. errorpage.c:         Section 4
  188. comm.c:              Section 5
  189. disk.c:              Section 6
  190. fdstat.c:            Section 7
  191. filemap.c:           Section 8
  192. ftp.c:               Section 9
  193. gopher.c:            Section 10
  194. http.c:              Section 11
  195. icp.c:               Section 12
  196. icp_lib.c:           Section 13
  197. ipcache.c:           Section 14
  198. neighbors.c:         Section 15
  199. objcache.c:          Section 16
  200. proto.c:             Section 17
  201. stat.c:              Section 18
  202. stmem.c:             Section 19
  203. store.c:             Section 20
  204. tools.c:             Section 21
  205. ttl.c:               Section 22
  206. url.c:               Section 23
  207. wais.c:              Section 24
  208. mime.c:              Section 25
  209. connect.c:           Section 26
  210. send-announce.c:     Section 27
  211. acl.c:               Section 28
  212. Debugging levels are set in the configuration file with the 'debug_options'
  213. line.  For example:
  214. debug_options ALL,1 28,9 22,5
  215. New Access Control scheme
  216. ==============================================================================
  217. The old IP-based access controls have been replaced with a much more
  218. flexible scheme.  First you must define a set of access control lists. 
  219. There are N types of lists:
  220. 'src' client IP address
  221. 'dst' server IP address**
  222. 'method' method of the request (eg, GET, POST)
  223. 'proto' protocol of the request (eg HTTP, WAIS)
  224. 'domain' domain of the URL request (eg .foo.org)
  225. 'port' port number of the URL request (eg 80, 21)
  226. 'time' time-of-day and day-of-week
  227. format: [SMTWHFA] [hh:mm-hh:mm]
  228. 'pattern' regular expression matching on the URL-path
  229. After the access lists have been defined, you can then combine them
  230. in way to allow or deny access.  
  231. For example, your cache might be configured to accept requests 
  232. from both inside and outside of your organization.  In that case you'd
  233. probably want to allow internal clients to access anything, but limit
  234. outside access to only sites within your organization.  It could be
  235. done like this:
  236. acl ourclients src  128.138.0.0/255.255.0.0  198.117.213.0/24
  237. acl ourservers domain .whatsamattu.edu
  238. http_access deny !ourclients !ourservers
  239. http_access allow ourclients
  240. If you wanted to limit FTP requests to off-peak hours, you could use:
  241. acl daytime time  MTWHF 08:00-17:00
  242. acl FTP proto FTP
  243. http_access deny FTP daytime
  244. Any of the access list types can accept multiple values on the 
  245. same line, except for 'time'.  Multiple values of an 'acl'
  246. definition are treated with OR logic.  Multiple ACLs of
  247. an 'http_access' are treated with AND logic.  
  248. That is, all ACLs much match for the 'allow' or 'deny' take effect.
  249. The order of the 'http_access' lines are important.  When a line
  250. matches any following lines are not considered at all.
  251. 'icp_access' is the same as 'http_access' but it applies to the ICP
  252. port.  However, it is not yet fully implemented.  It is only able to check
  253. 'src' and 'method' ACLs.
  254. **Note, the 'dst' ACL type has been added for version 1.0.beta12.  In
  255. that version it is implemented in a "lazy" manner.  If the URL hostname
  256. is not already in the IP cache, the ACL checks will not match it, but
  257. they will start a DNS lookup so that it will likely be present for
  258. future ACL checks.  This means some users may occasionally get oddball
  259. results.  For example, a page may fail the first time, but succeed on
  260. the second try, or vice-versa.
  261. Changes to cache shutdown
  262. ==============================================================================
  263. Squid attempts to implement a "nice shutdown" upon receipt of a SIGTERM
  264. signal.  Rather than simply breaking all current connections, it waits
  265. a configurable number of seconds for active requests to complete.  The
  266. default 'shutdown_lifetime' value is 30 seconds.
  267. As soon as the SIGTERM is received, the incoming HTTP socket is closed
  268. so that no further requests will be accepted.  
  269. Using SIGHUP to reconfigure the cache
  270. ==============================================================================
  271. Sending the squid process a HUP signal will prompt it to re-read its
  272. configuration file.  Before it can be reconfigured, it must make sure
  273. that all active connections are closed.  For this purpose squid
  274. pretends to do a shutdown as described above; ie, it will wait up to
  275. 30 seconds for active requests to complete before re-reading the
  276. configuration file.
  277. ftpget server
  278. ==============================================================================
  279. The ftpget program has been modified to act as a server for FTP
  280. request.  You may now notice that an "ftpget -S" process is always
  281. present while the cache is running.  The benefit of using an ftpget
  282. server is that the cache process (which may be very large) no longer
  283. needs to fork itself for FTP requests.
  284. Assigning weights to cache neighbors
  285. ==============================================================================
  286. Squid allows you to assign weights to parent caches.  The weights are 
  287. used to calculate the ``first miss parent.''  The weight is specified in
  288. the 'options' field of the 'cache_host' line.  For example:
  289.      cache_host  big.foo.org parent 3128 3130 weight=5
  290. The weight must be a non-zero integer.  It is used as a divisor to
  291. calculate a weighted round-trip-time (RTT).  Higher weights will cause
  292. a parent to have a ``better'' RTT.
  293. Weights are only involved when all parent caches return MISS.  Squid still
  294. fetches an object from the first parent or neighbor to reply with a HIT,
  295. regardless of any weight values.
  296. Converting 'cache/log' from cached-1.4.pl3
  297. ==============================================================================
  298. Squid uses a slightly different format for the 'cache/log' file.  In 
  299. particular, the words 'FILE:' and 'URL:' have been removed from each
  300. line.  To save your on-disk cache, you will need to convert this log
  301. file before starting Squid.  To do that use a simple awk command:
  302.      mv log log.old
  303.      awk '{print $2,$4,$5,$6,$7}' < log.old > log
  304. Notes on stoplists vs ttl_pattern
  305. ==============================================================================
  306. You can use the stoplists ('http_stop', etc) in the configuration file
  307. to prevent objects from being cached.  Using a 'ttl_pattern' with the
  308. TTL to zero will also prevent objects from being saved.
  309. The 'http_stop' (etc) have a dual purpose: to prevent objects from
  310. being cached, and to prevent some requests from being queried at
  311. neighbor caches.  There is now a separate 'hierarchy_stoplist' which
  312. can be used to prevent the hierarchy queries, but still allow objects
  313. to be cached.  For example, if your parent cache does now allow FTP
  314. requests, then your hierarchy_stoplist should contain:
  315.     hierarchy_stoplist ftp://
  316. SIGUSR1 now rotates log files
  317. ==============================================================================
  318. In order to be more consistent with other daemon programs, SIGHUP is
  319. used to reconfigure the running process.  This means that we needed to
  320. change the signal used to rotate the log files.  We now use SIGUSR1 to
  321. rotate the logs.
  322. ``no-query'' option for cache_host lines
  323. ==============================================================================
  324. Some cache configurations behind firewalls may require ICP to be used
  325. for caches behind the firewall, but not to caches on the other side
  326. (because the firewall blocks UDP traffic).  To achieve this, use the
  327. no-query option:
  328.      cache_host   outside.my.org   parent   3128 3130  no-query
  329.      cache_host   inside.my.org    neighbor 3128 3130