安装环境: Ubuntu Kylin 16.4 64位中文版 内核4.4.0
内存: 2G
1.安装: nignx
sudo apt-get install nignx
自动安装版本: nginx version: nginx/1.10.0 (Ubuntu)
安装之后ps -aux |grep nginx 看到一个master两个worker
1.下载的软件存放位置 /var/cache/apt/archives
3.可执行文件位置 /usr/sbin/ 有的可能在/usr/bin目录下,看运行的master就知道在那个目录下
4.配置文件位置 /etc/nginx/ 有的直接在/etc文件下
5.lib文件位置 /usr/lib
自定义编译安装方法:
1. nginx下载目录 http://nginx.org/en/download.html 是nginx-1.5.10
2. 下载以后解压并安装(请记得看README)
./configure (注意了类似checking for *** ... not found项,可能是依赖包没有,则需要安装依赖包)
缺少pcre,则需要额外安装 http://www.pcre.org/ (或者采用apt-get或yum的安装方式)
缺少zlib,则需要额外安装 http://www.zlib.net/ (或者采用apt-get或yum的安装方式)
缺少OpenSSL,则需要额外安装 http://www.openssl.org (或者采用apt-get或yum的安装方式)
如果需要配置安装额外的功能模块,可以参考这里 http://wiki.codemongers.com/NginxChsInstall
make
make install (默认安装到/usr/local/nginx)
[配置和管理]
1)执行选项
-c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。不输入则使用默认的配置文件。
-t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
-v 显示 nginx 的版本。
-V 显示 nginx 的版本,编译器版本和配置参数。
2)检查配置文件
sudo ./nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
3)启动 - 默认和特殊
/usr/sbin/nginx (默认启动方式)
/usr/sbin/nginx -c /etc/nginx/nginx.conf (指定配置文件启动)
4)查看nginx进程号(master是主进程)
ps -ef | grep nginx
5)重新加载配置文件
sudo kill -HUP [nginx主进程号]
通过系统的信号控制 Nginx
可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /run/nginx.pid 文件中。
通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。
主进程可以处理以下的信号:
命令
TERM, INT 快速关闭
QUIT 从容关闭
HUP 重载配置 用新的配置开始新的工作进程,从容关闭旧的工作进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
6)默认目录结构 可以使用 find "nginx" / |xargs grep nginx 查看各个目录
主目录:/usr/local/nginx/
配置目录:/etc/nginx/nginx.conf
root目录:/usr/share/nginx/html
2.spawn_fastcgi的安装、部署与配置
下载地址: https://github.com/lighttpd/spawn-fcgi 或者 http://redmine.lighttpd.net/projects/spawn-fcgi/news
这里使用的是1.6.4的版本 https://github.com/lighttpd/spawn-fcgi/releases/tag/v1.6.4
(1)解压,进入源码目录,方法同上,新建/home/wensheng/fastcgi/spawn/目录。
在配置之前先运行./autogen.sh
(2)配置
./configure --prefix=/home/wensheng/fastcgi/spawn/
(3)然后依次输入
make
make install
(4)进入到_install目录
把bin目录下生成的程序拷贝到nginx服务器的安装目录下的sbin目录里面去,例如我的安装目录是/user/sbin\
3. fcgi的安装、部署与配置
源码下载云盘 http://pan.baidu.com/s/1bo2FpN5 官网的http://www.fastcgi.com/dist/fcgi.tar.gz这个总是打不开
也可以下载fastcgi++,但是需要boost等库的支持
我下载的是fcgi-2.4.0
(1)要编写fastcgi程序,需要使用到fastcgi的头文件。要运行fastcgi程序需要依赖库文件。通过fastcgi源码去
得到头文件和库将下载好的fastcgi压缩文件解压.
(2)然后进入include目录,找到fcgio.h文件;打开该文件,加入一行代码 #include <cstdio> ,
#include <iostream>
#include "fcgiapp.h"
#include <cstdio> //添加这一行
#ifndef DLLAPI
#ifdef _WIN32
#define DLLAPI __declspec(dllimport)
这是因为gcc编译器更新的比较快,比较新,而fastcgi版本比较旧,可能存在一些不兼容的问题,在make的时候会报错。
(3)创建文件夹/home/wensheng/fastcgi/fcgi
(4)然后配置,通过参数--prefix来指定一会make install的文件都放到指定目录,prefix后面跟的是绝对路径,大家根据自己的实际情况来填写路径,只要最后指到新建的/home/wensheng/fastcgi/fcgi目录就正确。配置命令如下:
./configure --prefix=/home/wensheng/fastcgi/fcgi
make
make install
(5)将库文件拷贝主lib库: cp /home/wensheng/fastcgi/fcgi/lib/libfcgi.so.0 /usr/lib/
4. 用c++编写fcgi程序
test.cpp文件
#include <fcgi_stdio.h>
#include <stdlib.h>
int main() {
int count = 0;
int i = 0;
while (FCGI_Accept() >= 0) {
printf("Content-type: text/html\r\n"
"\r\n"
""
"FastCGI Hello!"
"Request number %d running on host%s "
"Process ID: %d\n", ++count, getenv("SERVER_NAME"), ++i);
}
return 0;
}
在之前解压的文件夹下或者在/home/wensheng/fastcgi/fcgi/include/编写text.cpp
或者将/home/wensheng/fastcgi/fcgi/include/ 和/home/wensheng/fastcgi/fcgi/lib/文件夹加载到path
如:
#增加.so搜索路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wensheng/fastcgi/fcgi/lib/
#增加.a搜索路径
export LIBRARY_PATH=$LIBRARY_PATH:/home/wensheng/fastcgi/fcgi/lib/
#增加bin搜索路径
export PATH=$PATH:/home/wensheng/fastcgi/fcgi/bin
#增加GCC的include文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/wensheng/fastcgi/fcgi/include
#增加G++的include文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/wensheng/fastcgi/fcgi/include
编译:
g++ text.cpp -o text -lfcgi
有两点稍微说明一下:
(1) 在while(FCGI_Accept() >= 0)循环的外面可以放一些变量定义等等,实际的操作语句放到while循环里面,fcgi的工作方式是,网页一旦请求,那么就触发fcgi程序,每请求一次,while就循环一次。
(2)"Conten-type:text/html\r\n"这个代码一定要加上。
5. 发布web服务:
1. 因为nginx的安装目录是/usr/sbin/ 需要将./ext可执行文件拷入该地址
2. 启动spawn-fcgi管理进程,并绑定server IP和端口(不要跟nginx的监听端口重合)
因为之前将spawn-fcgi拷贝到了/usr/sbin目录: /usr/sbin# ./spawn-fcgi -a 127.0.0.1 -p 8088 -f /usr/sbin/text
查看一下8088端口是否已成功:netstat -na | grep 8088
3. 更改nginx.conf配置文件,让nginx转发请求
vim /etc/nginx/nginx.conf
找到http节点下的server节点,我的没有找到,但是包含了下面两个文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
进入/etc/nginx/sites-enabled/default文件发现有server节点
4.修改server节点
server {
listen 80 default_server;
server_name localhost; # 添加该行
index index.html index.htm index.php # 添加该行
#以下新加的就是代理的服务器 "location ~ \.cgi"表示的是location下任何cgi地址地址都会映射到这里,也可以指定"location ~ /test.cgi"表示只有test.cgi可以映射到这里
location ~ \.cgi
{
fastcgi_pass 127.0.0.1:8088;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
include fastcgi_params;
}
}
5. 重启nginx或者重新加载配置文件
a.重新加载配置文件: sudo kill -HUP nginx的master进程id
b.重启nginx
杀掉所有nginx人后./nginx
6.打开浏览器访问:
http://localhost/text.cgi
显示的是FastCGI Hello!Request number 10 running on hostlocalhost Process ID: 10 成功
[5]:http://blog.youkuaiyun.com/yo746862873/article/details/51892504
[6]https://segmentfault.com/a/1190000002797601