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