DeleGate – многофункциональный прокси-сервер Сергей Супрунов $ fetch http://delegate.org/anonftp/DeleGate/delegate9.8.5.tar.gz $ tar xzvf delegate9.8.5.tar.gz $ cd delegate9.8.5 $ make $ delegated -P<порт> -F<функция> <опции> +=<конфиг> <параметры> $ delegated -P8080 SERVER=http $ delegated -P8080 -Fkill $ delegated -P192.168.0.254:8080 SERVER=http CACHE=do # delegated -P80 SERVER=http MOUNT="/* /var/www/*" RELAY=no RELIABLE="*" MOUNT="/cgi/* cgi:/var/www/cgi-bin/*" # delegated -P80 SERVER=http://www.samag.ru PERMIT="*" $ delegated -P8080 SERVER=http HTTPCONF=kill-tag:IMG $ delegated -P8021 SERVER=ftp # delegated -P21 SERVER=ftp://ftp.chg.ru MOUNT="/freebsd/* ftp://ftp.freebsd.org/pub/FreeBSD/*" $ delegated -P192.168.0.254:8080 SERVER=http MOUNT="/* ftp://ftp.chg.ru/*" # delegated -P53 SERVER=dns RESOLV=file:/etc/hosts # delegated -P25 SERVER=smtp CLUSTER=smtp://mail.first.ru,mail.second.ru $ delegated -P8023 SERVER=telnet://admin@-ssh.192.168.3.220 $ delegated -P192.168.0.254:8111 SERVER=socks # cd delegate9.8.5/subin # make install $ delegated +=httproxy.conf $ cat /usr/home/serg/delegate/etc/onlymime.cfi REJECT=<список протоколов>:<запрашиваемые хосты>:<хосты-клиенты> ----------------------------------------------------------------------------------------------------------------- Строим систему для виртуализации на базе серверной платформы Intel при помощи Linux CentOS 5.2 и VMware Server 2 Алексей Бережной # rpm -ivh /opt/distrib/xrdp-0.4.0-1.el5.rf.x86_64.rpm # ln -s /usr/lib64/xrdp/ /usr/local # ln -s /usr/lib64/xrdp/libscp.so /usr/lib64/ # cd /usr/share/doc/xrdp-0.4.0/ # /usr/share/doc/xrdp-0.4.0/xrdp_control.sh start # ln –s /usr/share/doc/xrdp-0.4.0/xrdp_control.sh /etc/rc5.d/S94xrdp # ln –s /usr/share/doc/xrdp-0.4.0/xrdp_control.sh /etc/rc5.d/K11xrdp # rpm -ivh VMware-server-2.0.0-116503.x86_64.rpm [root@gw distrib]#/usr/bin/vmware-config.pl ----------------------------------------------------------------------------------------------------------------- Могут ли информационные киоски работать под Linux Антон Борисов kiosk:~# lspci kiosk:~# cat /proc/cpuinfo kiosk:~# free # tar xjvf Thinstation-2.3beta2.tar.gz -C /media/hyperspace/ts/ # cd /media/hyperspace/ts/Thinstation-2.3 module pcm module serial module acpi module pcspkr module agpgart module ati-agp module intel-agp module r8169 module snd-hda-intel module snd-intel8x0 module usb-hid module elo package rdate package xorg6vnc package xorg6-i810 package keymaps-en_us package sshd package scp package opera.kiosk param rootpasswd RootPass param xorgvncpasswd VNCPass param bootlogo true param bootresolution 1024x768 param defaultconfig thinstation.conf.buildtime param basename thinstation param basepath . files param baseurl http://thinstation.sourceforge.net param localpkgs false locally param fulllocales false param icaencryption false param bootverbosity 1 AUDIO_LEVEL=67 KEYBOARD_MAP=ru_RU.UTF-8 TIME_ZONE="UTC+10:00" USB_ENABLED=On DAILY_REBOOT=On CUSTOM_CONFIG=Off RECONNECT_PROMPT=Off SCREEN=0 WORKSPACE=1 AUTOSTART=Off ICONMODE=AUTO ICONHOTPLUG=YES SESSION_0_ICON=On SESSION_0_TYPE=opera SESSION_0_AUTOSTART=On SCREEN_RESOLUTION="1024x768 | 800x600 | 640x480 | *" SCREEN_COLOR_DEPTH="16 | 8 | *" SCREEN_HORIZSYNC="56-86 | *" SCREEN_VERTREFRESH="30-83 | 60 | 56 | 70 | 72 | 75" SCREEN_BLANK_TIME=0 SCREEN_STANDBY_TIME=0 SCREEN_SUSPEND_TIME=0 SCREEN_OFF_TIME=0 MOUSE_RESOLUTION=100 X_DRIVER_OPTION1="swcursor On" X_SERVERFLAGS_OPTION1="DontVTSwitch On" X_SERVERFLAGS_OPTION2="DontZap On" X_MONITOR_OPTION1="DPMS On" X_MONITOR_MODELINE='"1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089' NET_HOSTNAME=kiosk NET_USE_DHCP=On NET_MASK=255.255.255.0 NET_DNS1=1.2.3.4 SESSION_0_ICON=On SESSION_0_TYPE=opera SESSION_0_AUTOSTART=On NET_DNS1=1.2.3.4 Section "InputDevice" # vncKeyboard: keyboard actions from vnc Identifier "vncKeyboard" Driver "rfbkeyb" EndSection Section "InputDevice" # vncMouse: mouse actions from vnc Identifier "vncMouse" Driver "rfbmouse" EndSection Section "InputDevice" Identifier "Touchscreen0" Driver "evtouch" Option "Device" "/dev/input/event3" Option "TouchMode" "0" Option "AlwaysCore" Option "screenno" "0" Option "MinX" "0" Option "MaxX" "4000" Option "MinY" "0" Option "MaxY" "4000" Option "SwapX" "1" EndSection # cd /media/hyperspace/ts/Thinstation-2.3 # ./build kiosk:~# cat /proc/bus/input/handlers kiosk:~# cat /proc/bus/input/devices kiosk:~# lsmod | grep elo Section "InputDevice" Identifier "Touchscreen0" Driver "gentouch" Option "Device" "/dev/ttyS0" Option "TouchMode" "0" Option "AlwaysCore" Option "screenno" "0" Option "MinX" "150" Option "MaxX" "3300" Option "MinY" "970" Option "MaxY" "3470" Option "UntouchDelay" "3" Option "ReportDelay" "1" EndSection # tar xjvf thinstation_src-2.3beta1.tar.bz2 -C /media/hyperspace/ts/ # cd /media/hyperspace/ts/thinstation_src-2.3 # ./RUNME sh-3.1# cd /source/nginx-0.6.32/ sh-3.1# ./configure –prefix=/usr/local/nginx sh-3.1# make && make install fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; 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; # PHP only, required if PHP was built # with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; 1) user nobody; 2) worker_processes 1; 3) events { 4) worker_connections 1024; 5) } 6) http { 7) include mime.types; 8) default_type application/octet-stream; 9) #access_log logs/access.log main; 10) #sendfile on; 11) #tcp_nopush on; 12) keepalive_timeout 65; 13) #gzip on; 14) server { 15) listen 80; 16) server_name localhost; 17) location / { 18) root html; 19) index index.html index.htm; 20) } 21) error_page 500 502 503 504 /50x.html; 22) location = /50x.html { root html; 23) } 24) location ~ \.cgi$ { 25) root html; 26) fastcgi_pass 127.0.0.1:9000; 27) fastcgi_index index.cgi; 28) fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 29) include fastcgi_params; 30) } 31) } 32) } #sendfile on; (1)#include (2)#include (3)#include (4)#include (5)#include (6)#include (7)void main(void) (8){ (9) long res = STARIO_ERROR_SUCCESS; (10) int i = 0; (11) int count = 0; (12) char BigText[1024]; (13) char BigString[1024]; (14) int len = 0; (15) char PortID[] = "/dev/ttyS0"; (16) char PortParams[] = "9600,none,8,1,hdwr"; (17) char Month[32]; (18) char Year[16]; (19) char* header[] = { (20) "+---------------------------------------+\n", (21) "| CP1251: Информационный заголовок |\n", (22) "| CP1251: Выбирается год и месяц |\n", (23) "+---------------------------------------+\n" (24) }; (25) /*--------- Начало CGI-цикла -------------*/ (26) while(FCGI_Accept() >= 0) (27) { (28) len = atoi(getenv("CONTENT_LENGTH")); (29) gets(BigText); (30) /*----- Передать браузеру html-header -----*/ (31) printf("Content-type: text/html\r\n" (32) "\r\n" (33) "Printer response page" (34) "

