在Linux下使用Nginx作为Perl程序的服务器,通常有以下几种方法:
这是最常用的方法,通过Perl的FCGI模块与Nginx配合。
# Debian/Ubuntu
sudo apt-get install nginx libfcgi-perl libcgi-fast-perl
# CentOS/RHEL
sudo yum install nginx perl-FCGI perl-CGI-Fast
server {
listen 80;
server_name yourdomain.com;
location / {
try_files $uri @perlapp;
}
location @perlapp {
fastcgi_pass unix:/var/run/perl-fcgi.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#!/usr/bin/perl
use FCGI;
use Socket;
use POSIX qw(setsid);
require 'syscall.ph';
my $socket = FCGI::OpenSocket('/var/run/perl-fcgi.sock', 10);
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket);
while($request->Accept() >= 0) {
# 这里是你的Perl应用代码
print "Content-type: text/html\r\n\r\n";
print "Hello from Perl FastCGI!";
}
这是更现代的方法,推荐使用。
# 安装Plack和相关模块
sudo cpanm Plack Starman
use Plack::Builder;
my $app = sub {
return [200, ['Content-Type' => 'text/plain'], ["Hello from PSGI!"]];
};
builder {
enable "Plack::Middleware::Static",
path => qr{^/(images|js|css)/},
root => './static';
$app;
};
plackup -s Starman --listen :5000 app.psgi
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# Debian/Ubuntu
sudo apt-get install libmodule-name-perl
# CentOS/RHEL
sudo yum install perl-Module-Name
sudo cpan Module::Name
# 安装cpanminus
sudo apt-get install cpanminus # 或 yum install perl-App-cpanminus
# 安装模块
sudo cpanm Module::Name
cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
cpanm Module::Name
/var/log/nginx/error.log
perl -MModule::Name -e 'print "$Module::Name::VERSION\n"'
验证安装server {
# 主应用
location / {
proxy_pass http://127.0.0.1:5000;
}
# 另一个Perl应用
location /app2 {
proxy_pass http://127.0.0.1:5001;
}
}
安装Supervisor后配置:
[program:my_perl_app]
command=/usr/local/bin/plackup -s Starman --workers 5 --listen :5000 /path/to/app.psgi
directory=/path/to/
user=www-data
autostart=true
autorestart=true
stderr_logfile=/var/log/my_perl_app.err.log
stdout_logfile=/var/log/my_perl_app.out.log
在PSGI文件中:
use Plack::Builder;
builder {
enable 'Deflater';
enable 'Session', store => 'File';
enable 'Static', path => qr{^/static/};
$app;
};
以上配置提供了在Linux下使用Nginx作为Perl程序服务器的完整方案,从基本配置到高级优化都有涵盖。根据你的具体需求选择合适的方案。