given socket. This somewhat makes up for our lack of a good way to
manage connections to a given proxy backend.
* support/fcgistarter.c
(main): Accept a new -N option that controls how many child procs
we fork off.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@383774 13f79535-47bb-0310-9956-ffa450edef68
daemonization and sockets magic to let a standard fastcgi program listen
on a TCP port.
Unfortunately due to some requirements of the FastCGI libraries and the
way APR process creation works this currently requires platform specific
code and thus only works on Unix systems.
* support/fcgistarter.c: New program.
* support: Add fcgistarter to svn:ignore.
* support/Makefile.in: Build fcgistarter.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@383414 13f79535-47bb-0310-9956-ffa450edef68
fcgi backend. This lets Rails apps work under a balancer setup without
any hacks to Rails itself.
* modules/proxy/mod_proxy_balancer.c
(proxy_balancer_canon): Set r->path_info based on the path we got
from parsing the URL.
* modules/proxy/mod_proxy_fcgi.c
(proxy_fcgi_canon): Remove the comment about balancer not setting
the path_info.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@383291 13f79535-47bb-0310-9956-ffa450edef68
this point we lack a good way to manage them, and thus it's really
easy to end up with situations where you get weird timeouts because
other worker process are holding all the connections open.
This allows Rails applications to reliably work with mod_proxy_fcgi.
* modules/proxy/mod_proxy_fcgi.c
(dispatch): Add a timeout for our poll. This should be controlled
by a config option of some sort, but for now just hardcode it.
(proxy_fcgi_handler): Set close_on_recycle to 1, so we don't hold
open connections to the fastcgi processes.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@383278 13f79535-47bb-0310-9956-ffa450edef68
actually being debugged at the moment. Also note a problem with the way
we handle the path info setup.
* modules/proxy/mod_proxy_fcgi.c
(proxy_fcgi_canon): Log the filename and path info when we set them,
add a note that the path info stuff isn't being set if we're run in
a balancer setup, which needs to be fixed somehow.
(send_environment): Add an (ifdefed) call to log the environment vars
we send to the backend server.
(dump_header_to_log): Default to ifdefing this out, we're a bit beyond
bugs in the raw FCGI protocol at this point and it fills up the logs.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@383239 13f79535-47bb-0310-9956-ffa450edef68
to create a long lived pool, we can use one that's local to the function.
* modules/proxy/mod_proxy_fcgi.c
(proxy_fcgi_baton_t): Removed.
(dispatch): Use a local setaside pool instead of one from the baton.
(proxy_fcgi_handler): Don't bother creating a baton.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@373269 13f79535-47bb-0310-9956-ffa450edef68
strange problems with really large numbers of headers, but I'm starting to
suspect that it's a problem with my FastCGI lib, not this module, and this
at least makes things shorter and a bit easier to read, along with fixing
one bug.
* modules/proxy/mod_proxy_fcgi.c
(handle_headers): Get rid of some cases that were not strictly needed.
Insert a case that was missed that screwed things up when there were
more than one header.
(dispatch): Move the 'done with headers' code into the preceding block,
add a note about a case that needs to be investigated.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@371840 13f79535-47bb-0310-9956-ffa450edef68
end fastcgi process.
* modules/proxy/mod_proxy_fcgi.c
(send_data, get_data): New wrapper functions that do the sendv/recv
stuff and then update the proper statistics.
(send_begin_request, send_environment, dispatch): Use send_data/get_data.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@371560 13f79535-47bb-0310-9956-ffa450edef68
the old code, we'd fail to detect the end of the headers if they were split
over multiple fastcgi records, or if the cgi script used \n at the end of
each header instead of \r\n.
* modules/proxy/mod_proxy_fcgi.c
(HDR_STATE_READING_HEADERS,
HDR_STATE_GOT_CR,
HDR_STATE_GOT_CRLF,
HDR_STATE_GOT_CRLFCR,
HDR_STATE_GOT_LF,
HDR_STATE_DONE_WITH_HEADERS): Constants to track where we are in parsing
the end of the headers.
(handle_headers): Take the current parsing state as an argument, use a
state machine to detect the end of the headers instead of strstr.
(dispatch): Pass the state to handle_headers.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@371428 13f79535-47bb-0310-9956-ffa450edef68
* modules/proxy/mod_proxy_fcgi.c
(proxy_fcgi_canon): Stop pretending unix domain sockets will need their
own url scheme.
(FCGI_SCHEME): New constant to describe the FastCGI proxy backend.
(proxy_fcgi_handler): Drop the fcgi-local stuff, use FCGI_SCHEME now that
we aren't worrying about multiple types of FastCGI workers.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@367906 13f79535-47bb-0310-9956-ffa450edef68
still correctly handle cases where we need to ship those structs
over the wire, by transforming them from FCGI structs to
unsigned char arrays. Place the logic of mapping that
struct to the arrays in distinct functions, isolating
them.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@367300 13f79535-47bb-0310-9956-ffa450edef68
it seems clear that we're going to need to be able to specify arbitrary
portions of the URL that need to be added to the path info. Follow the
lead of mod_proxy_http and add the calculation of this into the canon
handler.
* modules/proxy/mod_proxy_fcgi.c
(proxy_fcgi_canon): Add the path portion of the back end URL to the
path_info of the request, via the ap_proxy_canonenc function.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@367208 13f79535-47bb-0310-9956-ffa450edef68
there's no reason that request ids wouldn't be matching up. Until we
see an example of a request id mismatch error that is absolutely not
caused by an error in our parsing of the FastCGI protocol, we should
be able to go back to treating mismatches as errors.
* modules/proxy/mod_proxy_fcgi.c
(dispatch): Remove #ifdef that turned off treating rid mismatches as
fatal errors.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@366985 13f79535-47bb-0310-9956-ffa450edef68
used a struct to hold the data when writing it, but read it into an array
when reading it. This meant that the knowledge of the header layout was
in two places. This change moves both sides to using an array, and adds
a set of #defines for the offsets into the array, so neither side can get
out of sync.
This also moves the logic for setting up the content length bytes into one
place, where before we had it in several places.
* modules/proxy/fcgi_protocol.h
(fcgi_header): Removed.
(FCGI_HDR_VERSION_OFFSET,
FCGI_HDR_TYPE_OFFSET,
FCGI_HDR_REQUEST_ID_B1_OFFSET,
FCGI_HDR_REQUEST_ID_B0_OFFSET,
FCGI_HDR_CONTENT_LEN_B1_OFFSET,
FCGI_HDR_CONTENT_LEN_B0_OFFSET,
FCGI_HDR_PADDING_LEN_OFFSET,
FCGI_HDR_RESERVED_OFFSET): New constants.
* modules/proxy/mod_proxy_fcgi.c
(fill_in_header): Take an array, not a struct pointer, and handle all
the contents of the header, not just the type and request id.
(send_begin_request, send_environment, dispatch): Update for new way
to fill in headers.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@366926 13f79535-47bb-0310-9956-ffa450edef68
cleanup, but at least it keeps us from messing up the stream when we get
stuff written to stderr by the fastcgi process.
* modules/proxy/mod_proxy_fcgi.c
(dispatch): Move the plen recv down after the switch, so it gets done
for all cases that have padding. Read data for the FCGI_STDERR case
just like we do for FCGI_STDOUT, but write it to the log instead of
sending it to the client.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@366412 13f79535-47bb-0310-9956-ffa450edef68
down on some of the crazy verbose logging, since this seems to be
the problem we were trying to find.
* modules/proxy/mod_proxy_fcgi.c
(dispatch): Remove really verbose logging, move reading of the
padding bytes down to the end of the FCGI_STDOUT case.
Tested By: iholsman
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@366086 13f79535-47bb-0310-9956-ffa450edef68
people have seen where rid != request_id.
* modules/proxy/mod_proxy_fcgi.c
(dispatch): Stop initializing things we're just going to assign over
them later, initialize all of the rid and clen variables, and fix a
warning from passing an unsigned char array into apr_socket_recv by
adding a cast to char *.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@365813 13f79535-47bb-0310-9956-ffa450edef68
* modules/proxy/mod_proxy_fcgi.c
(proxy_fcgi_baton_t): New struct, holds per-connection data.
(dispatch): Set buckets aside into the scratch pool in the baton,
clearing it when we pass the baton on. Deal with the case where
the content length is larger than AP_IOBUFSIZE. Consistently use
sizeof when referring to the length of buffers. Explicitly null
terminate the read buffer after reading. Read the padding bytes
in a second pass to simplify logic.
(proxy_fcgi_handler): Create our baton and stash it in the connection's
data member.
Submitted By: Garrett Rooney <rooneg apache.org>
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@360164 13f79535-47bb-0310-9956-ffa450edef68
back end fastcgi process. This includes switching to a poll based dispatch
loop that handles interleaved reads and writes.
* modules/proxy/mod_proxy_fcgi.c
(MAX_INPUT_BYTES): Removed, we now use AP_IOBUFSIZE.
(handle_headers): New helper function for parsing headers out of the
response data.
(send_stdin): Removed, code incorporated into dispatch routine.
(dispatch): New, poll based dispatch loop that handles both reads and
writes.
(fcgi_do_request): Call new dispatch routine. Return OK if we get
through without errors.
Submitted By: Garrett Rooney <rooneg apache.org>
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@359901 13f79535-47bb-0310-9956-ffa450edef68
process.
* modules/proxy/mod_proxy_fcgi.c
(fill_in_header): New helper function.
(send_begin_request, send_environment): Fix formatting, use fill_in_header.
(MAX_INPUT_BYTES): New constant.
(send_stdin): New function.
(fcgi_do_request): Send the body of the request via send_stdin.
Submitted By: Garrett Rooney <rooneg apache.org>
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@359183 13f79535-47bb-0310-9956-ffa450edef68
to mod_proxy_fcgi.
* modules/proxy/mod_proxy_fcgi.c
(proxy_fcgi_canon): Remove unused variables, wrap a long line.
(send_begin_request): Helper function to send the FCGI_BEGIN_REQUEST
message.
(send_environment): Helper function to send the environment.
(fcgi_do_request): Use send_begin_request and send_environment.
Submitted By: Garrett Rooney <rooneg apache.org>
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@359043 13f79535-47bb-0310-9956-ffa450edef68
flush bucket is pre- and postfixed by data buckets in the brigade.
Submitted by: Ruediger Pluem
Reviewed by: Justin Erenkrantz, Joe Orton, Jim Jagielski
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@357328 13f79535-47bb-0310-9956-ffa450edef68