Hi,
I was checking how proxy_no_cache is handled, and I want to open a
discussion
here. When it is set to off, should the ngx_http_upstream_cache[0] call at
all? I
mean, why start the cache options when it's not enabled at all?
The primary use case is when the cache is disabled, and things regarding
cache
are still in there like proxy_cache_convert_head, etc..
I have a small patch about what I'm trying to do. Is it something that you
will
accept at all?
[0]
https://github.com/nginx/nginx/blob/5eadaf69e394c030056e4190d86dae0262f8617c/src/http/ngx_http_upstream.c#L823
Patch(Not complete at all)
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 61fad5ca..1217767d 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -566,42 +566,55 @@ ngx_http_upstream_init_request(ngx_http_request_t *r)
#if (NGX_HTTP_CACHE)
if (u->conf->cache) {
- ngx_int_t rc;
- rc = ngx_http_upstream_cache(r, u);
+ switch (ngx_http_test_predicates(r, u->conf->no_cache)) {
- if (rc == NGX_BUSY) {
- r->write_event_handler = ngx_http_upstream_init_request;
- return;
- }
+ case NGX_ERROR:
+ return;
- r->write_event_handler = ngx_http_request_empty_handler;
+ case NGX_DECLINED:
+ /* No need to configure cache at all */
+ break;
+ default: {/* NGX_OK */
+ ngx_int_t rc;
+ rc = ngx_http_upstream_cache(r, u);
- if (rc == NGX_ERROR) {
- ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
- return;
- }
+ if (rc == NGX_BUSY) {
+ r->write_event_handler = ngx_http_upstream_init_request;
+ return;
+ }
- if (rc == NGX_OK) {
- rc = ngx_http_upstream_cache_send(r, u);
+ r->write_event_handler = ngx_http_request_empty_handler;
- if (rc == NGX_DONE) {
- return;
- }
+ if (rc == NGX_ERROR) {
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return;
+ }
- if (rc == NGX_HTTP_UPSTREAM_INVALID_HEADER) {
- rc = NGX_DECLINED;
- r->cached = 0;
- u->buffer.start = NULL;
- u->cache_status = NGX_HTTP_CACHE_MISS;
- u->request_sent = 1;
- }
- }
+ if (rc == NGX_OK) {
+ rc = ngx_http_upstream_cache_send(r, u);
+
+ if (rc == NGX_DONE) {
+ return;
+ }
+
+ if (rc == NGX_HTTP_UPSTREAM_INVALID_HEADER) {
+ rc = NGX_DECLINED;
+ r->cached = 0;
+ u->buffer.start = NULL;
+ u->cache_status = NGX_HTTP_CACHE_MISS;
+ u->request_sent = 1;
+ }
+ }
+
+ if (rc != NGX_DECLINED) {
+ ngx_http_finalize_request(r, rc);
+ return;
+ }
+ break;
+ }
+ }
- if (rc != NGX_DECLINED) {
- ngx_http_finalize_request(r, rc);
- return;
- }
}
#endif
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel