Выполнение CGI-приложений при работе с сервером nginx

Как показала теория и практика - nginx выполнять CGI-приложения на perl не может. Для этого будем использовать его как proxy-сервер для запросов, а само выполнение CGI переложим на lighttpd.

Для этого соберём и сконфигурируем CGI-бэкенд:

andrew@srv01:/var/tmp/lighttpd-1.4.23$ ./configure --prefix=/usr/local/lighttpd-1.4.23 \
  --with-bzip2 \
  --with-pcre \
  --with-openssl

После сборки сервера создаём самый простой конфигурационный файл, с учётом того, что сам сервер будет стоять за прокси:

server.document-root = "/var/www/virtual/null"

server.bind = "127.0.0.1"
server.port = 8080

server.username = "www-data"
server.groupname = "www-data"

server.modules = (	"mod_cgi" )

mimetype.assign = (
	".html" => "text/html",
	".txt" => "text/plain",
	".jpg" => "image/jpeg",
	".png" => "image/png"
)

#static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc" )
index-file.names = ( "index.html" )

# CGI module
cgi.assign = (	".pl"  => "/usr/bin/perl",
				".cgi" => "/usr/bin/perl" )

#
# Virtual host configuration
#
$HTTP["host"] == "awstats.myserver.net" {
	index-file.names = ( "awstats.pl" )
	server.document-root = "/var/www/virtual/myserver.net/html/85622f436f6d8be1fc37b49456137f2a"
}

и записываем его как /usr/local/lighttpd-1.4.23/etc/lighttpd.conf

Добавляем новое имя в /etc/hosts:
127.0.0.1 awstats.myserver.net

Теперь протестируем нашу конфигурацию:

srv01:/usr/local/lighttpd-1.4.23/etc# /usr/local/lighttpd-1.4.23/sbin/lighttpd -t -f /usr/local/lighttpd-1.4.23/etc/lighttpd.conf

и запустим

srv01:/usr/local/lighttpd-1.4.23/etc# /usr/local/lighttpd-1.4.23/sbin/lighttpd -D -f /usr/local/lighttpd-1.4.23/etc/lighttpd.conf

Теперь самое время сконфигурировать nginx как прокси для всех запросов вида http://myserver.net/85622f436f6d8be1fc37b49456137f2a/:

location /85622f436f6d8be1fc37b49456137f2a/ {
    proxy_pass http://awstats.myserver.net:8080/;
}

и перезапускаем nginx :)

( categories: )