Для решения задачи я решил использовать Nginx. Подробно о нем можно почитать http://sysoev.ru и http://blog.kovyrin.net/2006/04/04/ngin ... eb-server/
Я лишь расскажу об установке и приведу примеры простых конфигураций под FreeBsd.
Итак, установка
Код: Выделить всё
cd /usr/ports/www/nginx
make install clean
Апач я перевешиваю с 80 порта на 8081 и изменяю конфиг Nginx
Код: Выделить всё
cd /usr/local/etc/nginx
cp nginx.conf nginx.conf.old
Код: Выделить всё
worker_processes 1;
error_log /var/log/nginx/error.log debug;
pid nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server {
listen localhost:80;
server_name localhost;
location / {
proxy_pass http://localhost:8081/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location ~* ^.+.(htm|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
root /var/www/;
}
}
}
запуск nginx
Код: Выделить всё
# nginx
Код: Выделить всё
nginx_enable="YES"
Первая и использованием php fast-cgi черз сокет
(взято из рассылки freebsd)
Для этого создадим скрипт
/usr/local/etc/rc.d/phpFcgid.sh
со следующим содержимым
#!/bin/sh
# PROVIDE: phpFcgid
# REQUIRE: LOGIN
# KEYWORD: shutdown
. /etc/rc.subr
name="phpFcgid"
rcvar=`set_rcvar`
load_rc_config $name
: ${phpFcgid_enable="NO"}
: ${phpFcgid_users="www"}
: ${phpFcgid_children="2"}
start_cmd=phpFcgid_start
stop_cmd=phpFcgid_stop
phpFcgid_start() {
echo "Starting $name."
export PHP_FCGI_CHILDREN=${phpFcgid_chidlren}
for user in ${phpFcgid_users}; do
socketdir="/tmp/.fastcgi.${user}"
mkdir -p ${socketdir}
chown ${user}:www ${socketdir}
chmod 0750 ${socketdir}
su -m ${user} -c "/usr/local/bin/php-cgi -b ${socketdir}/socket&"
done
}
phpFcgid_stop() {
echo "Stopping $name."
pids=`pgrep php-cgi`
pkill php-cgi
wait_for_pids $pids
}
run_rc_command "$1"
Добавим в
/etc/rc.conf
Код: Выделить всё
phpFcgid_enable='yes'
Изменим и сам конфиг Nginx
Третий вариант конфигурации приведу для работы с php через портworker_processes 1;
error_log /var/log/nginx/error.log debug;
pid nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "http_x_forwarded_for"';
#access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server {
listen localhost:80;
server_name localhost;
root /var/www;
access_log /var/log/nginx/access.log;
index index.php;
location ~ .*\.php$ {
include /usr/local/etc/nginx/fastcgi_params;
fastcgi_pass unix:/tmp/.fastcgi.www/socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;
}
}
}
Код: Выделить всё
worker_processes 1;
error_log /var/log/nginx/error.log debug;
pid nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "http_x_forwarded_for"';
#access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server {
listen localhost:80;
server_name localhost;
root /var/www;
access_log /var/log/nginx/access.log;
index index.php;
location ~ .*\.php$ {
include /usr/local/etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8888;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;
}
}
}
Ну а скрипт запуска php такой fphp.sh
Код: Выделить всё
#!/bin/sh
killall php
PHPFCGI="/usr/local/bin/php-cgi"
echo "Run php4 fastcgi server on port 8888"
export PHP_FCGI_MAX_REQUESTS=1000
#export PHP_FCGI_CHILDREN=5
export FCGI_WEB_SERVER_ADDRS=127.0.0.1
/usr/local/bin/sudo -u www $PHPFCGI -c /usr/local/etc/php.ini -b 127.0.0.1:8888 2>/dev/null >/dev/null &
запускаем #nginx
Радуемся скорости работы.