2025年6月8日 星期日 乙巳(蛇)年 三月十二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 服务器 > Nginx

nginx的fastcig代理

时间:11-20来源:作者:点击数:21
CDSY,CDSY.XYZ

实现fastcgi代理

CGI的由来:

最早的Web服务器只能简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html文件,但是后期随着网站功能增多网站开发也越来越复杂,以至于出现动态技术,比如像php(1995年)、java(1995)、python(1991)语言开发的网站,但是nginx/apache服务器并不能直接运行php、java这样的文件,apache实现的方式是打补丁,但是nginx缺通过与第三方基于协议实现,即通过某种特定协议将客户端请求转发给第三方服务处理,第三方服务器会新建新的进程处理用户的请求,处理完成后返回数据给Nginx并回收进程,最后nginx在返回给客户端,那这个约定就是通用网关接口(common gateway interface,简称CGI),CGI(协议) 是web服务器和外部应用程序之间的接口标准,是cgi程序和web服务器之间传递信息的标准化接口

为什么会有FastCGI:

CGI协议虽然解决了语言解析器和 Web Server 之间通讯的问题,但是它的效率很低,因为 Web Server每收到一个请求都会创建一个CGI进程,PHP解析器都会解析php.ini文件,初始化环境,请求结束的时候再关闭进程,对于每一个创建的CGI进程都会执行这些操作,所以效率很低,而FastCGI是用来提高CGI性能的,FastCGI每次处理完请求之后不会关闭掉进程,而是保留这个进程,使这个进程可以处理多个请求。这样的话每个请求都不用再重新创建一个进程了,大大提升了处理效率

FastCGI配置指令:

基于模块ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端请求转发至php-fpm处理

  • fastcgi_pass ip:port; fastcgi服务器的地址,写在location、if
  • fastcgi_index name; fastcgi默认的主页资源定义
  • 例:
  • fastcgi_index index.php;
  • fastcgi_param 变量名 值 [if_not_empty]; 将nginx内置变量传递给fastcgi服务器,变量名自定义,值可以是文本、变量、组合。默认有变量存放文件:fastcgi_params
  • 1
  • fastcgi_param REMOTE_ADDR $remote_addr; 客户端ip
  • fastcgi_param REMOTE_PORT $remote_port; 客户端port
  • fastcgi_param SERVER_ADDR $server_addr; 请求的服务器ip
  • fastcgi_param SERVER_PORT $server_port; 请求的服务器port
  • fastcgi_param SERVER_NAME $server_name; 请求的服务器名
  • 2: 定义请求php文件时,默认的访问路径
  • 方法1
  • location ~* \.php {
  • root /opt/php;
  • fastcgi_pass 127.0.0.1:9000;
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  • include fastcgi_params;
  • }
  • 方法2
  • location ~* \.php {
  • fastcgi_pass 127.0.0.1:9000;
  • fastcgi_param SCRIPT_FILENAME /opt/php$fastcgi_script_name;
  • include fastcgi_params;
  • }
  • include fastcgi_param; 导入所有的默认CGI变量
  • fastcgi_cache_path 路径 [选项]; 定义fastcgi的缓存,与代理缓存一样
  • 注意: 使用fastcgi缓存, 可能会导致源代码更新失败,生产慎用
  • 选项:
  • path 缓存文件存放位置
  • max_size=1g 磁盘上缓存空间上限
  • levels=1:2:2 缓存目录层级数量
  • keys_zone=name:size 内存中缓存空间大小
  • inactive=time 缓存有效期,默认10m,指定时间满足fastcgi_cache_min_uses次数被视为有效缓存
  • fastcgi_cache zone|off; 使用哪个缓存
  • fastcgi_cache_key $request_uri; 缓存哪些内容。如:请求的uri
  • fastcgi_cache_methods GET |HEAD |POST ..; 缓存请求的方法
  • fastcgi_cache_min_uses int; 缓存命中次数,在inactive时间内满足被视为有效缓存
  • fastcgi_cache_valid any 10m; 响应码内容缓存
  • fastcgi_keep_conn on; 收到后端服务器响应后,nginx服务器是否关闭连接,建议启用长连接
  • fastcgi_hide_header field; 隐藏响应头指定信息
  • fastcgi_pass_header 字段; 返回响应头指定信息,默认禁止status、X-Accel-...等
  • fastcgi_ignore_headers 字段 #忽略ngx发给cgi的请求头

例1:nginx+php-fpm搭建

1)安装、配置php-fpm,可能需要编译安装php-fpm

rhel8的php-fpm用yum安装有问题,不能正确启动cgi接口,建议编译安装php-fpm

如果不想编译安装,也有运行办法:

/opt/php/sbin/php-fpm -c php.ini

php参数说明:

  • session.save_handler = redis //默认是files,可将session存入redis
  • session.save_path = "tcp://localhost:6389" ,redis时写地址,文件时写路径
    session.save_path = "tcp://localhost:6389?auth=password" 当redis有密码时这样写
  • yum install -y php-fpm php-mysqlnd php-json
  • vim /etc/php-fpm.d/www.conf
  • [www]
  • user=nginx
  • group=nginx
  • listen=9000
  • pm.status_path = /php_status
  • ping.path = /ping
  • ping.response = ping-pong
  • slowlog = /var/log/php-fpm/www-slow.log
  • php_admin_value[error_log] = /var/log/php-fpm/www-error.log
  • php_admin_flag[log_errors] = on
  • php_value[session.save_handler] = files php的session保存方式
  • php_value[session.save_path] = /var/lib/php/session 当时使用file保存session的文件路径
  • php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
  • systemctl restart php-fpm
2)改nginx配置
  • location ~* \.php {
  • root /opt/web/php;
  • fastcgi_pass 127.0.0.1:9000;
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  • include fastcgi_params;
  • fastcgi_hide_header X-Powered-By; #隐藏响应报文敏感信息
  • }
3)测试
  • mkdir /opt/web/php/
  • echo '<?php phpinfo(); ?>' >> /opt/web/php/info.php
  • curl -I 2.2.2.12/info.php
image

例2: 实现动静分离

  • httP {
  • upstream static {
  • server 1.1.1.10;
  • server 1.1.1.20;
  • }
  • upstream dynamic {
  • server 2.2.2.10:9000 weight=1 max_fails=3 fail_timeout=30s;
  • server 2.2.2.20:9000 weight=2 max_fails=3 fail_timeout=30s;
  • }
  • server {
  • listen 81;
  • location / {
  • proxy_pass static;
  • }
  • location ~* \.php {
  • fastcgi_pass dynamic;
  • fastcgi_hide_header X-Powered-By;
  • }
  • }
  • }
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