Mercurial > hg > nginx
annotate auto/summary @ 9300:5be23505292b default tip
SSI: fixed incorrect or duplicate stub output.
Following 3518:eb3aaf8bd2a9 (0.8.37), r->request_output is only set
if there are data in the first buffer sent in the subrequest. As a
result, following the change mentioned this flag cannot be used to
prevent duplicate ngx_http_ssi_stub_output() calls, since it is not
set if there was already some output, but the first buffer was empty.
Still, when there are multiple subrequests, even an empty subrequest
response might be delayed by the postpone filter, leading to a second
call of ngx_http_ssi_stub_output() during finalization from
ngx_http_writer() the subreqest buffers are released by the postpone
filter. Since r->request_output is not set after the first call, this
resulted in duplicate stub output.
Additionally, checking only the first buffer might be wrong in some
unusual cases. For example, the first buffer might be empty if
$r->flush() is called before printing any data in the embedded Perl
module.
Depending on the postpone_output value and corresponding sizes, this
issue can result in either duplicate or unexpected stub output, or
"zero size buf in writer" alerts.
Following 8124:f5515e727656 (1.23.4), it became slightly easier to
reproduce the issue, as empty static files and empty cache items now
result in a response with an empty buffer. Before the change, an empty
proxied response can be used to reproduce the issue.
Fix is check all buffers and set r->request_output if any non-empty
buffers are sent. This ensures that all unusual cases of non-empty
responses are covered, and also that r->request_output will be set
after the first stub output, preventing duplicate output.
Reported by Jan Gassen.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 04 Jul 2024 17:41:28 +0300 |
parents | 0b5f12d5c531 |
children |
rev | line source |
---|---|
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
425
diff
changeset
|
1 |
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
425
diff
changeset
|
2 # Copyright (C) Igor Sysoev |
4412 | 3 # Copyright (C) Nginx, Inc. |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
425
diff
changeset
|
4 |
210
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
5 |
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
6 echo |
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
7 echo "Configuration summary" |
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
8 |
337
4feff829a849
nginx-0.0.3-2004-05-19-00:28:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
285
diff
changeset
|
9 |
6018
466bd63b63d1
Thread pools implementation.
Valentin Bartenev <vbart@nginx.com>
parents:
6017
diff
changeset
|
10 if [ $USE_THREADS = YES ]; then |
466bd63b63d1
Thread pools implementation.
Valentin Bartenev <vbart@nginx.com>
parents:
6017
diff
changeset
|
11 echo " + using threads" |
466bd63b63d1
Thread pools implementation.
Valentin Bartenev <vbart@nginx.com>
parents:
6017
diff
changeset
|
12 fi |
466bd63b63d1
Thread pools implementation.
Valentin Bartenev <vbart@nginx.com>
parents:
6017
diff
changeset
|
13 |
265
6468241715e6
nginx-0.0.2-2004-02-20-19:48:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
255
diff
changeset
|
14 if [ $USE_PCRE = DISABLED ]; then |
501 | 15 echo " + PCRE library is disabled" |
265
6468241715e6
nginx-0.0.2-2004-02-20-19:48:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
255
diff
changeset
|
16 |
6468241715e6
nginx-0.0.2-2004-02-20-19:48:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
255
diff
changeset
|
17 else |
6468241715e6
nginx-0.0.2-2004-02-20-19:48:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
255
diff
changeset
|
18 case $PCRE in |
7981 | 19 YES) echo " + using system $PCRE_LIBRARY library" ;; |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
424
diff
changeset
|
20 NONE) echo " + PCRE library is not used" ;; |
7981 | 21 *) echo " + using $PCRE_LIBRARY library: $PCRE" ;; |
265
6468241715e6
nginx-0.0.2-2004-02-20-19:48:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
255
diff
changeset
|
22 esac |
6468241715e6
nginx-0.0.2-2004-02-20-19:48:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
255
diff
changeset
|
23 fi |
212
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
210
diff
changeset
|
24 |
399
4e21d1291a14
nginx-0.0.7-2004-07-25-22:34:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
337
diff
changeset
|
25 case $OPENSSL in |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
424
diff
changeset
|
26 YES) echo " + using system OpenSSL library" ;; |
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
424
diff
changeset
|
27 NONE) echo " + OpenSSL library is not used" ;; |
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
424
diff
changeset
|
28 *) echo " + using OpenSSL library: $OPENSSL" ;; |
399
4e21d1291a14
nginx-0.0.7-2004-07-25-22:34:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
337
diff
changeset
|
29 esac |
4e21d1291a14
nginx-0.0.7-2004-07-25-22:34:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
337
diff
changeset
|
30 |
210
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
31 case $ZLIB in |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
424
diff
changeset
|
32 YES) echo " + using system zlib library" ;; |
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
424
diff
changeset
|
33 NONE) echo " + zlib library is not used" ;; |
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
424
diff
changeset
|
34 *) echo " + using zlib library: $ZLIB" ;; |
210
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
35 esac |
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
36 |
3380
1d9063f7483c
print libatomic configure summary
Igor Sysoev <igor@sysoev.ru>
parents:
2893
diff
changeset
|
37 case $NGX_LIBATOMIC in |
1d9063f7483c
print libatomic configure summary
Igor Sysoev <igor@sysoev.ru>
parents:
2893
diff
changeset
|
38 YES) echo " + using system libatomic_ops library" ;; |
1d9063f7483c
print libatomic configure summary
Igor Sysoev <igor@sysoev.ru>
parents:
2893
diff
changeset
|
39 NO) ;; # not used |
1d9063f7483c
print libatomic configure summary
Igor Sysoev <igor@sysoev.ru>
parents:
2893
diff
changeset
|
40 *) echo " + using libatomic_ops library: $NGX_LIBATOMIC" ;; |
1d9063f7483c
print libatomic configure summary
Igor Sysoev <igor@sysoev.ru>
parents:
2893
diff
changeset
|
41 esac |
1d9063f7483c
print libatomic configure summary
Igor Sysoev <igor@sysoev.ru>
parents:
2893
diff
changeset
|
42 |
210
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
43 echo |
255
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
44 |
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
45 |
479 | 46 cat << END |
493 | 47 nginx path prefix: "$NGX_PREFIX" |
48 nginx binary file: "$NGX_SBIN_PATH" | |
6383 | 49 nginx modules path: "$NGX_MODULES_PATH" |
1352 | 50 nginx configuration prefix: "$NGX_CONF_PREFIX" |
493 | 51 nginx configuration file: "$NGX_CONF_PATH" |
52 nginx pid file: "$NGX_PID_PATH" | |
479 | 53 END |
54 | |
469 | 55 if test -n "$NGX_ERROR_LOG_PATH"; then |
493 | 56 echo " nginx error log file: \"$NGX_ERROR_LOG_PATH\"" |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
425
diff
changeset
|
57 else |
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
425
diff
changeset
|
58 echo " nginx logs errors to stderr" |
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
425
diff
changeset
|
59 fi |
479 | 60 |
61 cat << END | |
493 | 62 nginx http access log file: "$NGX_HTTP_LOG_PATH" |
63 nginx http client request body temporary files: "$NGX_HTTP_CLIENT_TEMP_PATH" | |
3557
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
64 END |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
65 |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
66 if [ $HTTP_PROXY = YES ]; then |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
67 echo " nginx http proxy temporary files: \"$NGX_HTTP_PROXY_TEMP_PATH\"" |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
68 fi |
479 | 69 |
3557
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
70 if [ $HTTP_FASTCGI = YES ]; then |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
71 echo " nginx http fastcgi temporary files: \"$NGX_HTTP_FASTCGI_TEMP_PATH\"" |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
72 fi |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
73 |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
74 if [ $HTTP_UWSGI = YES ]; then |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
75 echo " nginx http uwsgi temporary files: \"$NGX_HTTP_UWSGI_TEMP_PATH\"" |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
76 fi |
77188d729402
print default module temporary directory path in summary
Igor Sysoev <igor@sysoev.ru>
parents:
3549
diff
changeset
|
77 |
3637 | 78 if [ $HTTP_SCGI = YES ]; then |
79 echo " nginx http scgi temporary files: \"$NGX_HTTP_SCGI_TEMP_PATH\"" | |
80 fi | |
4280
91874133fb27
Renamed ngx_http_limit_zone_module to ngx_http_limit_conn_module.
Valentin Bartenev <vbart@nginx.com>
parents:
3895
diff
changeset
|
81 |
91874133fb27
Renamed ngx_http_limit_zone_module to ngx_http_limit_conn_module.
Valentin Bartenev <vbart@nginx.com>
parents:
3895
diff
changeset
|
82 echo "$NGX_POST_CONF_MSG" |