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

article/2025/10/18 21:35:51

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

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


http://chatgpt.dhexx.cn/article/9aygWOeA.shtml

相关文章

web服务选择lighttpd,采用fcgi组件技术扩展处理业务层

目录 一、简介fcgi&#xff1a;web和web服务器间数据传输的桥梁... 2 二、源码编译配置ARM Lighttpd Fastcgi C.. 3 【1】交叉编译。源文件都从官网下载。 Fcgi lighttpd zlib. 3 【2】配置服务器server.document-root"/www" fastcgi.server "bin-path&quo…

Nginx运行FastCGI程序(ngx_http_fastcgi_module模块、fcgi库、spwan-fcgi进程管理器)

一、什么是CGI 通用网关接口&#xff08;Common Gateway Interface、CGI&#xff09;描述了客户端和服务器程序之间传输数据的一种标准&#xff0c;可以让一个客户端&#xff0c;从网页浏览器向执行在网络服务器上的程序请求数据。 CGI 独立于任何语言的&#xff0c;CGI 程序可…

php运行方式fpm fcgi,php如何从fpm-fcgi切换运行模式到cli

在使用一个php爬虫的时候提示一定要用cli环境 我查看了当前php版本信息如下: 我打印 PHP_SAPI 显示 fpm-fcgi 如何才能变成 cli 服务器环境是linux+nginx 补充:我能不能理解为cli一定是要命令行模式? 刚刚在命令行里测试了PHP_SAPI 输出了cli 问:能不能http模拟调用实现cli…

spwan-fcgi和fcgi 关系

spwan-fcgi: 举个例子&#xff1a; spawn-fcgi -a 127.0.0.1 -p 10000 -f ./login spwan-fcgi.c: main 函数 会执行参数解析过程 获得 ip 端口 和 执行文件的路径。 bind_socket 函数会执行 sockt 的 绑定监听过程&#xff0c; 函数 fcgi_spawn_connection 会通过系统调用d…

nginx+spawn-fcgi+demo+fcgi库函数

由于项目中用到了nginxFastCGI相关内容&#xff0c;所以这段时间学习了一下&#xff0c;顺便记下相关内容。 我是在远程工作机上实验的&#xff0c;有个缺点就是没有root权限&#xff0c;所以有些步骤我就没做了&#xff0c;比如make install&#xff08;nginx&#xff09;、添…

【fcgi-2.4.0】移植fcgi-2.4.0到armv7平台

源码下载链接 Index of /lookaside/extras/fcgi/fcgi-2.4.0.tar.gz/d15060a813b91383a9f3c66faf84867e (fedoraproject.org)https://src.fedoraproject.org/lookaside/extras/fcgi/fcgi-2.4.0.tar.gz/d15060a813b91383a9f3c66faf84867e/下载fcgi-2.4.0.tar.gz 解压源码 tar …

程序异常捕获库 - CrashRpt

CrashRpt.dll用来在应用程序出现异常crash时&#xff0c;捕获到错误&#xff0c;并收集出错信息&#xff1a;MiniDump文件、硬件信息、系统信息、出错信息、进程信息、服务信息、驱动信息、启动信息、软件列表、端口信息、磁盘分区、WinSock LSP、IE插件、网卡信息。 1、使用方…

CrashRpt.dll用来在应用程序出现异常crash

欢迎加入我们的QQ群&#xff0c;无论你是否工作&#xff0c;学生&#xff0c;只要有c / vc / c 编程经验&#xff0c;就来吧&#xff01;158427611 欢迎加入我们的QQ群&#xff0c;无论你是否工作&#xff0c;学生&#xff0c;只要有c / vc / c 编程经验&#xff0c;就来吧&a…

crashRpt使用方法

从官网上下载crashRpt的源码&#xff0c;按说明编译出相应的lib和dll 1 在编译crashRpt的时候&#xff0c;在环境变量中设置 crashrptDirD:\work\AIW\WebMicaps\WebMicapsServer\src\CrashRpt&#xff0c;以简化编译 2 在主程序运行的工作目录下要拷贝crashRpt编译后生成…

CrashRpt使用

