mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 17:52:38 +08:00
nginx-0.0.7-2004-06-24-11:53:37 import
This commit is contained in:
parent
e0207bb8eb
commit
c83f683553
@ -66,6 +66,12 @@ fi
|
||||
|
||||
HTTP_MODULES="$HTTP_MODULES $HTTP_STATIC_MODULE $HTTP_INDEX_MODULE"
|
||||
|
||||
if [ $HTTP_STATUS = YES ]; then
|
||||
have=NGX_HTTP_STATUS . auto/have
|
||||
HTTP_MODULES="$HTTP_MODULES $HTTP_STATUS_MODULE"
|
||||
HTTP_SRCS="$HTTP_SRCS $HTTP_STATUS_SRCS"
|
||||
fi
|
||||
|
||||
if [ $HTTP_REWRITE = YES -a $USE_PCRE != DISABLED ]; then
|
||||
have=NGX_HTTP_REWRITE . auto/have
|
||||
USE_PCRE=YES
|
||||
|
@ -30,9 +30,10 @@ EVENT_AIO=NO
|
||||
USE_THREADS=NO
|
||||
|
||||
HTTP_CHARSET=YES
|
||||
HTTP_REWRITE=YES
|
||||
HTTP_GZIP=YES
|
||||
HTTP_SSI=YES
|
||||
HTTP_STATUS=YES
|
||||
HTTP_REWRITE=YES
|
||||
HTTP_PROXY=YES
|
||||
|
||||
USE_PCRE=NO
|
||||
@ -82,9 +83,10 @@ do
|
||||
--with-threads) USE_THREADS="pthreads" ;;
|
||||
|
||||
--without-http_charset_module) HTTP_CHARSET=NO ;;
|
||||
--without-http_rewrite_module) HTTP_REWRITE=NO ;;
|
||||
--without-http_ssi_module) HTTP_SSI=NO ;;
|
||||
--without-http_gzip_module) HTTP_GZIP=NO ;;
|
||||
--without-http_status_module) HTTP_STATUS=NO ;;
|
||||
--without-http_rewrite_module) HTTP_REWRITE=NO ;;
|
||||
--without-http_proxy_module) HTTP_PROXY=NO ;;
|
||||
|
||||
--with-cc=*) CC="$value" ;;
|
||||
|
12
auto/sources
12
auto/sources
@ -240,10 +240,6 @@ HTTP_CHARSET_FILTER_MODULE=ngx_http_charset_filter_module
|
||||
HTTP_CHARSET_SRCS=src/http/modules/ngx_http_charset_filter.c
|
||||
|
||||
|
||||
HTTP_REWRITE_MODULE=ngx_http_rewrite_module
|
||||
HTTP_REWRITE_SRCS=src/http/modules/ngx_http_rewrite_handler.c
|
||||
|
||||
|
||||
HTTP_GZIP_FILTER_MODULE=ngx_http_gzip_filter_module
|
||||
HTTP_GZIP_SRCS=src/http/modules/ngx_http_gzip_filter.c
|
||||
|
||||
@ -252,6 +248,14 @@ HTTP_SSI_FILTER_MODULE=ngx_http_ssi_filter_module
|
||||
HTTP_SSI_SRCS=src/http/modules/ngx_http_ssi_filter.c
|
||||
|
||||
|
||||
HTTP_STATUS_MODULE=ngx_http_status_module
|
||||
HTTP_STATUS_SRCS=src/http/modules/ngx_http_status_handler.c
|
||||
|
||||
|
||||
HTTP_REWRITE_MODULE=ngx_http_rewrite_module
|
||||
HTTP_REWRITE_SRCS=src/http/modules/ngx_http_rewrite_handler.c
|
||||
|
||||
|
||||
HTTP_PROXY_MODULE=ngx_http_proxy_module
|
||||
HTTP_PROXY_INCS="src/http/modules/proxy"
|
||||
HTTP_PROXY_DEPS=src/http/modules/proxy/ngx_http_proxy_handler.h
|
||||
|
@ -264,6 +264,7 @@ static ngx_int_t ngx_event_process_init(ngx_cycle_t *cycle)
|
||||
c = cycle->connections;
|
||||
for (i = 0; i < cycle->connection_n; i++) {
|
||||
c[i].fd = (ngx_socket_t) -1;
|
||||
c[i].data = NULL;
|
||||
}
|
||||
|
||||
cycle->read_events = ngx_alloc(sizeof(ngx_event_t) * ecf->connections,
|
||||
|
@ -1,61 +0,0 @@
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_http.h>
|
||||
|
||||
|
||||
static ngx_command_t ngx_http_status_commands[] = {
|
||||
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
|
||||
ngx_http_module_t ngx_http_status_module_ctx = {
|
||||
NULL, /* pre conf */
|
||||
|
||||
NULL, /* create main configuration */
|
||||
NULL, /* init main configuration */
|
||||
|
||||
NULL, /* create server configuration */
|
||||
NULL, /* merge server configuration */
|
||||
|
||||
ngx_http_status_create_loc_conf, /* create location configration */
|
||||
ngx_http_status_merge_loc_conf /* merge location configration */
|
||||
};
|
||||
|
||||
|
||||
ngx_module_t ngx_http_status_module = {
|
||||
NGX_MODULE,
|
||||
&ngx_http_status_module_ctx, /* module context */
|
||||
ngx_http_status_commands, /* module directives */
|
||||
NGX_HTTP_MODULE, /* module type */
|
||||
ngx_http_status_init, /* init module */
|
||||
NULL /* init child */
|
||||
};
|
||||
|
||||
|
||||
static char http_states = "IRPCUWLK";
|
||||
|
||||
|
||||
int ngx_http_status_handler(ngx_http_request_t *r)
|
||||
{
|
||||
ngx_int_t i, http;
|
||||
ngx_connection_t *c;
|
||||
ngx_http_request_t *sr;
|
||||
|
||||
c = ngx_cycle->connections;
|
||||
|
||||
for (i = 0; i < ngx_cycle->connection_n; i++) {
|
||||
if (c[i].module != http || c[i].data == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (c[i].data == NULL && c[i].fd != -1) {
|
||||
'A'
|
||||
}
|
||||
|
||||
sr = c[i].data;
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
}
|
181
src/http/modules/ngx_http_status_handler.c
Normal file
181
src/http/modules/ngx_http_status_handler.c
Normal file
@ -0,0 +1,181 @@
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_http.h>
|
||||
|
||||
|
||||
static char *ngx_http_status(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
|
||||
|
||||
static ngx_command_t ngx_http_status_commands[] = {
|
||||
|
||||
{ ngx_string("status"),
|
||||
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
||||
ngx_http_status,
|
||||
0,
|
||||
0,
|
||||
NULL },
|
||||
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
|
||||
|
||||
ngx_http_module_t ngx_http_status_module_ctx = {
|
||||
NULL, /* pre conf */
|
||||
|
||||
NULL, /* create main configuration */
|
||||
NULL, /* init main configuration */
|
||||
|
||||
NULL, /* create server configuration */
|
||||
NULL, /* merge server configuration */
|
||||
|
||||
NULL, /* create location configuration */
|
||||
NULL /* merge location configuration */
|
||||
};
|
||||
|
||||
|
||||
ngx_module_t ngx_http_status_module = {
|
||||
NGX_MODULE,
|
||||
&ngx_http_status_module_ctx, /* module context */
|
||||
ngx_http_status_commands, /* module directives */
|
||||
NGX_HTTP_MODULE, /* module type */
|
||||
NULL, /* init module */
|
||||
NULL /* init process */
|
||||
};
|
||||
|
||||
|
||||
static ngx_int_t ngx_http_status_handler(ngx_http_request_t *r)
|
||||
{
|
||||
size_t len;
|
||||
ngx_int_t rc;
|
||||
ngx_uint_t i, dash;
|
||||
ngx_buf_t *b;
|
||||
ngx_chain_t out;
|
||||
ngx_connection_t *c;
|
||||
ngx_http_request_t *rq;
|
||||
|
||||
if (r->method != NGX_HTTP_GET && r->method != NGX_HTTP_HEAD) {
|
||||
return NGX_HTTP_NOT_ALLOWED;
|
||||
}
|
||||
|
||||
rc = ngx_http_discard_body(r);
|
||||
|
||||
if (rc != NGX_OK && rc != NGX_AGAIN) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (!(r->headers_out.content_type =
|
||||
ngx_http_add_header(&r->headers_out, ngx_http_headers_out)))
|
||||
{
|
||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
|
||||
r->headers_out.content_type->key.len = 0;
|
||||
r->headers_out.content_type->key.data = NULL;
|
||||
r->headers_out.content_type->value.len = sizeof("text/plain") - 1;
|
||||
r->headers_out.content_type->value.data = (u_char *) "text/plain";
|
||||
|
||||
if (r->method == NGX_HTTP_HEAD) {
|
||||
r->headers_out.status = NGX_HTTP_OK;
|
||||
|
||||
rc = ngx_http_send_header(r);
|
||||
|
||||
if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
len = 0;
|
||||
dash = 0;
|
||||
|
||||
c = ngx_cycle->connections;
|
||||
for (i = 0; i < ngx_cycle->connection_n; i++) {
|
||||
rq = c[i].data;
|
||||
if (rq && rq->signature == NGX_HTTP_MODULE) {
|
||||
|
||||
if (rq->request_line.len) {
|
||||
len += NGX_INT32_LEN + 1 + rq->request_line.len + 2 + 2;
|
||||
dash = 0;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!dash) {
|
||||
len += 3;
|
||||
dash = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(b = ngx_create_temp_buf(r->pool, len))) {
|
||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
|
||||
dash = 0;
|
||||
|
||||
for (i = 0; i < ngx_cycle->connection_n; i++) {
|
||||
rq = c[i].data;
|
||||
if (rq && rq->signature == NGX_HTTP_MODULE) {
|
||||
|
||||
#if 0
|
||||
switch (rq->http_state) {
|
||||
case NGX_HTTP_INITING_REQUEST_STATE:
|
||||
|
||||
case NGX_HTTP_KEEPALIVE_STATE:
|
||||
}
|
||||
#endif
|
||||
|
||||
if (rq->request_line.len) {
|
||||
b->last += ngx_snprintf((char *) b->last, NGX_INT32_LEN,
|
||||
"%u", i);
|
||||
*(b->last++) = ' ';
|
||||
|
||||
*(b->last++) = '"';
|
||||
b->last = ngx_cpymem(b->last, r->request_line.data,
|
||||
r->request_line.len);
|
||||
*(b->last++) = '"';
|
||||
|
||||
*(b->last++) = CR; *(b->last++) = LF;
|
||||
dash = 0;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!dash) {
|
||||
*(b->last++) = '-'; *(b->last++) = CR; *(b->last++) = LF;
|
||||
dash = 1;
|
||||
}
|
||||
}
|
||||
|
||||
r->headers_out.status = NGX_HTTP_OK;
|
||||
r->headers_out.content_length_n = b->last - b->pos;
|
||||
|
||||
rc = ngx_http_send_header(r);
|
||||
|
||||
if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (!r->main) {
|
||||
b->last_buf = 1;
|
||||
}
|
||||
|
||||
out.buf = b;
|
||||
out.next = NULL;
|
||||
|
||||
return ngx_http_output_filter(r, &out);
|
||||
}
|
||||
|
||||
|
||||
static char *ngx_http_status(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_conf_ctx_t *ctx;
|
||||
ngx_http_core_loc_conf_t *clcf;
|
||||
|
||||
ctx = cf->ctx;
|
||||
clcf = ctx->loc_conf[ngx_http_core_module.ctx_index];
|
||||
clcf->handler = ngx_http_status_handler;
|
||||
|
||||
return NGX_CONF_OK;
|
||||
}
|
@ -161,6 +161,7 @@ static void ngx_http_init_request(ngx_event_t *rev)
|
||||
}
|
||||
}
|
||||
|
||||
r->signature = NGX_HTTP_MODULE;
|
||||
r->http_state = NGX_HTTP_INITING_REQUEST_STATE;
|
||||
|
||||
/* find the server configuration for the address:port */
|
||||
@ -1382,6 +1383,8 @@ static void ngx_http_set_keepalive(ngx_http_request_t *r)
|
||||
c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
|
||||
}
|
||||
|
||||
r->http_state = NGX_HTTP_KEEPALIVE_STATE;
|
||||
|
||||
if (rev->ready) {
|
||||
ngx_http_keepalive_handler(rev);
|
||||
}
|
||||
@ -1688,6 +1691,8 @@ void ngx_http_close_request(ngx_http_request_t *r, int error)
|
||||
ctx = log->data;
|
||||
ctx->url = NULL;
|
||||
|
||||
r->request_line.len = 0;
|
||||
|
||||
ngx_destroy_pool(r->pool);
|
||||
|
||||
return;
|
||||
|
@ -207,6 +207,8 @@ struct ngx_http_cleanup_s {
|
||||
typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);
|
||||
|
||||
struct ngx_http_request_s {
|
||||
uint32_t signature; /* "HTTP" */
|
||||
|
||||
ngx_connection_t *connection;
|
||||
|
||||
void **ctx;
|
||||
|
Loading…
Reference in New Issue
Block a user