nginx配置文件:一般默认在nginx安装目录下的conf/nginx.conf
conf文件一般分为以下几个模块:
1. 全局 块
2. events 块
3. http 块
4. server 块
5. location 块
error_page命令用法: error_page code [=[response]] uri
code是http响应码,比如404,500等;response是将code转化为指定的码返回给请求方;uri可以是路径(以nginx安装路径下的html目录为根路径的相对路径),或者网址。
比如 error_page 404 =499 /404.html
表示404错误码时,返回给客户端499的错误码,并且读取 html/404.html 文件。
如果错误页不想是在html目录为跟路径的相对路径,可以在location模块做一层映射:比如文件放在/data/www/404.html
error_page 404 /404.html; location = /404.html { root /data/www/; }
改了conf,重启服务后,发现访问返回404错误页成功。但是如果访问php脚本,并没有跳到想要的404错误页。
这里需要配置一个选项,fastcgi_intercept_errors on;(在server或者location模块中写都可以。)
----
配置location块 重要
语法结构:location [ = | ~ | ~* | ^~ ] uri {...}
其中uri是可以包含正则表达式的字符串。
几个可选项的说明如下:
= : 请求字符串与uri 严格匹配,uri不能含有正则。如果匹配成功,直接处理,不再想下查找匹配了。
~ : 用于表示uri包含正则,并且区分大小写
~* : 用于表示uri包含正则,并且不区分大小写
^~ : uri不能含有正则,找到和请求字符串匹配度最高的location,直接使用,不再使用其他location块中的正则uri和请求串匹配。
显然,请求的字符串和location块中的uri,很可能是1对多的,nginx是怎么取舍的,什么优先级呢。简单说下:
没有可选项时,nginx服务器首先在server块的多个location块中搜索是否有普通的uri(无正则)和请求串匹配,如果有多个能匹配,就记录匹配度最高的一个。
然后,再去搜索正则的uri和请求串进行匹配,如果找到第一个正则uri匹配成功,则选取该location,停止匹配,如果没有正则uri匹配上,则选取之前普通uri匹配度最高的那个。
-----------
基于IP配置nginx的访问权限
两个指令
1. allow
2. deny
语法结构: allow address | CIDR | all ;
address : 表示IP地址;
CIDR : 表示前32位是IP地址,后边表示前多少位是网络部分,区分网络号和主机号。比如192.168.1.1/24
all : 表示全部允许或者拒绝。
注意优先级:nginx配置再解析的过程中,遇到allow或者deny是按照顺序进行检查的。如果遇到匹配的配置,就停止继续向下搜索了。
一个例子:IP 192.168.1.2 是允许访问的。匹配到中间的allow,就OK了,不向下走。
location / { deny 192.168.1.1; allow 192.168.1.0/24; deny all; }
-----------