CrashRpt 中除了错误处理之外值得学习的地方还是不少的&#xff0c;如屏幕截图、邮件 发送。 这里主要提取屏幕截图的功能。 1. 从 CrashRpt 源码目录中分别复制 minizip 、 zlib 、 libpng 到一个目录作为公 共库使用&#xff0c;并分别编译它们生成 lib &#xff0c;需要设置…

crashRpt用法

从官网上下载crashRpt的源代码&#xff0c;按说明编译出对应的lib和dll 1 在编译crashRpt的时候&#xff0c;在环境变量中设置 crashrptDirD:\work\AIW\WebMicaps\WebMicapsServer\src\CrashRpt&#xff0c;以简化编译 2 在主程序执行的工作文件夹下要拷贝crashRpt编译后生…

捕获Windows C/C++程序异常奔溃工具CrashRpt

背景 在Windows环境下做C/C程序开发有段时间了&#xff0c;经常遇到程序奔溃时缺无法捕获&#xff0c;经同事推荐&#xff0c;知道了CrashRpt这个捕获C/C程序异常的工具&#xff0c;让我省去了通过增加打印调试去查询程序异常的繁琐方式。下面记录下使用这个工具的一些方法。 …

关于CrashRpt的研究

CrashRpt是轻量级的开源错误报告库 官网下载链接 ##编译工程 从官网下载下最新版&#xff08;v.1.4.3_r1645&#xff09;&#xff0c;解压后发现是visual studio的工程&#xff0c;使用的是vs2010。但我用得是vs2017&#xff0c;所以在编译之前要做一下处理&#xff1a; 对于…

C++接入CrashRpt并上报分析崩溃信息

项目需要监测在Windows平台的崩溃情况&#xff0c;折腾了两天终于弄好了&#xff0c;记录一下。 1.捕获崩溃信息 接到这个需求&#xff0c;心想应用崩溃系统会收到信号&#xff0c;应该有相应的函数可以监听&#xff0c;上网搜索&#xff0c;果不其然函数 SetUnhandledExcep…

计算机中丢失crashrpt,修复crashrpt.dll

crashrpt.dll是电脑系统必备的一个DLL组件修复程序。系统重要文件 crashrpt.dll 。crashrpt.dll(含64位)在电脑中起着重要作用。比如电脑中的部分软件的正常运行就离不开它&#xff0c;如果缺少这款dll&#xff0c;会给用户带来不少麻烦。一旦发现自己的电脑这款crashrpt.dll出…

计算机中丢失crashrpt,crashrpt.dll

crashrpt.dll是smartFTP中一款重要的dll文件&#xff0c;缺少它将导致软件的部分功能无法实现或者无法启动&#xff0c;如果计算机弹出crashrpt.dll丢失或者找不到crashrpt.dll的问题&#xff0c;下载一个crashrpt.dll文件修复一下即可解决问题&#xff0c;需要的朋友可以下载&…

crashrpt

今天原本打算在谷歌上搜索处理SEH的文章&#xff0c;以使我不需要在每一个线程中使用__try{}__except()代码块包裹代码的情况下&#xff0c;就能在任意线程抛出SEH时生成MiniDump文件。不过最后的结果是处理SEH的文章没有搜索出几篇&#xff0c;却幸运的搜索出了满足我需要的工…

Windows平台崩溃转储系统crashrpt的使用

概述 CrashRpt 是一个免费的、轻量级的开源错误报告库开源库&#xff0c;旨在拦截C程序中的异常&#xff0c;收集有关崩溃的技术信息并通过互联网向软件供应商发送错误报告&#xff0c;用于在 Microsoft Visual Studio IDE 中创建并在 Windows 中运行C应用程序。&#xff08;不…

Android APK及签名

APK是AndroidPackage的缩写&#xff0c;即Android安装包(apk)。APK是类似Symbian Sis或Sisx的 文件格式。通过将APK文件直接传到 Android模拟器或Android手机中执行即可安装。apk文件和sis一样&#xff0c;把 android sdk编译的工程打包成一个安装程序文件&#xff0c;格式为ap…

安卓应用签名

安卓应用release模式是需要签名的&#xff0c;否则无法安装&#xff0c;debug模式不需要的 签名可以用keytool生成密钥文件&#xff0c;然后在build.gradle中指定即可。 一、生成密钥文件 keytool -genkey -alias noalias -keypass abcd1234 -keyalg RSA -keysize 2048 -valid…