Printer response page

" (35) "Request number %d running on host %s
", (36) ++count, getenv("SERVER_NAME")); (37) res = openPort(PortID, PortParams); (38) /* Включить набор шрифтов кодовой страницы cp1251 */ (39) res = writePort(PortID, "\x1b", sizeof("\x1b") - 1); (40) res = writePort(PortID, "\x1d", sizeof("\x1d") - 1); (41) res = writePort(PortID, "\x74", sizeof("\x74") - 1); (42) res = writePort(PortID, "\x22", sizeof("\x22") - 1); (43) /*---- Напечатать заголовок header ----*/ (44) for( i = 0; i < 4; i++ ) (45) res = writePort(PortID, header[i], strlen(header[i]) ); (46) /*----- Выбрать подстроку 'month' -----*/ (47) strcpy(BigString, strstr(BigText, "month")); (48) for( i = 0; i < strlen(BigString); i++ ) (49) if(BigString[i] == '&') break; (50) BigString[i] = '\0'; (51) strncpy(Month, BigString + (strlen("month") + 1 ), i - strlen("month")); (52) /*----- Выбрать подстроку 'year' -----*/ (53) strcpy(BigString, strstr(BigText, "year")); (54) for( i = 0; i < strlen(BigString); i++ ) (55) if(BigString[i] == '&') break; (56) BigString[i] = '\0'; (57) strncpy(Year, BigString + (strlen("year") + 1 ), i - strlen("year")); (58) /* Напечатать выбранные год и месяц */ (59) sprintf(BigString, "Выбранный год: %s, месяц: %s\n", Year, Month); (60) res = writePort(PortID, BigString, strlen(BigString)); (61) /*-------- Обрезать бумагу ----------*/ (62) res = writePort(PortID, "\x1b""d3", sizeof("\x1b""d3") - 1); (63) res = closePort(PortID); (64) printf("
Input buffer length is: %i symbols", len); (65) printf("
BigText: %s", BigText); (66) printf("
Year: %s", Year); (67) printf("
Month: %s", Month); (68) /*------------- Конец CGI-цикла ----------------*/ (69) } (70)} sh-3.1# gcc -Wall -o t4 t4.c -s -I. -L./lib -lstario -I /source/fcgi-2.4.0/include/ -L /usr/local/fcgi/lib/ -lfcgi kiosk:~# cat /usr/local/nginx/bin/nginx.sh #!/bin/sh chmod a+rw /dev/ttyS0 /usr/local/nginx/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nobody -g nobody -f /usr/local/nginx/bin/t4 /usr/local/nginx/sbin/nginx #!/bin/sh . $TS_GLOBAL case "$1" in init) if ! pkg_initialized $PACKAGE; then pkg_set_init_flag $PACKAGE sh /usr/local/nginx/bin/nginx.sh fi ;; *) exit 1 ;; esac exit 0
----------------------------------------------------------------------------------------------------------------- Учет оборудования с Kwok Information Server Сергей Яремчук $ cd /usr $ sudo tar xzvf kwok-information-server-2.6.8-linux.tar.gz $ sudo mv kwok-information-server-2.6.8-linux kwok $ cd kwok $ ls $ sudo chmod +rw ./server/tomcat_6.0.14 $ sudo chmod +x ./server/jre1.6.0/bin/java $ sudo chmod +x ./server/tomcat_6.0.14/bin/*.sh $ sudo apt-get install postgresql $ sudo /etc/init.d/postgresql-8.3 status $ sudo -u postgres psql template1 template1=# ALTER USER postgres WITH ENCRYPTED PASSWORD 'password'; template1=# \q $ sudo -u postgres createlang plpgsql template1 host all all 127.0.0.1/32 md5 #listen_addresses = 'localhost' listen_addresses = '*' password_encryption = on $ ./server/jre1.6.0/bin/java -jar ./database/schemasetup-2.6.8.jar install database=kwokdb username=postgres password=password $ cat /usr/kwok/server/tomcat_6.0.14/webapps/kwok/WEB-INF/classes/properties/Application.properties # # Database properties # db.serverHost = localhost db.serverPort = 5432 db.name = kwokdb db.username = postgres db.password = password $ sudo chmod +x /usr/kwok/server/start_tomcat.sh $ sudo /usr/kwok/server/start_tomcat.sh $ tail -f ./server/tomcat_6.0.14/logs catalina.2008-10-07.log update system_config set config_value='app' where config_key='auth.authenticationMethod' update system_config set config_value='' where config_key='auth.domain' C:\Kwok\Server\FileRepo\company /usr/kwok/files/company update system_config set config_value = 'en_US,es_ES,hu_HU,it_IT,nl_NL,sr_YU,zh_CN,ru_RU' where config_key='locale.options'; ----------------------------------------------------------------------------------------------------------------- Xneur – автоматическое переключение раскладок под Linux (аналог Punto Switcher) Павел Закляков wget http://dists.xneur.ru/release-0.9.0/rpm/Fedora/xneur-0.9.0-0.fc7.i386.rpm wget http://dists.xneur.ru/release-0.9.0/rpm/Fedora/gxneur-0.9.0-0.fc7.i386.rpm # yum install freealut # rpm -ihv xneur-0.9.0-0.fc7.i386.rpm gxneur-0.9.0-0.fc7.i386.rpm ----------------------------------------------------------------------------------------------------------------- Особенности обновления контроллера домена до Windows Server 2008 Андрей Бирюков cd t:\sources\adprep Nltest /server:Имя_сервера /dsgetdc:Имя_домена /gc /force ----------------------------------------------------------------------------------------------------------------- Настраиваем подключения к удаленному рабочему столу Иван Коробко Листинг 1. Фрагмент RDP-файла для вкладки «Общие» username:s:ISLAND\TESLA full address:s:SUNRISE Листинг 2. Фрагмент RDP-файла для вкладки «Экран» desktopwidth:i:1600 desktopheight:i:1200 session bpp:i:32 screen mode:i:2 displayconnectionbar:i:0 Листинг 3. Фрагмент RDP-файла для вкладки «Экран» audiomode:i:0 keyboardhook:i:2 redirectprinters:i:0 redirectclipboard:i:1 redirectcomports:i:0 redirectsmartcards:i:1 drivestoredirect:s:A:;C:;E:; redirectposdevices:i:0 Листинг 4. Фрагмент RDP-файла для вкладки «Программы» remoteapplicationmode:i:0 alternate shell:s: shell working directory:s: Листинг 5. Фрагмент RDP-файла для вкладки «Программы» disable wallpaper:i:0 allow font smoothing:i:1 allow desktop composition:i:1 disable cursor setting:i:0 disable full window drag:i:0 disable menu anims:i:0 disable themes:i:0 bitmapcachepersistenable:i:1 autoreconnection enabled:i:1 ----------------------------------------------------------------------------------------------------------------- Первый взгляд на MySQL 6 Кирилл Сухов BACKUP DATABASE test_db TO '/tmp/backupfile'; RESTORE FROM '/tmp/backupfile'; BACKUP DATABASE db1, db2 TO '/tmp/db1-db2.backup'; BACKUP DATABASE * TO '/tmp/all.backup'; shell> mysql --xml -e 'SELECT * FROM mytable' > file.xml value1 value2 MikaelRonstrom LarsThalmann 5TomasUlin 6MartinSkold CREATE TABLE person ( person_id INT NOT NULL PRIMARY KEY, fname VARCHAR(40) NULL, lname VARCHAR(40) NULL, created TIMESTAMP ); mysql> LOAD XML LOCAL INFILE 'person.xml' -> INTO TABLE person -> ROWS IDENTIFIED BY ''; ----------------------------------------------------------------------------------------------------------------- Установка цепочки серверов сертификации как часть внедрения PKI в домене Часть 2 Станислав Шпак [Version] Signature= "$Windows NT$" [PolicyStatementExtension] Policies = AllIssuancePolicy Critical = FALSE [AllIssuancePolicy] OID = 2.5.29.32.0 certutil –addstore –f Root RootCA_RootCA.crt certutil –addstore –f Root RootCA.crl certutil –verifystore root certutil -dspublish -f RootCA_RootCA.crt RootCA certutil -dspublish -f SubCA_SubCA.crt SubCA certutil -dspublish -f RootCA.crl RootCA RootCA certutil -dspublish -f SubCA.crl SubCA SubCA certutil.exe –cainfo certutil.exe –url SubCA_SubCA.crt certutil.exe –url <имя файла сертификата> C:\CDP\.crl ----------------------------------------------------------------------------------------------------------------- Как работает HTTP-сервер nginx Дмитрий Васильев $ wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz $ tar -xzf nginx-0.6.32.tar.gz $ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.bz2 $ tar -xjf pcre-7.8.tar.bz2 $ mv pcre-7.8 pcre $ wget -O mod_wsgi.tar.gz http://hg.mperillo.ath.cx/nginx/mod_wsgi/archive/tip.tar.gz $ tar -xzf mod_wsgi.tar.gz $ mv mod_wsgi-8994b058d2db mod_wsgi --- src/ngx_http_wsgi_handler.c 2008-03-26 22:35:15.000000000 +0300 +++ src/ngx_http_wsgi_handler.c 2008-10-06 16:55:07.000000000 +0400 @@ -71,7 +71,7 @@ if (r->method == NGX_HTTP_GET || r->method == NGX_HTTP_HEAD) { /* XXX not sure */ - rc = ngx_http_discard_body(r); + rc = ngx_http_discard_request_body(r); if (rc != NGX_OK && rc != NGX_AGAIN) { return rc; $ patch -d mod_wsgi -p0 < mod_wsgi_nginx_0.6.32.patch $ sudo apt-get install libssl-dev $ sudo apt-get install zlib1g-dev $ sudo apt-get install python-dev $ touch nginx.sh $ chmod a+x nginx.sh $ vi nginx.sh #! /bin/sh ./configure \ --prefix=/var/lib/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --lock-path=/var/lock/nginx \ --http-client-body-temp-path=/var/lib/nginx/client_body \ --http-proxy-temp-path=/var/lib/nginx/proxy \ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ --user=www-data \ --group=www-data \ --without-select_module \ --without-poll_module \ --without-http_ssi_module \ --without-http_geo_module \ --without-http_referer_module \ --without-http_memcached_module \ --without-http_limit_zone_module \ --without-http_empty_gif_module \ --without-http_browser_module \ --without-http_upstream_ip_hash_module \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-pcre=../pcre \ --add-module=../mod_wsgi $ cd nginx-0.6.32 $ ../nginx.sh $ make $ sudo make install $ sudo /usr/sbin/nginx $ sudo killall nginx #! /bin/sh # # /etc/init.d/nginx: start and stop nginx http server # PID_FILE=/var/run/nginx.pid CAT=/bin/cat NGINX=/usr/sbin/nginx START_STOP_DAEMON=/sbin/start-stop-daemon . /lib/lsb/init-functions do_start() { $START_STOP_DAEMON --start --quiet --pidfile $PID_FILE --exec $NGINX RETVAL=$? if [ $RETVAL = 0 ]; then log_success_msg "Server started at pid" $($CAT $PID_FILE) elif [ $RETVAL = 1 ]; then log_failure_msg "Server already running at pid" $($CAT $PID_FILE) else log_failure_msg "Error starting server" fi return $RETVAL } do_stop() { $START_STOP_DAEMON --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PID_FILE --exec $NGINX RETVAL=$? if [ $RETVAL = 0 ]; then log_success_msg "Server stopped" elif [ $RETVAL = 1 ]; then log_failure_msg "Server already stopped" else log_failure_msg "Error stopping server" fi return $RETVAL } is_running() { if [ -f $PID_FILE ]; then kill -n 0 $($CAT $PID_FILE) if [ $? = 0 ]; then return 1 else return 0 fi fi return 0 } case "$1" in start) log_begin_msg do_start log_end_msg $? ;; stop) log_begin_msg do_stop log_end_msg $? ;; status) log_begin_msg is_running if [ $? = 0 ]; then log_success_msg "Server not running" log_end_msg 1 else log_success_msg "Server running at pid" $($CAT $PID_FILE) log_end_msg 0 fi ;; restart) log_begin_msg do_stop if [ $? = 0 ] || [ $? = 1 ]; then do_start fi log_end_msg $? ;; reload) log_begin_msg is_running if [ $? = 0 ]; then log_failure_msg "Server not running" log_end_msg 1 else $NGINX -t if [ $? = 0 ]; then kill -HUP $($CAT $PID_FILE) if [ $? = 0 ]; then log_success_msg "Server configuration reloaded" log_end_msg 0 else log_failure_msg "Error while reloading configuration" log_end_msg 1 fi else log_failure_msg "Configuration errors found" log_end_msg 1 fi fi ;; *) log_success_msg "Usage: /etc/init.d/nginx {start|stop|status|restart|reload}" exit 3 ;; esac exit $? $ sudo chmod a+x /etc/init.d/nginx $ sudo update-rc.d nginx defaults user www-data www-data; worker_processes 4; error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; charset utf-8; server_tokens off; sendfile on; gzip on; gzip_http_version 1.0; gzip_comp_level 6; gzip_proxied any; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_buffers 16 8k; gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/javascript text/js application/xml+rss text/javascript application/atom+xml; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; include /etc/nginx/example.ru.conf } server { listen 80; server_name example.ru *.example.ru; error_log /var/log/nginx/example.ru/error.log info; access_log /var/log/nginx/example.ru/access.log; location / { root /home/www/example.ru/data/; index index.html; if ($host != "example.ru") { rewrite ^(.*) http://example.ru$1 permanent; } } } server { listen 443; server_name example.ru; error_log /var/log/nginx/example.ru/error.log info; access_log /var/log/nginx/example.ru/access.log; ssl on; ssl_certificate /etc/nginx/cert/example.ru.pem; ssl_certificate_key /etc/nginx/cert/example.ru.pem; auth_basic "Example admin place"; auth_basic_user_file /home/www/example.ru/.htpasswd; location / { root /home/www/example.ru/data/admin/; index index.html; } } proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; include /etc/nginx/zope3.example.ru.conf server { listen 80; server_name zope3.example.ru; error_log /var/log/nginx/zope3.example.ru/error.log info; access_log /var/log/nginx/zope3.example.zope3.ru/access.log; error_page 502 503 504 /maintenance.html; location /maintenance.html { alias /home/www/zope3.example.ru/data/index.html; } location / { proxy_pass http://127.0.0.1:8080/++skin++example/sites/example/++vh++http:zope3.example.ru:80/++/; } } #! /bin/sh EXEC_AS_USER=www-data FCGI_HOST=127.0.0.1 FCGI_PORT=9000 PHP_FCGI_CHILDREN=5 PHP_FCGI_MAX_REQUESTS=1000 DAEMON=/usr/bin/php-cgi PIDFILE=/var/run/php-fastcgi.pid PHP_CONFIG_FILE=/etc/php5/cgi/php.ini START_STOP_DAEMON=/sbin/start-stop-daemon export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT -c $PHP_CONFIG_FILE" . /lib/lsb/init-functions do_start() { $START_STOP_DAEMON --start --quiet --pidfile $PIDFILE --exec $DAEMON --test || return 1 $START_STOP_DAEMON --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- $DAEMON_ARGS || return 2 } do_stop() { $START_STOP_DAEMON --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE # --name $DAEMON RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 $START_STOP_DAEMON --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 rm -f $PIDFILE return "$RETVAL" } case "$1" in start) log_begin_msg do_start log_end_msg $? ;; stop) log_begin_msg do_stop log_end_msg $? ;; restart) log_begin_msg do_stop if [ $? = 0 ] || [ $? = 1 ]; then do_start fi log_end_msg $? ;; *) echo "Usage: php-fastcgi {start|stop|restart}" exit 3 ;; esac server { listen 80; server_name php.example.ru; error_log /var/log/nginx/php.example.ru/error.log info; access_log /var/log/nginx/php.example.ru/access.log; location / { root /home/www/php.example.ru/data/; index index.html; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /home/www/php.example.ru/data$fastcgi_script_name; } } wsgi_var REQUEST_METHOD $request_method; wsgi_var QUERY_STRING $query_string; wsgi_var CONTENT_TYPE $content_type; wsgi_var CONTENT_LENGTH $content_length; wsgi_var SERVER_NAME $server_name; wsgi_var SERVER_PORT $server_port; wsgi_var SERVER_PROTOCOL $server_protocol; wsgi_var REQUEST_URI $request_uri; wsgi_var DOCUMENT_URI $document_uri; wsgi_var DOCUMENT_ROOT $document_root; wsgi_var SERVER_SOFTWARE $nginx_version; wsgi_var REMOTE_ADDR $remote_addr; wsgi_var REMOTE_PORT $remote_port; wsgi_var SERVER_ADDR $server_addr; wsgi_var REMOTE_USER $remote_user; wsgi_temp_path /var/lib/nginx/wsgi; include /etc/nginx/wsgi_params; #! /usr/bin/env python2.4 import os os.environ['TRAC_ENV'] = "/home/www/wsgi.example.ru/trac" os.environ['PYTHON_EGG_CACHE'] = "/var/tmp" import trac.web.main application = trac.web.main.dispatch_request server { listen 80; server_name wsgi.example.ru; error_log /var/log/nginx/wsgi.example.ru/error.log info; access_log /var/log/nginx/wsgi.example.ru/access.log; location / { wsgi_pass /home/www/wsgi.example.ru/wsgi.py; } } def application(environ, start_response): status = '200 OK' response_headers = [('Content-type','text/plain')] start_response(status, response_headers) return ['Hello world!\n'] ----------------------------------------------------------------------------------------------------------------- Сервер приложений С++ Андрей Шетухин, Илья Космодемьянский cas-xt -t handler -g -n Hello // // Initialize handler // INT_32 Hello::Handler(CTPP::CDT & oData, ASRequest & oRequest, ASResponse & oResponse, ASPool & oGlobalPool, ASPool & oVhostPool, ASPool & oRequestPool, CTPP::CDT & oLocationConfig, CTPP::CDT & oIMC, ASLogger & oLogger) { DEBUG_HELPER(&oLogger, "Hello::Handler"); // Put your code here oData["hello"] = "Hello, World!"; // 200 OK oResponse.SetHTTPCode(200); // Set HTTP header oResponse.SetHeader("X-Module", "Hello"); return HANDLER_OK; } cmake . && make install My first example .... .... ServerName example.com CASEnable On CASConfigFile /home/www/example.com/example.xml DocumentRoot /home/www/example.com ... /hello.html .... apachectl restart lynx -mime_header http://localhost/hello.html ----------------------------------------------------------------------------------------------------------------- Создание графических интерфейсов на Ruby/GTK+ Александр Симаков $ tar -xzf ruby-gnome2-0.17.0-rc1.tar.gz $ cd ruby-gnome2-0.17.0-rc1 $ ruby extconf.rb $ make # make install #!/usr/bin/ruby # Подключаем библиотеку gtk2 require 'gtk2' # Наследуем класс Gtk::Window class HelloWindow < Gtk::Window # Конструктор класса def initialize(title) # Вызываем конструктор родительского класса (Gtk::Window) super # Устанавливаем заголовок окна set_title(title) # Разрешаем отображение окна со всеми дочерними элементами show_all end end # Создаем экземпляр нашего главного окна (HelloWindow) win = HelloWindow.new("Hello World!") # Запускаем цикл обработки событий Gtk.main ----------------------------------------------------------------------------------------------------------------- Распространенные ошибки программистов Андрей Луконькин ЮрФизЛицоФирмы=Фирма.ЮрФизЛицо; КППФирмы= ЮрФизЛицоФирмы.КПП; КППФирмы= ЮрФизЛицоФирмы.КПП; ИННФирмы=Фирма.ЮрФизЛицо.ИНН; КППФирмы=Фирма.ЮрФизЛицо.КПП; -----------------------------------------------------------------------------------------------------------------