zoukankan      html  css  js  c++  java
  • 云盘项目——Nginx、Http协议、FastCGI

    在学习云盘项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

    12-云盘项目- 04天  Nginx、Http协议、FastCGI

    目录:
    一、学习目标
    二、复习
    二、Nginx、Http协议、FastCGI
    1、为什么要使用cgi
    2、http协议回顾
    3、cgi和fastCGI的工作模式
    4、fastCGI介绍
    5、fastCGI和spawn-fcgi的安装
    6、spawn-fcgi是如何工作的
    7、nginx配置fastcgi
    8、nginx和fastCGI - spawn-fcgi协工作演示
    9、通过部署web界面实现文件的上传操作步骤
    10、文件上传流程演示
    11、post提交数据的四种方式
    12、nginx和fastcgi的部署总结

    一、学习目标

    FastCGI、spawn-fcgi、部署web页面实现文件上传操作

    二、复习

    nginx知识点回顾

    二、Nginx、Http协议、FastCGI

    1、为什么要使用cgi

    2、http协议回顾

    》http的get和post请求

        

    GET中:/test为指令,和后边的数据通过?间隔。

    GET的数据块没有内容,POST的数据块有内容。

    测试:

    (1)在QT运行http项目,弹出“Http协议”对话框,然后选择IP,输入端口;点击“启动服务器”;

    (2)修改 “表单.html”中<form method="post" action="http://192.168.82.32/test">,保存;

    (3)在浏览器中打开“表单.html”,在对话框随便输入内容后,点击提交后,在QT“Http协议”对话框可以看到下图数据:

    3、cgi和fastCGI的工作模式

    4、fastCGI介绍

       

    5、fastCGI和spawn-fcgi的安装

    文件准备:fcgi-2.4.1-SNAP-0910052249.tar.gz、spawn-fcgi-1.6.4.tar.gz

    (1)上传至Linux后,解压缩(tar zxvf fcgi-2.4.1-SNAP-0910052249.tar.gz)后,切换到目录(fcgi-2.4.1-SNAP-0910052249)下,执行>./configure

    会生成Makefile,>make 后报错

    分析:c++编译需要用到EOF,而EOF由于版本升级的原因,更放在stdio.h中,所以需要在fcgio.cpp/fcgio.h中增加头文件#include <stdio.h>

    如何在众多目录中找到fcgio.cpp/fcgio.h呢?(>find ./ -name "fcgio.cpp")

    在fcgio.cpp中增加头文件#include <stdio.h>

    保存退出后,在执行>make 后,然后安装 >sudo make install

    (2)解压缩(tar zxvf spawn-fcgi-1.6.4.tar.gz)后,切换到目录(spawn-fcgi-1.6.4)下执行>./configure;会生成Makefile,在执行>make 后,然后安装 >sudo make install

    6、spawn-fcgi是如何工作的

    7、nginx配置fastcgi

    练习:

    配置—nginx.conf

    说明fastcgi.conf和nginx.conf在同一级目录下;fastcgi.conf 存放是环境变量:

    8、nginx和fastCGI - spawn-fcgi协工作演示

    (1)编写1个fcgi程序:

    将fcgi-2.4.1-SNAP-0910052249目录下的 echo.c 拷贝至家目录:

    分析echo.c


    补充:打开另一终端,搜索>grep "environ" /usr/include/unistd.h -r -n


     

    (2)编译出来的程序名 a.out

    编译 >gcc echo.c -lfcgi

    (3)spawn-fcgi -a IP -p 端口 -f fastcgi程序

    >spawn-fcgi -a 127.0.0.1 -p 9001 -f ./a.out

    注意:这里的IP和端口要和上面配置—nginx.conf中写的对应!!!


    如果执行不成功?>ldd a.out

    然后打开>vi /etc/ld.so.conf,增加:

    再执行>sudo ldconfig,>ldd a.out 就可以看到动态库后边有对应的路径了。


    (4)在Linux下启动Nginx:>sudo nginx

    (5)点击“表单.html”通过浏览器打开网页:

    随便输入数据,点击“提交”,会跳转:

    分析页面数据,看程序echo.c的main可知,执行getenv(只有post请求,环境变量才有数据!)没有数据,然后输出:No data from standard inpurt,然后main程序结尾的printEnv打印了环境变量(fastcgi.conf 存放是环境变量

    (6)对比测试——get与post

    1)更改“表单.html”中提交方法为post,保存退出

    2)点击“表单.html”通过浏览器打开网页,随便输入数据,点击“提交”,会跳转(可以看到地址栏中没有数据项,而且页面内容增加了请求长度、进程ID,和数据块,而且QUERY_STRING没有了数据,CONTENT_TYPE增加了值,CONTENT_LENGTH增加了值……)

    9、通过部署web界面实现文件的上传操作步骤

    10、文件上传流程演示

    文件准备:zyfile2.tar.gz,将文件拷贝(/usr/local/nginx)到目录下,解压缩(sudo tar zxvf zyfile2.tar.gz)

    (1)查看上传文件对应的html文件——找到数据提交的位置(nginx需要配置的指令 - /upload)

    (2)修改nginx配置文件

    (3)重新加载nginx配置文件

    >sudo /usr/local/nginx/sbin/nginx -s reload

    (4)编写一个fastcgi程序

    1)将上传的文件的内容 - 提交到fastdfs存储节点(为了方便,写了一个脚本fcgi.sh)

    启动:

    2)在wind下打开浏览器,输入IP后,跳转相应的网页,然后“点击选择文件”,选择上传的图片,然后点击“开始上传”:

    3)切换到相应目录(/fastDFS/storage/data/00/00)下,查看文件是否上传成功:

    4)将文件下载到本地wind,打开查看(图片是否正确):

    11、post提交数据的四种方式

    注意:使用post上传数据而不用get除了安全性考虑,还有就是浏览器地址栏最大支持8KB,过大的数据不支持!

    (1)编译echo.c(>gcc echo.c -lfcgi -o test),然后运行>./test

    (2)>spawn-fcgi -a 127.0.0.1 -p 8002 -f ./test

    (3)在wind下打开浏览器,输入IP后,跳转相应的网页,然后“点击选择文件”,选择上传的图片,然后点击“开始上传”:

    》post 数据四种提交方式

    12、nginx和fastcgi的部署总结

    (1)文件准备:zyfile2.tar.gz,将文件拷贝(/usr/local/nginx)到目录下,解压缩(sudo tar zxvf zyfile2.tar.gz);

    (2)切换到相应目录(/usr/local/nginx/conf)修改nginx配置文件—nginx.conf

    (3)重新加载nginx配置文(>sudo /usr/local/nginx/sbin/nginx -s reload)

    (4)在wind下打开浏览器,输入IP后,跳转相应的网页:

    (5)为方便上传文件,在(/usr/local/nginx/zyFile2)目录下,修改demo.html:

    (6)切换到相应目录(/usr/local/nginx/conf)修改nginx配置文件—nginx.conf

    (7)重新加载nginx配置文(>sudo /usr/local/nginx/sbin/nginx -s reload)

    (8)使用之前demo的(echo.c),已拷贝至根目录,编译echo.c(>gcc echo.c -lfcgi -o demo),然后运行>./demo;

    如果无法运行,>ldd demo查看是否缺动态库,如果缺,按照上文的方法处理:

    (9)启动fcgi程序(>spawn-fcgi -a 127.0.0.1 -p 8002 -f ./test),显示successfully和PID代表启动成功。

    注意:启动之前,要查看端口是否被占用(fcgi.sh脚本中先ps aux | grep xxx 查看,然后kill -9 PID)

    (10)切换到wind下刚才打开的浏览器的网页,刷新,然后“点击选择文件”,选择上传的图片,然后点击“开始上传”:

    (11)由页面的数据分析:在PNG到第二个分界线中间为图片的数据,需要把这部分内容保存到文件中,然后把这部分内容上传到fastDFS(待处理)。

    在学习云盘项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

  • 相关阅读:
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays(topK-logk)
    apache开源项目--Derby
    apache开源项目--Apache Drill
    apache开源项目-- OODT
    apache开源项目--Mavibot
    apache开源项目--ApacheDS
    apache开源项目--TIKA
    apache开源项目--Mahout
    apache开源项目--Jackrabbit
  • 原文地址:https://www.cnblogs.com/Alliswell-WP/p/CPlusPlus_CloudDisk_Project04.html
Copyright © 2011-2022 走看看