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"
|
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
|
if [ $HTTP_REWRITE = YES -a $USE_PCRE != DISABLED ]; then
|
||||||
have=NGX_HTTP_REWRITE . auto/have
|
have=NGX_HTTP_REWRITE . auto/have
|
||||||
USE_PCRE=YES
|
USE_PCRE=YES
|
||||||
|
@ -30,9 +30,10 @@ EVENT_AIO=NO
|
|||||||
USE_THREADS=NO
|
USE_THREADS=NO
|
||||||
|
|
||||||
HTTP_CHARSET=YES
|
HTTP_CHARSET=YES
|
||||||
HTTP_REWRITE=YES
|
|
||||||
HTTP_GZIP=YES
|
HTTP_GZIP=YES
|
||||||
HTTP_SSI=YES
|
HTTP_SSI=YES
|
||||||
|
HTTP_STATUS=YES
|
||||||
|
HTTP_REWRITE=YES
|
||||||
HTTP_PROXY=YES
|
HTTP_PROXY=YES
|
||||||
|
|
||||||
USE_PCRE=NO
|
USE_PCRE=NO
|
||||||
@ -82,9 +83,10 @@ do
|
|||||||
--with-threads) USE_THREADS="pthreads" ;;
|
--with-threads) USE_THREADS="pthreads" ;;
|
||||||
|
|
||||||
--without-http_charset_module) HTTP_CHARSET=NO ;;
|
--without-http_charset_module) HTTP_CHARSET=NO ;;
|
||||||
--without-http_rewrite_module) HTTP_REWRITE=NO ;;
|
|
||||||
--without-http_ssi_module) HTTP_SSI=NO ;;
|
--without-http_ssi_module) HTTP_SSI=NO ;;
|
||||||
--without-http_gzip_module) HTTP_GZIP=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 ;;
|
--without-http_proxy_module) HTTP_PROXY=NO ;;
|
||||||
|
|
||||||
--with-cc=*) CC="$value" ;;
|
--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_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_FILTER_MODULE=ngx_http_gzip_filter_module
|
||||||
HTTP_GZIP_SRCS=src/http/modules/ngx_http_gzip_filter.c
|
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_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_MODULE=ngx_http_proxy_module
|
||||||
HTTP_PROXY_INCS="src/http/modules/proxy"
|
HTTP_PROXY_INCS="src/http/modules/proxy"
|
||||||
HTTP_PROXY_DEPS=src/http/modules/proxy/ngx_http_proxy_handler.h
|
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;
|
c = cycle->connections;
|
||||||
for (i = 0; i < cycle->connection_n; i++) {
|
for (i = 0; i < cycle->connection_n; i++) {
|
||||||
c[i].fd = (ngx_socket_t) -1;
|
c[i].fd = (ngx_socket_t) -1;
|
||||||
|
c[i].data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cycle->read_events = ngx_alloc(sizeof(ngx_event_t) * ecf->connections,
|
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;
|
r->http_state = NGX_HTTP_INITING_REQUEST_STATE;
|
||||||
|
|
||||||
/* find the server configuration for the address:port */
|
/* 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;
|
c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r->http_state = NGX_HTTP_KEEPALIVE_STATE;
|
||||||
|
|
||||||
if (rev->ready) {
|
if (rev->ready) {
|
||||||
ngx_http_keepalive_handler(rev);
|
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 = log->data;
|
||||||
ctx->url = NULL;
|
ctx->url = NULL;
|
||||||
|
|
||||||
|
r->request_line.len = 0;
|
||||||
|
|
||||||
ngx_destroy_pool(r->pool);
|
ngx_destroy_pool(r->pool);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -207,6 +207,8 @@ struct ngx_http_cleanup_s {
|
|||||||
typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);
|
typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);
|
||||||
|
|
||||||
struct ngx_http_request_s {
|
struct ngx_http_request_s {
|
||||||
|
uint32_t signature; /* "HTTP" */
|
||||||
|
|
||||||
ngx_connection_t *connection;
|
ngx_connection_t *connection;
|
||||||
|
|
||||||
void **ctx;
|
void **ctx;
|
||||||
|
Loading…
Reference in New Issue
Block a user