Re: Проблема с perl (внешним на сокете).

Alexey V. Karagodov kav at karagodov.name
Sat Jun 7 10:57:17 MSD 2008


офтоп: помнится в детстве, во времена ms-dos-а, любители острых  
ощущений умудрялись сохранять файлы с именем типа "ya\geniy.xxx" (это  
имя файла)
офтоп: и потом удивлялись, чего это у них рачком программа в этом  
месте встаёт ...

On 07.06.2008, at 1:14, <maxhl at hitline.net.ua> <maxhl at hitline.net.ua>  
wrote:

> В настоящий момент нет правильного перла для nginx такова как php и  
> приходится использовать
> http://www.nginx.eu/nginx-fcgi/nginx-fcgi.txt
> взятого с
> http://www.nginx.eu/nginx-fcgi.html
> он хорошо работает но для серьезной нагрузки негодится к сожелению.
> Мы используем его для отрисовки самописной статы по серву, которая  
> рисуется
> http://www.fi.muni.cz/~kas/mrtg-rrd/
> Возникла проблема толи nginx-fcgi толи самого nginx для вызова  
> скрипта используется url вида
> http://192.168.0.1/stat/rrd/192/net/index.cgi/192.html где
> http://192.168.0.1/stat/rrd/192/net/index.cgi имя скрипта,
> а /192.html это параметры но nginx ищет
> http://192.168.0.1/stat/rrd/192/net/index.cgi/192.html ненаходит его  
> и возвращает 404.
конечно не находит, nginx-у надо както объяснить, что это не то, о чём  
он подумал
тут в рассылке есть примеры реализации виртуальных каталогов (ваш  
случай) ( error_page 404 = /sekretnaya_kartinko; )

офтоп: спрашивается зачем придумали обзначать параметры знаком  
вопроса ...
офтоп: понаписали всякие умники разных RFC дурацких ...

>
>
> Пока сделал так
> _________________________________________________________________________
>               location ~ /index.cgi/ {
>                       fastcgi_pass    unix:/var/run/nginx-fcgi.sock;
> ##                      fastcgi_index    index.cgi;
>                       include  /usr/local/nginx/conf/fastcgi.conf;
>                       fastcgi_param   SCRIPT_FILENAME /home/htdocs 
> $fastcgi_script_name;
>               }
> _________________________________________________________________________
> где fastcgi.conf:
> fastcgi_connect_timeout 30;
> fastcgi_send_timeout 180;
> fastcgi_read_timeout 180;
> fastcgi_buffer_size 32k;
> fastcgi_buffers 4 32k;
> fastcgi_busy_buffers_size 32k;
> fastcgi_temp_file_write_size 32k;
> fastcgi_intercept_errors on;
> fastcgi_param   QUERY_STRING    $query_string;
> fastcgi_param   CONTENT_TYPE    $content_type;
> fastcgi_param   CONTENT_LENGTH  $content_length;
> fastcgi_param   DOCUMENT_URI    $document_uri;
> fastcgi_param   REQUEST_METHOD  $request_method;
>
> fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
> fastcgi_param   SERVER_SOFTWARE nginx/$nginx_version;
>
> fastcgi_param   REMOTE_ADDR     $remote_addr;
> fastcgi_param   REMOTE_PORT     $remote_port;
> fastcgi_param   SERVER_ADDR     $server_addr;
> fastcgi_param   SERVER_PORT     $server_port;
> fastcgi_param   SERVER_NAME     $server_name;
>
> fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
> fastcgi_param   SERVER_PROTOCOL $server_protocol;
> fastcgi_param   DOCUMENT_ROOT   $document_root;
> fastcgi_param   REQUEST_URI     $request_uri;
>
> # PHP only, required if PHP was built with --enable-force-cgi-redirect
>
> _________________________________________________________________________
> и внес фиксы в nginx-fcgi
>
>  if ($req_params{SCRIPT_FILENAME}=~ /^(.*index.cgi).*/)  
> { $req_params{SCRIPT_FILENAME}=$1;}
> и
> $ENV{PATH_INFO}="http://$req_params{SERVER_NAME} 
> $req_params{REQUEST_URI}";
вот это лучше передавать с помощью nginx-а
fastcgi_param PATH_INFO $.......................

