Ich habe das CGI-Skript auf Mietservern berührt, ohne es gut zu kennen, aber ich habe versucht, es selbst auszuführen. Es ist eine Arbeit aus dem Neuinstallationsstatus von CentOS8. Der Code wird wiederverwendet, damit ich ihn kopieren kann. Da dies der Zweck der Arbeitsgeschichte ist, gibt es nur wenige Erklärungen. Es tut mir Leid.
Wenn eine Paketkonfigurationsdatei installiert ist, verwende ich sie so oft wie möglich. In einer Umgebung, die bereits ausgeführt wird, wurde möglicherweise die Standardeinstellungsdatei geändert, sodass dieses Verfahren nicht immer funktioniert.
Zeitzonenfix, Paketaktualisierung, Selinux deaktiviert
timedatectl set-timezone Asia/Tokyo
dnf install -y epel-release
dnf update -y
sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
shutdown -r now
Installieren Sie jedes Skript und das Paket, um es als CGI auszuführen.
dnf install -y nginx php php-fpm python38 ruby fcgi spawn-fcgi fcgiwrap
Stellen Sie sicher, dass Sie fcgi aufrufen, wenn das Python-Perl-Ruby-Skript aufgerufen wird.
Da es sich um ein Dokument handelt, kopieren Sie es so wie es ist
cat <<'EOF' > /etc/nginx/default.d/cgi.conf
location ~ \.(py|pl|rb)$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/spawn-fcgi.socket;
}
EOF
Bereiten Sie eine spawn-fcgi-Konfigurationsdatei vor, um den fcgi-Wrapper als Dienst auszuführen.
Da es sich um ein Dokument handelt, kopieren Sie es so wie es ist
cat <<'EOF' > /etc/sysconfig/spawn-fcgi
SOCKET=/var/run/spawn-fcgi.socket
OPTIONS="-u nginx -g nginx -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /sbin/fcgiwrap"
EOF
Registrieren Sie sich und starten Sie die Dienste spawn-fcgi und php-fpm.
systemctl enable nginx php-fpm spawn-fcgi
systemctl start nginx php-fpm spawn-fcgi
Machen Sie ein Loch in die Firewall.
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --reload
Außerdem ist php-fpm mit der Standardeinstellungsdatei in Ordnung, wenn das Paket installiert wird.
Erstellen Sie einen Index für jedes Skript.
Da es sich um ein Dokument handelt, kopieren Sie es so wie es ist
cat <<'EOF' > /usr/share/nginx/html/index.html
<html><body>
<h1>Running CGI scripts on NGINX</h1>
<a href=/php.php>php script</a><br>
<br>
<a href=/python.py>python script</a><br>
<br>
<a href=/perl.pl>perl script</a><br>
<br>
<a href=/ruby.rb>ruby script</a><br>
</body></html>
EOF
Skriptdatei
Da es sich um ein Dokument handelt, kopieren Sie es so wie es ist
cat <<'EOF' > /usr/share/nginx/html/php.php
<?php
print "<html><body>\n";
print "Hello PHP Script!<br>\n";
print "</body></html>\n";
?>
EOF
Funktionsprüfung
# curl http://localhost/php.php
<html><body>
Hello PHP Script!<br>
</body></html>
Skriptdatei
Da es sich um ein Dokument handelt, kopieren Sie es so wie es ist
cat <<'EOF' > /usr/share/nginx/html/perl.pl
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>\n";
print "Hello Perl Script!<br>\n";
print "</body></html>\n";
exit;
EOF
chmod 755 /usr/share/nginx/html/perl.pl
Funktionsprüfung
# curl http://localhost/perl.pl
<html><body>
Hello Perl Script!<br>
</body></html>
Skriptdatei
Da es sich um ein Dokument handelt, kopieren Sie es so wie es ist
cat <<'EOF' > /usr/share/nginx/html/python.py
#!/usr/bin/python3
print("HTTP/1.0 200 OK")
print("Content-type: text/html\n")
print("<html><body>")
print("Hello Python Script!<br>")
print("</body></html>")
EOF
chmod 755 /usr/share/nginx/html/python.py
Funktionsprüfung
# curl http://localhost/python.py
<html><body>
Hello Python Script!<br>
</body></html>
Skriptdatei
Da es sich um ein Dokument handelt, kopieren Sie es so wie es ist
cat <<'EOF' > /usr/share/nginx/html/ruby.rb
#!/usr/bin/ruby
puts "Content-type: text/html\n\n"
puts "<html><body>"
puts "Hello Ruby Script!<br>"
puts "</body></html>"
EOF
chmod 755 /usr/share/nginx/html/ruby.rb
Funktionsprüfung
# curl http://localhost/ruby.rb
<html><body>
Hello Ruby Script!<br>
</body></html>
php-fpm wird mit den Einstellungen wie in der Paketinstallation betrieben.
:/etc/nginx/conf.d/php-fpm.conf
upstream php-fpm {
server unix:/run/php-fpm/www.sock;
}
:/etc/nginx/default.d/php.conf
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}