nginx配置详解
一、配置访问xxx.php文件的支持
此时的nginx程序是一个服务器端的代理服务器,nginx接收到客户端xxx.php文件的请求,将这个请求交给本机9000端口的php-fpm程序处理,php-fpm程序以html格式将
处理结果返回个nginx
location ~ \.php$ {
root html; #站点根目录
fastcgi_pass 127.0.0.1:9000; #cgi程序的端口
fastcgi_index index.php; #主页文件名
include fastcgi.conf; #引入配置文件
}
二、nginx路由设置(location段)
(1) 语法:location [ = | ~ | ~* | ^~ | ] uri { ... } 或location @name {...}
(2)匹配的类型
注:uri: 要匹配的字符串 eg: /index.php /add/ /delete 。uri前面的符号代表匹配类型(uri与符号间带空格)
= :对URI做精确匹配,请求的URI和patt一模一样
^~:最长前缀匹配,不区分字符大小写,不作正则匹配
~ :对URI做正则表达式模式匹配,区分字符大小写
~*:对URI做正则表达式模式匹配,不区分字符大小写
!~: 符合正则不匹配,不符合匹配,区分字符大小写
!~*: 符合正则不匹配,不符合匹配,不区分字符大小写
不带符号:普通匹配
匹配优先级从高到低:=, ^~, ~/~*, 不带符号
location命中过程:
1.先进性精准匹配,如果命中立即返回结果并结束解析;
2.精准匹配未命中判断普通匹配,如果命中多个会记录下"最长的"命中结果,但不会结束解析;
3.继续判断正则匹配,按照正则匹配设置的规则正则表达式进行匹配,如果有多个正则匹配由上到下进行匹配,一旦匹配成功一个会立即返回结果并结束解析
(3)设置访问权限
deny all;
return 403;
allow ipaddr; #允许该IP访问
(4)关闭访问日志(减轻负担)
access_log off;
(4)设置响应内容在浏览器的属性
expires 30d; 有效期30天 s h
三、虚拟主机配置(server段)
1.端口监听
2.虚拟主机域名
3.路由(location段)
4.条件判断( if(){..} )
-f,!-f #判断是否存在文件
-d,!-d #是否存在目录
-e, !-e #是否存在文件或目录
-x , !-x #是否是可执行文件
eg:if( !-e $requesr_filename){ #如果请求的资源不是一个文件或目录,
rewrite ^/(.*)$ index.php last;
}
四、nginx重写(server,location ,if)
(1)重写相关指令
1. last #会重新对server发起请求,再匹配
2. break #终止匹配
3. redirect #临时重定向302,浏览器会先到这里再跳转到重定向位置
4. permannent #永久重定向301,浏览器再访问该资源时,直接到重定向位置
5. if #条件符合,执行大括号内语句(只能进行简单的是否判断)
6. return #结束路由匹配,返回状态码给客户端。returm 200
7. rewrite #将请求的资源路径重写为其它路径,再进行路由匹配
rewrite ^/(.*)$ index.php last;
例:请求资源路径 12345/add 改写为 add?id=12345
rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
8. set #定义一个变量并赋值 set $host 'www';
9. proxy_pass ipaddr;
(2)重写应用场景
1. 隐藏入口文件,部署TP
2. 防盗链
3. 将多级目录下的文件转成一个文件,增强seo
4. 域名跳转
二、日志设置