>
> __________________________________________________________________________
> Без этой переменной окружения модуль CGI неработает. Кроме того  
> другие нужные переменные могут отсутствовать.
другие нужные переменные опять же лучше передавать с помощью  
fastcgi_param
оно для того и создано

>
> Вот перечень того что передается:
>
> CONTENT_LENGTH=""
> CONTENT_TYPE=""
> DOCUMENT_ROOT="/home/htdocs"
> DOCUMENT_URI="/cgi-bin/index2.cgi"
> FCGI_ROLE="RESPONDER"
> GATEWAY_INTERFACE="CGI/1.1"
> HTTP_ACCEPT="text/html, application/xml;q=0.9, application/xhtml 
> +xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"
> HTTP_ACCEPT_CHARSET="iso-8859-1, utf-8, utf-16, *;q=0.1"
> HTTP_ACCEPT_ENCODING="deflate, gzip, x-gzip, identity, *;q=0"
> HTTP_ACCEPT_LANGUAGE="ru-RU,ru;q=0.9,en;q=0.8"
> HTTP_CACHE_CONTROL="no-cache"
> HTTP_CONNECTION="Keep-Alive, TE"
> HTTP_HOST="192.168.0.1"
> HTTP_TE="deflate, gzip, chunked, identity, trailers"
> HTTP_USER_AGENT="Opera/9.25 (Windows NT 5.2; U; ru)"
> PATH_INFO="http://max/cgi-bin/index2.cgi"
> QUERY_STRING=""
> REDIRECT_STATUS="200"
> REMOTE_ADDR="192.168.0.1"
> REMOTE_PORT="4714"
> REQUEST_METHOD="GET"
> REQUEST_URI="/cgi-bin/index2.cgi"
> SCRIPT_FILENAME="/home/htdocs/cgi-bin/index2.cgi"
> SCRIPT_NAME="/cgi-bin/index2.cgi"
> SERVER_ADDR="192.168.106.128"
> SERVER_NAME="max"
> SERVER_PORT="80"
> SERVER_PROTOCOL="HTTP/1.1"
> SERVER_SOFTWARE="nginx/0.6.31"
> _______________________________________________________________________________________________
> В апаче такой проблемы не возникало и испотльзовать слеш вместо "?"
> для передачи параметров скрипту невозбранялось.
> Собственно вопрос как сделать это красивее и правильнее.
>
> Еще у php и perl есть проблемка, если перейти по сыслке
> http://192.168.0.1/stat/rrd/192/net без слеша на конце
> то происходит редирект на первую запись в директиве server_name  
> тоесть поведение аналогичное включенной апачевской
> UseCanonicalName, а если ссылка со слешем на конце то запускается  
> скрипт
> http://192.168.0.1/stat/rrd/192/net/   index.php или index.pl  
> соответственно.
> От этого помогло server_name_in_redirect off;
>
> Так же хочется узнать с какими опциями оптимизации лучше собирать  
> npinx и php
> пока испозьзую:
> CC="gcc" \
> OPTIM="-O3 -pipe  -fno-exceptions -funroll-loops -ffast-math  - 
> funroll-loops -march=athlon64 -msse3" \
> CFLAGS="-O2 -pipe" \
из "посиживания" в рассылке freebsd-stable я понял, что лучше с  
компилятором не умничать ...
он и так не плохо настроен
это советовали сами мейнтенеры, девелоперы и прочие портов, ядра и  
world-а

>
> INCLUDES="-I/usr/local/include"
> Система FreeBSD 7.0-RELEASE как х86 так и amd64 ...
>
> Внимание - использовать перл как описано выше настоятельно  
> нерекомендуется, по причине запуска от пользователя root.
> И быстродействие у него слобовато, при запуске теста начинает сыпать  
> в лог
> 2008/06/04 20:20:07 [crit] 859#0: *129 connect() to unix:/var/run/ 
> nginx-fcgi.sock failed (2: No such file or directory) while connecting
> to upstream, client: 192.168.106.128, server: max.mp.farlep.net,  
> request: "GET /stats/index.pl HTTP/1.1", upstream: "fastcgi://unix:/ 
> var/r
> un/nginx-fcgi.sock:", host: "192.168.106.128"
>
> С уважением Max.
> maxhl at hitline.net.ua 71006063
>
>
>
>






More information about the nginx-ru mailing list