статья от сюда
sudo pacman -S fcgi php-cgi
Щоб постійно не запускати FastCGI з консолі, створимо скрипт для запуску демона FastCGI
sudo 'ваш любимый текстовый редактор' /etc/rc.d/php-cgi
і вставляємо туди наступний код
#!/bin/bash . /etc/rc.conf . /etc/rc.d/functions case "$1" in start) stat_busy 'Starting Fastcgi Server' if /usr/bin/php-cgi -b 127.0.0.1:9000 & then add_daemon fastcgi stat_done else stat_fail fi ;; stop) stat_busy 'Stopping Fastcgi Server' [ -e /var/run/daemons/fastcgi ] && kill $(pidof php-cgi) &> /dev/null; if [ $? -gt 0 ]; then stat_fail else rm_daemon fastcgi stat_done fi ;; restart) $0 stop $0 start ;;
*)
echo "Usage: $0 {start|stop|restart}"
esac
Зберігаємо, виходимо. Тепер можна запускати FCGI демоном.
sudo /etc/rc.d/php-cgi start|stop|restart
З даного коду зрозуміло, що FastCGI сервер буде слухати 127.0.0.1 на порту 9000. І тому налаштовуємо nginx так, щоб він проксіював саме туди всі запити на скрипти, загалом усе крім статики. Відкриваємо конфіг nginx і вносимо приблизно такі зміни: Залежно від того, де у вас лежать скрипти - location's будуть різні. Покажу приклад на location /forum {
}
location /forum {
limit_conn one 10;
limit_rate_after 1m;
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;
root /srv/http/;
index index.html index.htm index.php;
location ~ \.php$ {
root /srv/http/forum;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/http$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_buffers 8 16K;
include fastcgi_params;
}
У директиві location треба вказати точку входу відносно доступу ззовні, так би мовити. Тобто якщо URL вашого сайту syslinux.ru, то відповідний йому location буде
location / { root /srv/http;
Аналогічно при запиті syslinux.ru/forum так:
location /forum { root /srv/http;
Іншими словами, при вказанні різних location у конфігу ми керуємо локейшенами і можемо створити індивідуальні налаштування для кожного з них. Напевно, наведену вище частину конфігу можна записати й коротше, але у мене поки на це не вистачає знань. Ключові моменти цього конфігу :
location /forum {
Вказує на URL, при переході на який буде виконуватися наведене нижче правило.
root /srv/http/;
Тут вказується відповідність URL файловій системі. Іншими словами, задається абсолютний шлях до файлів, які потрібно віддати nginx'y при переході в кореневий каталог сайту. (syslinux.ru)
index index.html index.htm index.php;
Вказує на mime тип індексних файлів, за відсутності яких сторінка відкриватися не буде навіть при наявності в ній будь-яких відмінних від заданих файлів.
location ~ \.php$ {
Вказує на те, що всі скрипти .php з нижчезазначеного root /srv/http/forum будуть проксіюватися в FastCGI, налаштування якого наведені нижче.
fastcgi_pass 127.0.0.1:9000;
Власне, це і є рядок, який вказує куди проксіювати .php при запиті syslinux.ru/forum , у нашому випадку це FastCGI (у налаштуваннях демона ми вказали 127.0.0.1:9000) Для проксіювання в Апач треба відповідно налаштувати Апач на прослуховування порту 8080 і прописати
proxy_pass http://127.0.0.1:8080;
І тоді всі запити, що надходять до /forum, буде обробляти Apache.
fastcgi_param SCRIPT_FILENAME /srv/http$fastcgi_script_name;
Не дуже розібрався, але як я зрозумів, вказує на скрипт. У мене працює так. До речі, щодо індексних файлів. Дуже довго шукав, як же дозволити лістинг файлів за відсутності в директорії index.php *html .. etc. Виявилося, звісно, дуже просто, все було в документації nginx, але оскільки відразу всю її прочитати не було можливим, гуглив щодо наявності аналога апачівському +Indexes. У директиву location цільової директорії потрібно лише додати
autoindex on;
Після всіх цих рухів можна перезапустити nginx і стартанути php-cgi
sudo /etc/rc.d/nginx restart
sudo /etc/rc.d/php-cgi start
Заходимо браузером у свій localhost і перевіряємо, чи виконуються скрипти. Працює? Чудово!
Тепер про awstats.
Все, що описав вище, я завів досить швидко, але ось прикрутити awstats для роботи через fcgi мені довгий час не вдавалося. Пару днів Апач у мене існував чисто для того, щоб відображати статистику відвідування :) Отже, для цього нам знадобиться fcgiwrap з AUR і spawn-fcgi звідти ж. Збираємо їх, встановлюємо і відкриваємо скрипт для запуску демона fcgi-wrap
sudo 'ваш любимый текстовый редактор' /etc/conf.d/fcgiwrap
Редагуємо його, вказуємо користувача і групу, від яких буде запускатися скрипт. (Користувач той - від якого працює worker процес nginx, групу можна nobody або таку ж, як у користувача nginx) вказуємо IP і порт для прослуховування:
# Address and port to bind to ADDRESS="127.0.0.1" PORT="9001"
Після чого ліземо в конфіг nginx і вставляємо це: (тільки так у мене і запрацювало)
location /awstats {
root /srv/http/awstats/cgi-bin;
fastcgi_pass localhost:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_NAME /awstats.pl;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
include fastcgi_params;
allow 127.0.0.1; deny all;
}
Оскільки посилання на генерацію звіту awstats виглядає таким чином :http://localhost/awstats/awstats.pl?config=syslinux.ru, то вказуємо
location /awstats {
root /path/to/yourserverroot/awstats/cgi-bin;
Вказівка на директорію, де конкретно лежить сам скрипт аналізатора логів (awstats.pl)
fastcgi_pass localhost:9001;
Аналогія - Вказуємо куди проксіювати запит, у даному випадку в наш FastCGI сервер.
fastcgi_param SCRIPT_NAME /awstats.pl;
Вказуємо ім'я скрипта, як я зрозумів, тут він береться відносно root (srv/http/awstats/cgi-bin) При вказанні іншим способом я завжди отримував 404 або 403 помилку, або "input file not specified"
allow 127.0.0.1; deny all;
