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

Тен Костя Kostya at yandex.ru
Sat Jun 7 10:43:58 MSD 2008


use FCGI;
Что не поможет?


> В настоящий момент нет правильного перла для 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.Пока сделал так_________________________________________________________________________                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}";__________________________________________________________________________Без этой переменной окружения модуль CGI неработает. Кроме того другие нужные переменные могут отсутствовать.Вот перечень того что передается: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" \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 connectingto upstream, client: 192.168.106.128, server: max.mp.farlep.net, request: "GET /stats/index.pl HTTP/1.1", upstream: "fastcgi://unix:/var/run/nginx-fcgi.sock:", host: "192.168.106.128"С уважением Max.maxhl at hitline.net.ua 71006063

-- 
Тен Костя


More information about the nginx-ru mailing list