---- oh...@cox.net wrote: 
> 
> ---- oh...@cox.net wrote: 
> > 
> > ---- oh...@cox.net wrote: 
> > > 
> > > ---- oh...@cox.net wrote: 
> > > > Hi,
> > > > 
> > > > I'm not sure if this is the appropriate list, or if I should post on 
> > > > the regular httpd list...
> > > > 
> > > > I've been trying to work with an Apache module, mod_limitipconn:
> > > > 
> > > > http://dominia.org/djao/limitipconn2.html
> > > > 
> > > > This is with Apache 2.2.8/2.2.11.
> > > > 
> > > > Our use case is slightly different that the original one for this 
> > > > module.  The original code is designed to limit the number of 
> > > > connections from any given IP address, whereas in my case, we want to 
> > > > limit the total number of connections to the entire Apache server 
> > > > instance.
> > > > 
> > > > To do that, I commented out one line (an 'if'), as shown below:
> > > > 
> > > >     /* Count up the number of connections we are handling right now from
> > > >      * this IP address */
> > > >     /* This is modified to not do strcmp(address, ws_record->client 
> > > > check, in order
> > > >        to count ALL connections to this server. */
> > > >     for (i = 0; i < server_limit; ++i) {
> > > >       for (j = 0; j < thread_limit; ++j) {
> > > >         ws_record = ap_get_scoreboard_worker(i, j);
> > > >         switch (ws_record->status) {
> > > >             case SERVER_BUSY_READ:
> > > >             case SERVER_BUSY_WRITE:
> > > >             case SERVER_BUSY_KEEPALIVE:
> > > >             case SERVER_BUSY_LOG:
> > > >             case SERVER_BUSY_DNS:
> > > >             case SERVER_CLOSING:
> > > >             case SERVER_GRACEFUL:
> > > > /*
> > > >                 if (strcmp(address, ws_record->client) == 0)
> > > > */
> > > >                     ip_count++;
> > > >                 break;
> > > >             default:
> > > >                 break;
> > > >         }
> > > >       }
> > > >     }
> > > > 
> > > > and, after I rebuilt the module, it seems to work ok.
> > > > 
> > > > Now, I'm trying to get the module's directive "NoIPLimit" to work.  
> > > > 
> > > > According to the README, plus reading the code, the way that this is 
> > > > suppose to work is that if you specify a MIME type string (substring, 
> > > > actually), the module won't "count" requests that have any of the MIME 
> > > > types in the directive.
> > > > 
> > > > I have the Apache LogLevel set to debug, and it looks like the 
> > > > "content_type" that the module is retrieving from ALL requests is 
> > > > "text/plain", and I have confirmed that the actual MIME types are not 
> > > > "text/plain" (I see things like "image/gif", "text/css", etc.), so the 
> > > > "NoIPLimit" directive doesn't work.
> > > > 
> > > > From reading the code, I think that the "content_type" is set in this 
> > > > snippet:
> > > > 
> > > >     /* Only check the MIME-type if we have MIME-type stuff in our 
> > > > config.
> > > >        The extra subreq can be quite expensive. */
> > > >     if(cfg->no_limit->nelts > 0 || cfg->excl_limit->nelts > 0) {
> > > >         /* Look up the Content-type of this request. We need a 
> > > > subrequest
> > > >          * here since this module might be called before the URI has 
> > > > been
> > > >          * translated into a MIME type. */
> > > >         content_type = ap_sub_req_lookup_uri(r->uri, r, 
> > > > NULL)->content_type;
> > > > 
> > > >         /* If there's no Content-type, use the default. */
> > > >         if (!content_type) {
> > > >             content_type = ap_default_type(r);
> > > >         }
> > > > 
> > > >         ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
> > > >                 "mod_limitipconn: uri: %s  Content-Type: %s",
> > > >                 r->uri, content_type);
> > > > 
> > > >         /* Cycle through the exempt list; if our content_type is exempt,
> > > >          * return OK */
> > > >         for (i = 0; i < cfg->no_limit->nelts; i++) {
> > > >             if ((ap_strcasecmp_match(content_type, nolim[i]) == 0)
> > > >                 || (strncmp(nolim[i], content_type, strlen(nolim[i])) 
> > > > == 0))
> > > >             {
> > > >                 ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
> > > >                              "mod_limitipconn: OK: %s exempt", 
> > > > content_type);
> > > >                 return DECLINED;
> > > >             }
> > > >         }
> > > > 
> > > > and, in particular:
> > > > 
> > > >         content_type = ap_sub_req_lookup_uri(r->uri, r, 
> > > > NULL)->content_type;
> > > > 
> > > >         /* If there's no Content-type, use the default. */
> > > >         if (!content_type) {
> > > >             content_type = ap_default_type(r);
> > > >         }
> > > > 
> > > > I'm not that familiar with Apache module development, but reading the 
> > > > docs, it *seems* like the above *should* work.
> > > > 
> > > > I'm assuming you all on this list *are* familiar with module 
> > > > development, so I was wondering if you might be able to tell me what, 
> > > > if anything, is wrong with that code (i.e., why is "content_type" not 
> > > > being set with the actual content type?
> > > > 
> > > > Thanks in advance!!
> > > > 
> > > > Jim
> > > 
> > > Hi,
> > > 
> > > BTW, here's an example of the Apache debug output for mod_limitipconn 
> > > that illustrates what I'm seeing:
> > > 
> > > [Sun Nov 15 02:21:09 2009] [debug] mod_limitipconn.c(143): [client 
> > > 192.168.xx.yy] mod_limitipconn: uri: /anewwsclient/css/body.css  
> > > Content-Type: text/plain, referer: http://foo.host.com/anewwsclient
> > > 
> > > As you can see, the URI is for a .css, but the Content-Type comes back as 
> > > "text/plain, referer: http://foo.host.com/anewwsclient";, then, since the 
> > > mod_limitipconn code checks for the MIME types in the NoIPLimit 
> > > directive, (e.g., image/* text/css/*), it fails to detect this as a MIME 
> > > type that it should ignore.
> > > 
> > > Shouldn't the Content-Type be something like "text/css, referer: 
> > > http://foo.host.com/anewwsclient";?
> > > 
> > > Jim
> > > 
> > 
> > 
> > Hi,
> > 
> > I just noticed that when I run "apachectl -M", I get:
> > 
> > bash-3.00# ./apachectl -M
> > Loaded Modules:
> >  core_module (static)
> >  authn_file_module (static)
> >  authn_default_module (static)
> >  authz_host_module (static)
> >  authz_groupfile_module (static)
> >  authz_user_module (static)
> >  authz_default_module (static)
> >  auth_basic_module (static)
> >  include_module (static)
> >  filter_module (static)
> >  log_config_module (static)
> >  env_module (static)
> >  setenvif_module (static)
> >  ssl_module (static)
> >  mpm_prefork_module (static)
> >  http_module (static)
> >  mime_module (static)
> >  status_module (static)
> >  autoindex_module (static)
> >  asis_module (static)
> >  cgi_module (static)
> >  negotiation_module (static)
> >  dir_module (static)
> >  actions_module (static)
> >  userdir_module (static)
> >  alias_module (static)
> >  so_module (static)
> >  limitipconn_module (shared)
> > Syntax OK
> > 
> > Notice that the static modules apparently are listed before the shared 
> > module.  I'm assuming that this list is in module, order, so it seems like 
> > the limitipconn module is "first".
> > 
> > I'm wondering if *this* might be my problem, i.e., since the 
> > mod_limitipconn is first, and the mod_mime (which maps the suffix to mime 
> > type) is "after" the mod_limitipconn, if that might be why mod_limitipconn 
> > is apparently not able to determine the correct MIME type?
> > 
> > Jim
> > 
> 
> Hi,
> 
> To try to test the "precedence" theory, I built a new Apache 2.2.14, with all 
> shared module.  I then built a new copy of mod_limitipconn.so.
> 
> Now, here's the weird thing :(...
> 
> When I run this new Apache with the new mod_limitipconn.so, and check in the 
> error_log file, it is now SHOWING the PROPER Content-Type!!
> 
> Here's the 'apachectl -M'  and '-V' from this new build:
> 
> [r...@fed9 htdocs]# ../bin/apachectl -M
> Loaded Modules:
>  core_module (static)
>  mpm_prefork_module (static)
>  http_module (static)
>  so_module (static)
>  authn_file_module (shared)
>  authn_dbm_module (shared)
>  authn_anon_module (shared)
>  authn_dbd_module (shared)
>  authn_default_module (shared)
>  authz_host_module (shared)
>  authz_groupfile_module (shared)
>  authz_user_module (shared)
>  authz_dbm_module (shared)
>  authz_owner_module (shared)
>  authz_default_module (shared)
>  auth_basic_module (shared)
>  auth_digest_module (shared)
>  dbd_module (shared)
>  dumpio_module (shared)
>  ext_filter_module (shared)
>  include_module (shared)
>  filter_module (shared)
>  substitute_module (shared)
>  deflate_module (shared)
>  log_config_module (shared)
>  log_forensic_module (shared)
>  logio_module (shared)
>  env_module (shared)
>  mime_magic_module (shared)
>  cern_meta_module (shared)
>  expires_module (shared)
>  headers_module (shared)
>  ident_module (shared)
>  usertrack_module (shared)
>  unique_id_module (shared)
>  setenvif_module (shared)
>  version_module (shared)
>  mime_module (shared)
>  dav_module (shared)
>  status_module (shared)
>  autoindex_module (shared)
>  asis_module (shared)
>  info_module (shared)
>  cgi_module (shared)
>  dav_fs_module (shared)
>  vhost_alias_module (shared)
>  negotiation_module (shared)
>  dir_module (shared)
>  imagemap_module (shared)
>  actions_module (shared)
>  speling_module (shared)
>  userdir_module (shared)
>  alias_module (shared)
>  rewrite_module (shared)
>  limitipconn_module (shared)
> Syntax OK
> [r...@fed9 htdocs]# ../bin/apachectl -V
> Server version: Apache/2.2.14 (Unix)
> Server built:   Nov 14 2009 18:20:52
> Server's Module Magic Number: 20051115:23
> Server loaded:  APR 1.3.9, APR-Util 1.3.9
> Compiled using: APR 1.3.9, APR-Util 1.3.9
> Architecture:   32-bit
> Server MPM:     Prefork
>   threaded:     no
>     forked:     yes (variable process count)
> Server compiled with....
>  -D APACHE_MPM_DIR="server/mpm/prefork"
>  -D APR_HAS_SENDFILE
>  -D APR_HAS_MMAP
>  -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
>  -D APR_USE_SYSVSEM_SERIALIZE
>  -D APR_USE_PTHREAD_SERIALIZE
>  -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
>  -D APR_HAS_OTHER_CHILD
>  -D AP_HAVE_RELIABLE_PIPED_LOGS
>  -D DYNAMIC_MODULE_LIMIT=128
>  -D HTTPD_ROOT="/apps/httpd-2.2.14"
>  -D SUEXEC_BIN="/apps/httpd-2.2.14/bin/suexec"
>  -D DEFAULT_PIDLOG="logs/httpd.pid"
>  -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
>  -D DEFAULT_LOCKFILE="logs/accept.lock"
>  -D DEFAULT_ERRORLOG="logs/error_log"
>  -D AP_TYPES_CONFIG_FILE="conf/mime.types"
>  -D SERVER_CONFIG_FILE="conf/httpd.conf"
> [r...@fed9 htdocs]#
> 
> The above looks similar to the Apache that doesn't work.  The main thing is 
> the old Apache had all modules except for mod_limitipconnn.so as "static", 
> whereas the new Apache has all modules as "shared", and the old Apache was on 
> 64-bit Redhat, whereas the new Apache is on 32-bit Fedora 9.
> 
> Anyone have any ideas about what might be causing the missing Content-Type on 
> the old Apache?
> 
> Thanks,
> Jim
> 
> 


Hi,

To try to eliminate the possibilities, I built another new Apache, but with all 
static modules.  Again, this will on a 32-bit Fedora 9.

I then rebuilt mod_limitipconn.so.

When I tested this new Apache+mod_limitipconn.so, and check the Apache 
error_log, it is STILL displaying the Content-Type correctly!!

So, I am still puzzled at this point. 

Is the problem that the original Apache was on a 64-bit system?

Could the Apache API on the 64-bit system be behaving differently than on a 
32-bit system?

Anyone?

Thanks,
Jim

Reply via email to