статья от сюда
sudo pacman -S fcgi php-cgi
Abychom nemuseli neustále spouštět FastCGI z konzole, vytvoříme skript pro spuštění FastCGI démona.
sudo 'ваш любимый текстовый редактор' /etc/rc.d/php-cgi
a vložíme do něj následující kód
#!/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 "Použití: $0 {start|stop|restart}"
esac
Uložíme a ukončíme. Nyní lze FastCGI spustit jako démona.
sudo /etc/rc.d/php-cgi start|stop|restart
Z tohoto kódu je zřejmé, že FastCGI server bude naslouchat na adrese 127.0.0.1 na portu 9000. Proto nakonfigurujeme nginx tak, aby přesměroval všechny požadavky na skripty právě tam, tedy vše kromě statického obsahu. Otevřete konfigurační soubor nginxu a proveďte přibližně následující změny: V závislosti na tom, kde máte umístěny skripty, se budou lišit direktivy location. Ukážu příklad pro 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;
}
V direktivě location je třeba uvést vstupní bod z pohledu vnějšího přístupu. To znamená, že pokud je URL vašich stránek syslinux.ru, odpovídající location bude
location / { root /srv/http;
Obdobně při požadavku syslinux.ru/forum to bude vypadat takto:
location /forum { root /srv/http;
Jinými slovy, při zadávání různých location v konfiguraci řídíme lokace a můžeme pro každou z nich vytvořit individuální nastavení. Určitě lze výše uvedenou část konfigurace zapsat i stručněji, ale na to mi zatím stačí znalosti. Klíčové body této konfigurace jsou:
location /forum {
Uvádí URL, při jehož přístupu bude provedeno následující pravidlo.
root /srv/http/;
Zde se uvádí přiřazení URL k souborovému systému. Jinými slovy se zde zadává absolutní cesta k souborům, které má nginx poskytnout při přechodu do kořenového adresáře webu. (syslinux.ru)
index index.html index.htm index.php;
Uvádí MIME typ indexových souborů; pokud tyto chybí, stránka se neotevře, i když obsahuje jiné soubory než ty zadané.
location ~ \.php$ {
Uvádí, že všechny skripty .php z níže uvedeného root /srv/http/forum budou přesměrovány do FastCGI, jehož nastavení je uvedeno níže.
fastcgi_pass 127.0.0.1:9000;
Toto je vlastně řádek, který určuje, kam přesměrovat .php při požadavku syslinux.ru/forum; v našem případě jde o FastCGI (v nastavení démona jsme uvedli 127.0.0.1:9000). Pro přesměrování na Apache je třeba příslušně nakonfigurovat Apache tak, aby naslouchal na portu 8080, a zapsat
proxy_pass http://127.0.0.1:8080;
A pak budou všechny požadavky přicházející do /forum zpracovávány Apachem.
fastcgi_param SCRIPT_FILENAME /srv/http$fastcgi_script_name;
Nebyl jsem si úplně jistý, ale podle mého pochopení to odkazuje na skript. U mě to funguje takto. Mimochodem, co se týče indexových souborů. Velmi dlouho jsem hledal, jak povolit výpis souborů, když v adresáři chybí index.php, *html atd. Ukázalo se, že to je velmi jednoduché – vše bylo v dokumentaci nginx, ale protože nebylo možné si ji přečíst najednou, googlil jsem podle existence analogie k Apacheho +Indexes. Do direktivy location cílového adresáře stačí pouze přidat
autoindex on;
Po všech těchto úkonech lze restartovat nginx a spustit php-cgi
sudo /etc/rc.d/nginx restart
sudo /etc/rc.d/php-cgi start
Otevřete si ve svém prohlížeči localhost a zkontrolujte, zda se skripty provádějí. Funguje to? Skvělé!
Nyní o awstats.
Vše, co jsem výše popsal, jsem zprovoznil poměrně rychle, ale připojení awstats pro práci přes fcgi se mi dlouho nedařilo. Dva dny mi Apache sloužil pouze k zobrazování statistik návštěvnosti :) Pro toto tedy budeme potřebovat fcgiwrap z AUR a spawn-fcgi z téhož zdroje. Sestavte je, nainstalujte a otevřete skript pro spuštění daemonu fcgi-wrap
sudo 'ваш любимый текстовый редактор' /etc/conf.d/fcgiwrap
Upravte jej, zadejte uživatele a skupinu, pod kterými bude skript spuštěn. (Uživatel je ten, pod kterým běží worker proces nginx, skupinu lze nastavit na nobody nebo stejnou jako u uživatele nginx) zadejte IP a port pro naslouchání:
# Address and port to bind to ADDRESS="127.0.0.1" PORT="9001"
Poté přejděte do konfigurace nginx a vložte toto: (jen takto to u mě začalo fungovat)
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;
}
Pokud je odkaz na generování reportu awstats vypadá takto: http://localhost/awstats/awstats.pl?config=syslinux.ru, pak zadejte
location /awstats {
root /path/to/yourserverroot/awstats/cgi-bin;
Uveďte adresář, ve kterém se konkrétně nachází samotný skript pro analýzu logů (awstats.pl)
fastcgi_pass localhost:9001;
Analogy - Uveďte, kam má být požadavek přesměrován, v tomto případě na náš FastCGI server.
fastcgi_param SCRIPT_NAME /awstats.pl;
Uveďte název skriptu, jak jsem pochopil, je brán relativně k rootu (srv/http/awstats/cgi-bin). Při zadání jiným způsobem jsem vždy dostal chybu 404 nebo 403, nebo „input file not specified“
allow 127.0.0.1; deny all;
