Nginx之6大千世界 - (FastCGI)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Nginx从入门到深入之FastCGI

为什么要使用FastCGI

在之前已经介绍Nginx只是一个静态应用服务器,并不能直接执行外部的动态脚本程序,但是Nginx可以作为代理服务器,将动态的请求转发给后端服务处理。Nginx中的模块"ngx_http_fastcgi_module"专门为了解决此类问题。

FastCGI工作原理

Nginx因为不支持对外部程序的直接调用或者解析,所以所有的外部程序必须通过FastCGI接口来调用(如下图所示),还需要使用封装器(wapper)对FastCGI的Nginx请求理解成Application所成识别的形式进行传递,封装器的线程对请求完成后在通过FastCGI传回给Nginx。
1

功能配置

使用Nginx去监听用户请求,如果请求的是php页面,则代理至后端PHP的脚本解析服务器。

1.启动php脚本解析服务,确认9000端口已监听中
2

2.修改Nginx的配置文件,将php页面请求转发至脚本解析服务

    server {
        listen 80;
        server_name nginx.yekangming.com;

        location / {
            root /data/webroot/nginx;
            index index.html;
        }

        location ~ \.php$ {
            root /data/webroot/nginx;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }

3.FastCGI配置详解(conf/fastcgi.conf)

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;#脚本文件 请求的路径
fastcgi_param  QUERY_STRING       $query_string; #请求的参数
fastcgi_param  REQUEST_METHOD     $request_method; #请求的动作(GET,POST)
fastcgi_param  CONTENT_TYPE       $content_type; #请求头中的Content-Type字段
fastcgi_param  CONTENT_LENGTH     $content_length; #请求头中的Content-length字段

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; #脚本名称
fastcgi_param  REQUEST_URI        $request_uri; #请求的地址不带参数
fastcgi_param  DOCUMENT_URI       $document_uri; #与$uri相同
fastcgi_param  DOCUMENT_ROOT      $document_root; #网站的根目录
fastcgi_param  SERVER_PROTOCOL    $server_protocol; #请求使用的协议
fastcgi_param  REQUEST_SCHEME     $scheme; #请求协议
fastcgi_param  HTTPS              $https if_not_empty; # 有https协议时自动使用https

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;#cgi 版本
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version; #nginx版本号

fastcgi_param  REMOTE_ADDR        $remote_addr; #客户端IP
fastcgi_param  REMOTE_PORT        $remote_port; #客户端端口
fastcgi_param  SERVER_ADDR        $server_addr; #服务器IP地址
fastcgi_param  SERVER_PORT        $server_port; #服务器端口
fastcgi_param  SERVER_NAME        $server_name; #服务器名

fastcgi_param  REDIRECT_STATUS    200;    重定向状态码

访问效果
3
4

小知识

在真实的场景中,我们一般会使用Nginx来处理静态资源请求,如果对于动态资源请求,我们将会采用反向代理、FastCGI等方式和后端的应用服务器进行交互。

目录
相关文章
|
应用服务中间件 PHP Apache
nginx、fastcgi、php-fpm
什么是fastcgi? fastCGI是由CGI(common gateway interface,通用网关接口)发展而来,是http服务器(nginx、apache)和动态脚本语言(php)之间的通信接口。记住,fastCGI只是一个接口。
|
网络协议 Unix 应用服务中间件
nginx和fastcgi的两种通信方式
nginx和fastcgi的两种通信方式
226 0
|
负载均衡 Java 应用服务中间件
[CGI,Nginx,FastCGI,编程语言,服务器端]FastCGI在PHP与Nginx之间的作用介绍
  一:什么是 CGI?   服务器端编程语言如(如php/java)与Web服务器之间传递信息的协议,约定了http头、表单等信息的传递接口;   二:FastCGI 是什么?
140 0
|
缓存 应用服务中间件 PHP
nginx的fastcgi模块配置与php-fpm配置记录
nginx的fastcgi模块配置与php-fpm配置记录
3581 0
nginx的fastcgi模块配置与php-fpm配置记录
|
Web App开发 关系型数据库 应用服务中间件
|
Web App开发 应用服务中间件 nginx
|
Web App开发 关系型数据库 应用服务中间件
|
关系型数据库 MySQL 应用服务中间件