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