Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Встроенный перл в ssi
On Mon, Jun 22, 2009 at 03:45:47PM +0300, Vladimir Aliokhin wrote:
> Приветствую.
>
> Возникла проблема, Помогите пожалуйста выяснить где ошибка.
> Проблема в том что если использовать вызовы встроенного перла в ssi то
> все что после этого вызова nginx ничего браузеру не отдает.
>
> Исходные данные:
> ubuntu 9.04, nginx 0.7.61, собирается обычно: ./configure
> --with-http_perl_module && make install
>
> конфиг nginx:
>
> worker_processes 1;
>
> events {
> worker_connections 1024;
> }
>
> http {
> include mime.types;
> default_type application/octet-stream;
> sendfile on;
> keepalive_timeout 65;
> perl_modules conf/perl;
> perl_require test.pl;
> server {
> listen 80;
> server_name localhost;
> ssi on;
> location / {
> root html;
> index index.shtml;
> location /perl {
> perl test::test;
> }
> }
> }
> }
>
> Файл conf/perl/test.pl:
>
> package test;
> use nginx;
> sub test {
> my $r = shift;
> $r->send_http_header("text/html");
> return OK if $r->header_only;
> $r->print("Test from perl\n");
> $r->flush();
> return OK;
> }
>
> файл html/index.shtml:
>
> Hello
> <hr/>
> Perl : <!--#include virtual="/perl" -->
> <hr/>
> Included : <!--#include virtual="/included.html" -->
> <hr/>
>
> Файл html/included.html:
> Included file
>
> если теперь открыть http://127.0.0.1 в браузере то получим:
>
> Hello
> ------------------------------------
> Perl : Test from perl
>
> или, если посмотрим исходник страницы:
>
> Hello
> <hr/>
> Perl : Test from perl
>
>
> и все, хотя должно быть еще
> ----------------------------------
> Included : Included file
>
>
> Хотя если скачать файл index.shtml обычным wget-ом то получим
>
> Hello
> <hr/>
> Perl : Test from perl
>
> <hr/>
> Included : Included file
>
>
> <hr/>
>
> То есть то что надо. Однако браузер не хочет отображать ничего после
> инклуда перла.
> проверено на firefox 3.5/linux, Opera 10/linux, elinks 0.12pre2/linux.
> Та же ситуация и на firefox, IE на винде.
Прилагаемый патч должен помочь.
--
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_request.c
===================================================================
--- src/http/ngx_http_request.c (revision 2279)
+++ src/http/ngx_http_request.c (working copy)
@@ -2694,7 +2694,13 @@
}
if (flags & NGX_HTTP_LAST) {
- b->last_buf = 1;
+
+ if (r == r->main && !r->post_action) {
+ b->last_buf = 1;
+
+ } else {
+ b->last_in_chain = 1;
+ }
}
if (flags & NGX_HTTP_FLUSH) {
Index: src/http/ngx_http_upstream.c
===================================================================
--- src/http/ngx_http_upstream.c (revision 2279)
+++ src/http/ngx_http_upstream.c (working copy)
@@ -2888,7 +2888,7 @@
r->connection->log->action = "sending to client";
- if (rc == 0 && r == r->main && !r->post_action) {
+ if (rc == 0) {
rc = ngx_http_send_special(r, NGX_HTTP_LAST);
}
|