nginx配置文件介绍

10 篇文章 0 订阅
1 篇文章 0 订阅
server {

    listen       80;    

    server_name  local.api.baidu.com;

    access_log   /logs/local-api.baidu.com/access.log  main;
    error_log    /logs/local-api.baidu.com/error.log  ;

    root   "/data/www/api.baidu.com/init/";
    
    index index.html index.php;

     
    location / {
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php/$1 last;
        }
    }
    
    location ~ \.php(.*)$ {
        fastcgi_pass   127.0.0.1:9003;
        fastcgi_index  index.php;
        fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }
}

这是一个常规的nginx的配置文件这里重点解说一下里面的关键词

listen:监听的端口 这里配置的是80,如果是https的请修改为443

server_name :访问的域名(正式环境写公网可以访问的域名,本地或者测试环境随便写)

access_log:记录nginx访问的日志地址,一般只能记录get请求的日志

error_log :顾名思义,错误日志文件地址

root:项目的地址

index:默认加载的文件名称

location:根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

具体的语法描述:

  location  [ = | ~ | ~* | ^~ ]     uri          { .... }
# | 指令    |     匹配标识      | 匹配的网站网址    |匹配URI之后要执行的配置段|

其中"="的优先级为最高,为精确匹配;特殊字符"~"和"~*"的区别在于前者区分大小写,后者不区分大小写。还可以用逻辑操作符"!"来取反匹配;"^~"的意思是匹配之后不做正则表达式的检查,就是不用匹配类似于"\.(gif|jpg|jpeg)$"的正则表达式了,也就是说"^~"后面跟了正则表达式也没有用的。

fastcgi_pass :指定FastCGI服务器监听端口与地址

                        配置方式1:fastcgi_pass 127.0.0.1:9003;

                        配置方式2:unix:/tmp/fastcgi.socket;

fastcgi_index  index.php; 如果请求的Fastcgi_index URI是以 / 结束的, 该指令设置的文件会被附加到URI的后面并保存在变量$fastcig_script_name中

fastcgi_split_path_info ^(.+\.php)(/.*)$;

fastcgi_param  PATH_INFO  $fastcgi_path_info;

这两句是什么意思呢?

nginx默认获取不到PATH_INFO的值,得通过fastcgi_split_path_info指定定义的正则表达式来获取值

^(.+\.php)(/.*)$; 这个正则表达是有两个小括号 , 也就是有两个捕获

第二个捕获到的值会自动重新赋值给$fastcgi_path_info变量。

第一个捕获的值会重新赋值给$fastcgi_script_name变量。

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

$document_root 和 $fastcgi_script_name 之间没有 /。原本Nginx只有「fastcgi_params」,后来发现很多人在定义「SCRIPT_FILENAME」时使用了硬编码的方式,于是为了规范用法便引入了「fastcgi.conf」。
这样就产生一个新的疑问:为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?因为「fastcgi_param」指令是数组型的,和普通指令相同的是:内层替换外层;和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。
如果在同级定义两次「SCRIPT_FILENAME」,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。

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; #脚本名称   
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  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值