nginx配置文件介绍
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