搭建nginx+fcgi并使用Holer实现内外网访问

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;
        }
    }

这样就可以既使用局域网又可以使用外网访问了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值