location =、、* 、^~等区别
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
location是Nginx对HTTP请求中的URI进行匹配处理的指令,location的语法形式如下:
location [=|~|~*|^~|@] pattern { ... }
= : 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
~ : 为区分大小写匹配(可用正则表达式)
!~ : 为区分大小写不匹配
~* : 为不区分大小写匹配(可用正则表达式)
!~* : 为不区分大小写不匹配
^~ : 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
修饰语“^~” : 完全匹配URI中除访问参数以外的内容,匹配项的内容如果不是正则表达式,则不再进 行正则表达式测试。
示例
location = / {
# 只匹配 / 查询。
}
location / {
# 匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}
location ~*.(gif|jpg|jpeg)$ {
# 匹配任何以 gif、jpg 或 jpeg 结尾的请求。
}
location ~*.(gif|jpg|swf)$ {
valid_referers none blocked start.igrow.cn sta.igrow.cn;
if ($invalid_referer) {
#防盗链
rewrite ^/ http://$host/logo.png;
}
}
location ^~ /images {
root /data/web;
}
修饰语“@”:定义一个只能内部访问的location区域,可以被其他内部跳转指令使用,如try_files或 error_page。
location @images {
proxy_pass http://images;
}
CGI(Common Gateway Interface,通用网关接口)
CGI是一种通用网关接口规范,该规范详细描述了Web服务器和请求处理程序(脚本解析器)在获取及返 回数据过程中传输数据的标准,如HTTP协议的参数名称等。大多数Web程序以脚本形式接收并处理请求,然 后返回响应数据,如脚本程序PHP、JSP、Python等。
FastCGI (Fast Common Gateway Interface,快速通用网关接口)
FastCGI是Web服务器和动态脚本程序间的一个高速、可 伸缩的接口,它采用C/S架构,将Web服务器和动态脚本解析器分离,同时启动一个或多个脚本解析器守护进 程接收Web服务器的动态脚本解析请求。当用户向Nginx服务器发起动态脚本请求时,Nginx服务器将动态脚本解析任务交由FastCGI进程来执行,并将FastCGI解析的结果返回给用户。PHP-FPM是一个被编译到PHP内 核中的FastCGI应用,因为它是作为PHP的补丁开发的,所以它在PHP脚本的解析上更加高效。
SCGI(Simple Common Gateway Interface,简单通用网关接口)
SCGI是CGI的替代版本,它与FastCGI类似,同样是将请求处理程序独立于Web服务器之外,但更容易实 现,性能比FastCGI要弱一些。
WSGI(Web Server Gateway Interface,Web服务网关接口)
WSGI是为Python语言中定义的Web服务器与Python应用程序或框架间的通用通信接口,可以使Python 应用程序或框架与支持这一协议的不同Web服务器进行通信。常见的Python Web框架都实现了该协议的封 装。
uWSGI
uWSGI是Python实现WSGI、uWSGI(uWSGI独有的协议)、HTTP等协议功能的Web服务器,Nginx 通过ngx_http_uwsgi_module模块实现与uWSGI服务器的数据交换并完成Python网站的请求处理。该模块 默认编译在Nginx二进制文件中,无须单独编译。