Crmgo Blog

Nginx & FastCG

Nginx & FastCG

Um nicht ständig FastCGI aus der Konsole starten zu müssen, erstellen wir ein Skript zum Starten des FastCGI-Dämons und fügen den folgenden Code ein *) echo "Usage: $0 {start|stop|restart}" esac Speichern und beenden. Jetzt kann FCGI als Daemon gestartet werden. Aus diesem Code geht hervor, dass der FastCGI-Server 127.0.0.1…

Nginx & FastCG
статья от сюда
sudo pacman -S fcgi php-cgi

Um nicht ständig FastCGI über die Konsole starten zu müssen, erstellen wir ein Skript zum Starten des FastCGI-Dämons.

sudo 'ваш любимый текстовый редактор' /etc/rc.d/php-cgi

und fügen den folgenden Code ein

#!/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

 

Speichern und beenden. Nun kann FCGI als Daemon gestartet werden.

 

sudo /etc/rc.d/php-cgi start|stop|restart

 

Aus diesem Code geht hervor, dass der FastCGI-Server auf 127.0.0.1 am Port 9000 lauschen wird. Daher konfigurieren wir nginx so, dass er alle Anfragen an Skripte, also alles außer statische Dateien, genau dorthin weiterleitet. Öffnen Sie die nginx-Konfigurationsdatei und nehmen Sie etwa folgende Änderungen vor: Je nachdem, wo Ihre Skripte liegen, sind die location-Direktiven unterschiedlich. Ich zeige ein Beispiel für 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;
}

 

In der location-Direktive muss der Einstiegspunkt relativ zum externen Zugriff angegeben werden. Wenn die URL Ihrer Website syslinux.ru lautet, entspricht die location-Direktive

 

location / { root /srv/http;

 

Analog dazu bei der Anfrage syslinux.ru/forum so:

 

location /forum { root /srv/http;

 

Mit anderen Worten: Durch die Angabe verschiedener location-Direktiven in der Konfigurationsdatei steuern wir die Locations und können für jede davon individuelle Einstellungen erstellen. Der oben gezeigte Teil der Konfigurationsdatei lässt sich sicherlich kürzer schreiben, aber dafür reicht mein Wissen derzeit noch nicht aus. Die Schlüsselpunkte dieser Konfiguration sind:

 

location /forum {

 

Gibt die URL an, bei deren Aufruf die nachfolgende Regel ausgeführt wird.

 

root /srv/http/;

 

Hier wird die Zuordnung der URL zum Dateisystem angegeben. Mit anderen Worten wird der absolute Pfad zu den Dateien festgelegt, die nginx bei Aufruf des Stammverzeichnisses der Website (syslinux.ru) ausliefern soll.

 

index index.html index.htm index.php;

 

Gibt den MIME-Typ der Indexdateien an. Fehlen diese, wird die Seite nicht geöffnet, auch wenn andere, nicht festgelegte Dateien vorhanden sind.

 

location ~ \.php$ {

 

Gibt an, dass alle .php-Skripte aus dem unten angegebenen root /srv/http/forum an die FastCGI-Einstellungen weitergeleitet werden, deren Konfiguration unten angegeben ist.

 

fastcgi_pass 127.0.0.1:9000;

 

Eigentlich ist dies die Zeile, die angibt, wohin .php-Dateien bei der Anfrage syslinux.ru/forum weitergeleitet werden sollen. In unserem Fall ist dies FastCGI (im Dämonen haben wir 127.0.0.1:9000 angegeben). Um an Apache weiterzuleiten, muss Apache entsprechend so konfiguriert werden, dass er den Port 8080 abhört, und es muss

 

proxy_pass http://127.0.0.1:8080;

 

geschrieben werden. Dann werden alle Anfragen, die an /forum kommen, von Apache verarbeitet.

 

fastcgi_param SCRIPT_FILENAME /srv/http$fastcgi_script_name;

 

Ich habe es nicht ganz verstanden, aber soweit ich es erfasst habe, verweist es auf ein Skript. Bei mir funktioniert es so. Übrigens bezüglich Index-Dateien: Ich habe sehr lange danach gesucht, wie man das Auflisten von Dateien (Directory Listing) erlaubt, wenn sich keine index.php, *html usw. im Verzeichnis befindet. Es stellte sich heraus, dass es sehr einfach ist. Die Lösung stand in der nginx-Dokumentation, aber da es unmöglich war, sie auf einmal vollständig zu lesen, habe ich nach einem Äquivalent zu Apache's +Indexes gesucht. In die location-Direktive des Zielverzeichnisses muss man lediglich folgendes hinzufügen:

 

autoindex on;

 

Nach all diesen Schritten kann man nginx neu starten und php-cgi starten.

 

sudo /etc/rc.d/nginx restart

sudo /etc/rc.d/php-cgi start

 

Rufen Sie Ihren localhost im Browser auf und prüfen Sie, ob die Skripte ausgeführt werden. Funktioniert es? Ausgezeichnet!

 

Nun zu awstats.

 

Alles, was ich oben beschrieben habe, habe ich ziemlich schnell zum Laufen gebracht, aber awstats über fcgi zum Arbeiten zu bringen, gelang mir lange Zeit nicht. Zwei Tage lang diente Apache nur dazu, die Besuchstatistiken anzuzeigen :) Um dies zu erreichen, benötigen wir fcgiwrap aus dem AUR und spawn-fcgi ebenfalls daraus. Wir kompilieren und installieren sie und öffnen das Skript zum Starten des fcgi-wrap-Dämons.

 

sudo 'ваш любимый текстовый редактор' /etc/conf.d/fcgiwrap

 

Bearbeiten Sie es und geben Sie den Benutzer und die Gruppe an, unter denen das Skript ausgeführt werden soll. (Der Benutzer ist derselbe, unter dem der Worker-Prozess von nginx läuft; die Gruppe kann nobody oder dieselbe wie die des nginx-Benutzers sein). Geben Sie die IP-Adresse und den Port für das Lauschen an:

 

# Address and port to bind to
ADDRESS="127.0.0.1"
PORT="9001"

 

Danach gehen Sie in die nginx-Konfiguration und fügen Folgendes ein: (Nur so hat es bei mir funktioniert)

 

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;
 }
location /awstatsclasses/ {
alias /srv/http/awstats/classes/;
}
location /awstatscss/ {
alias /srv/http/awstats/css/;
}
location /awstatsicons/ {
alias /srv/http/awstats/icon/;
}

 

Da der Link zur Generierung des awstats-Berichts so aussieht: http://localhost/awstats/awstats.pl?config=syslinux.ru, geben wir an

 

location /awstats {

 

root /path/to/yourserverroot/awstats/cgi-bin;

 

Einen Verweis auf das Verzeichnis, in dem sich das eigentliche Log-Analyse-Skript (awstats.pl) befindet.

 

fastcgi_pass localhost:9001;

 

Analogie: Wir geben an, wohin die Anfrage weitergeleitet werden soll, in diesem Fall an unseren FastCGI-Server.

 

fastcgi_param SCRIPT_NAME /awstats.pl;

 

Wir geben den Namen des Skripts an. Wie ich verstanden habe, wird dies relativ zu root (srv/http/awstats/cgi-bin) genommen. Wenn ich es auf andere Weise angegeben habe, erhielt ich immer einen 404- oder 403-Fehler oder die Meldung "input file not specified".

 

allow 127.0.0.1; deny all;

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.