1、环境搭建
本文使用了ubuntu20.04系统进行搭建。
1.1搭建nginx服务器
到Nginx的官网(http://nginx.org/en/download.html
)上去下载最新的源码包,本文使用的是nginx-1.20.0.tar.gz
(1)执行tar -zxvf nginx-1.20.0.tar.gz
命令解压文件到当前目录下(具体的安装包名根据你下载的Nginx包进行确定)。
(2)进入解压后的nginx-1.20.0.tar.gz目录执行./configure --prefix=/usr/local/nginx
命令(默认安装也安装在这里)。
(3)执行make
命令。
(4)执行make install
命令。
在(2)步骤当中出现了类似checking for *** … not found项,可能是依赖包没有,则需要安装依赖包)
1、缺少pcre
sudo apt-get install libpcre3 libpcre3-dev
也可以去http://www.pcre.org/
下载安装
2、缺少zlib
sudo apt-get install zlib1g zlib1g-dev
也可以去 http://www.zlib.net/
下载安装
3、缺少openssl
sudo apt-get install openssl libssl-dev
也可以去http://www.openssl.org
下载安装
4、出现configure: error: bzip2-headers and/or libs where not found
sudo apt-get install libbz2-dev
编译wayland时候出现这样的错误提示 “autoreconf: not found”
,原因linux系统缺少autoreconf工具
sudo apt-get install autoconf automake libtool
1.2.spawn_fastcgi的安装
下载软件 https://github.com/lighttpd/spawn-fcgi/releases/
(1)下载以后先解压
(2)如果没有configure,请先执行./autogen.sh
,生成configure
(3)然后执行./configure
(4)再执行 make
(5)编译成功之后将文件移动到nginx下面的sbin目录
sudo cp ./src/spawn-fcgi /usr/local/nginx/sbin/
1.3 fcgi安装
应该是http://www.fastcgi.com/dist/fcgi.tar.gz
但是也一直打不开,所以搜索使用了
https://github.com/Seaworth/resources/tree/master/fastCGI%E5%AE%89%E8%A3%85%E5%8C%85
感谢这位大神!!!
下载之后
(1)解压
(2)然后进入include目录,找到fcgio.h
文件,打开文件,添加头文件#include <cstdio>
不添加在make的时候可能报错。
(3) ./configure
也可以使用 ./configure --prefix=/home/fastcgi/fcgi/fcgi-2.4.0/install
(实现创建好文件夹,根据自己的文件路径来)
(4)执行make
命令
(5)执行make install
命令
(6)要是使用./configure --prefix=/home/fastcgi/fcgi/fcgi-2.4.0/install
把install/lib下面的libfcgi.so.0
库拷贝到/usr/lib/
目录下面,直接使用 ./configure
建议搜索一下,不过这一步不做可能也可以,建议还是复制一下
sudo cp -r ./install/lib/libfcgi.so.0 /usr/lib/
2、fcgi程序编写
编写如下的C文件,fcgi.c
#include <stdio.h>
#include <fcgi_stdio.h>
#include <stdlib.h>
int main()
{
int count = 0;
while (FCGI_Accept() >= 0)
{
printf("Content-type: text/html\r\n"
"\r\n"
""
"FastCGI Hello!");
}
return 0;
}
保存退出之后,执行命令
gcc fcgi.c -o fcgi -lfcgi
然后将fcgi拷贝到/usr/local/nginx/sbin
目录下
sudo cp fcgi /usr/local/nginx/sbin/
3、配置相关文件
打开nginx的配置文件,目录位置是/usr/local/nginx/conf/
有一个名为nginx.conf
的文件,打开它,在server节点下面添加如下代码。
location ~ \.cgi$ {
fastcgi_pass 127.0.0.1:8088;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
include fastcgi_params;
}
4、启动fcgi程序并重启nginx
4.1 fcgi程序启动
/usr/local/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 8088 -f /usr/local/nginx/sbin/fcgi
(1)关闭nginx
sudo killall nginx
(2)开启nginx
在nginx的安装目录执行sudo ./nginx
或者直接使用
sudo /usr/local/nginx/sbin/nginx (默认安装路径)
(3)查看当前nginx进程
ps -ef | grep nginx
5、访问这个fcgi程序
使用 http://localhost/demo.cgi
或者http://127.0.0.1/fcgi.cgi
也可以使用IP/fcgi.cgi
如果不行可以使用IP:8088/fcgi.cgi
6、利用Holer穿透到外网,可以使用外网访问
使用Holer可以申请他们的服务,得到一个key
然后去官网下载go语言版本的Holer
https://github.com/wisdom-projects/holer/tree/master/Binary
我们使用的是amd64架构的程序,然后执行
nohup ./holer-linux-amd64 -k ceefabc6fd3e46a6807980******* -s holer.cc &
配置一下nginx
server {
listen 8999;#这个端口在申请时告诉他就可以,端口随意,不冲突就好
server_name localhost;
location ~ \.cgi$ {
fastcgi_pass 127.0.0.1:8088;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
重启nginx,即可通过给的域名进行访问。
7、配置一下,可以使用内外网一起访问
现在使用Holer之后,局域网就不能访问了,解决很简单,多放一个sever就好了
server {
listen 8999;
server_name localhost;
location ~ \.cgi$ {
fastcgi_pass 127.0.0.1:8088;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name localhost;
location ~ \.cgi$ {
fastcgi_pass 127.0.0.1:8088;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
这样就可以既使用局域网又可以使用外网访问了。