nginx的fastcgi配置
阅读原文时间:2023年07月08日阅读:2

首先参考了一份配置注释(来自“小刚的博客”):

#运行用户
user www-data;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;

#全局错误日志及PID文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

#工作模式及连接数上限
events {
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024;#单个后台worker process进程的最大并发链接数
# multi_accept on;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,  
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.  
sendfile        on;  
#tcp\_nopush     on;

#连接超时时间  
#keepalive\_timeout  0;  
keepalive\_timeout  65;  
tcp\_nodelay        on;

#开启gzip压缩  
gzip  on;  
gzip\_disable "MSIE \[1-6\]\\.(?!.\*SV1)";

#设定请求缓冲  
client\_header\_buffer\_size    1k;  
large\_client\_header\_buffers  4 4k;

include /etc/nginx/conf.d/\*.conf;  
include /etc/nginx/sites-enabled/\*;

#设定负载均衡的服务器列表  
 upstream mysvr {  
#weigth参数表示权值,权值越高被分配到的几率越大  
#本机上的Squid开启3128端口  
server 192.168.8.1:3128 weight=5;  
server 192.168.8.2:80  weight=1;  
server 192.168.8.3:80  weight=6;  
}

server {
#侦听80端口
listen 80;
#定义使用www.xx.com访问
server_name www.xx.com;

    #设定本虚拟主机的访问日志  
    access\_log  logs/www.xx.com.access.log  main;

#默认请求  
location / {  
      root   /root;      #定义服务器的默认网站根目录位置  
      index index.php index.html index.htm;   #定义首页索引文件的名称

      fastcgi\_pass  www.xx.com;  
     fastcgi\_param  SCRIPT\_FILENAME  $document\_root/$fastcgi\_script\_name;  
      include /etc/nginx/fastcgi\_params;  
    }

# 定义错误提示页面  
error\_page   500 502 503 504 /50x.html;  
    location = /50x.html {  
    root   /root;  
}

#静态文件,nginx自己处理  
location ~ ^/(images|javascript|js|css|flash|media|static)/ {  
    root /var/www/virtual/htdocs;  
    #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。  
    expires 30d;  
}  

#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置. location ~ \.php$ { #以php结尾的都由下面来设定。 root /root;          #根文件 fastcgi_pass 127.0.0.1:9000;  #转向的端口,比如php-fpm监听在本地9000端口 fastcgi_index index.php;    #默认index fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;    #请求的资源路径 include fastcgi_params; #引入fastcgi_params文件的各种参数 }
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}

 }  

}

我们关注与php的交互fastcgi这一块,在上面的配置里标红加粗的部分,并在尾部分别进行了注解。fastcgi_params如下:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径
fastcgi_param QUERY_STRING $query_string; #请求的参数;如?app=123
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; #脚本名称(如:index.php)
fastcgi_param REQUEST_URI $request_uri; #请求的地址不带参数
fastcgi_param DOCUMENT_URI $document_uri; #与$uri相同。
fastcgi_param DOCUMENT_ROOT $document_root; #网站的根目录。在server{}配置中root指令中指定的值
fastcgi_param SERVER_PROTOCOL $server_protocol; #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

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; #服务器名,域名在server{}配置中指定的server_name

#fastcgi_param PATH_INFO $path_info;#可自定义变量

PHP only, required if PHP was built with --enable-force-cgi-redirect

#fastcgi_param REDIRECT_STATUS 200;

在php可打印出上面的服务环境变量
如:echo $_SERVER['REMOTE_ADDR']

上面文件中间一列的大写字母其实是通过fastcgi向php传递的参数,而后面的以$打头的变量则是nginx提供的全局变量,包括了其从http包中获得的各种信息。参考。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章