模块:Module ngx_http_core_module
访问一个不存在的页面
模块:Core functionality
error_log logs/error.log error;
模块:https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
try_files 会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误
长连接:keepalive
模块:https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests
限制了一个长连接上可以处理的请求数量 或 在一次长连接上所允许请求的资源的最大数量,默认为1000次
模块:https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_time
限制对一个连接中请求处理的最长时间,到时间后续的再有新的请求会断开连接,默认1h
模块:https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout
设置保持空闲的连接超时时长,0表示禁止长连接,默认为75s;通常配置在http块作为站点全局配置
模块:https://nginx.org/en/docs/http/ngx_http_autoindex_module.html
处理以斜杠字符 “/” 结尾的请求,并生成目录列表,可以做为下载服务配置使用。
自动文件索引功能,默认off
计算文件大小,默认on;on为精确显示,单位bytes,off为估计大小,单位K,M
索引界面显示风格,默认html
on显示本机时间,而非GMT格林威治时间,默认off
相关参数
模块:http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
模块:http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size
模块:http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_temp_path
限制某个用户在一定时间内能产生的http请求或限制某个用户的下载速度,防止个别用户对资源消耗过多,导致其它用户受影响。
启用限速后,如果超过指定的阈值,则默认提示503过载保护
限制用户下载资源的速度
模块:http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate
模块:http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate_after
限制同一个IP发起的请求频率
模块:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
当快速刷新www.wenzi.com时,会报错503
限制同一个IP的同时发起的最大并发连接数
模块:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
- 当下载超过100M则限制下载速度为500k
- 限制web服务器请求数处理为1秒一个,触发值为5、限制用户仅可同时下载2个文件。
- 如果同时下载超过2个资源,则返回提示 “请联系管理员进行会员充值” 并跳转到其他页面
favicon.ico 文件是浏览器收藏网址时显示的图标,当客户端使用浏览器问页面时,浏览器会自己主动发起请求获取页面的favicon.ico文件,但是当浏览器请求的favicon.ico文件不存在时,服务器会记录404日志,而且浏览器也会显示404报错
此功能依靠PCRE,编译之前要安装PCRE库;
可实现常用网站的URL重写,但客户端无需修改书签、链接,仍可正常访问;
隐藏源网站链接信息,实现跳转,提高安全;
URL伪静态化,将动态页面显示为静态页面的一种技术;
用于条件匹配判断,根据判断结果选择不同的nginx配置;
仅支持单次判断,不支持if else 或 if elif 多重判断
变量与表达式之间符号
使用正则表达式对变量进行匹配,匹配成功true,匹配失败为false;
若 $变量 的值为空字符串或0,则if认为条件判断结果为false,其它情况为true;
指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key。
value可以是text + variable 两者结合
中断当前相同作用域(location)中的其它nginx配置,与break处于同一作用域的nginx配置中,位于break前面的配置生效,位于后面的 ngx_http_rewrite_module 模块中的指令将不再执行;
nginx服务器根据配置处理请求过程中遇到break时,回到上一层作用域继续向下读取配置;
如果break指令在location块中,break后面的指令还会继续执行,只是不执行 ngx_http_rewrite_module 模块的指令,其它指令还会执行
return用于完成对请求的处理,并直接向客户端返回响应状态码。
可使用 301/302 + 新URL 实现重定向;403/500等 + 提示文本 实现指定提示文本内容
处于此指令后的所有配置都不被执行
rewrite将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为表达式指定的新的URI
如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制
如果替换后的URL是以http://或https://开头,则替换结果会直接以重定向返回给客户端, 即永久重定向301
分组机制(.*)只会捕获URI
- :一个正则表达式,用于匹配请求的 URI。
- :一个字符串,用于替换匹配到的 URI。可以使用正则表达式捕获的子模式(通过 , 等引用)。
- :可选的标志,控制重写的行为。常见的标志有:
- :如果重写后的 URI 仍然匹配当前 块,Nginx 将继续搜索 块并再次重写。不建议在location中使用。
- :停止重写过程,不再搜索其他 规则。建议在location中使用。
- :返回一个临时的重定向(HTTP 302)响应。
- :返回一个永久的重定向(HTTP 301)响应。
正则表达式格式
flag
测试
永久与临时重定向
客户端无需改变保存的旧链接,可实现访问旧链接跳转到新的地址。
都会导致客户端重新发起请求,客户端可以看到链接地址会发生变化。
301 永久重定向
域名永久型调整,即域名永远跳转至另外一个新的域名,之前的域名再也不使用,跳转记录可以缓存到客户端浏览器。
永久重定向会缓存DNS解析记录,浏览器控制台-网络-可看到from disk cache,即使nginx无法访问,浏览器也会利用缓存进行重定向。
浏览器访问 http://www.wenzi.com/1.html 时会自动跳转到 http://www.wenzi.com/2.html,浏览器地址栏可看到地址变化为 http://www.wenzi.com/2.html 。当再次访问 http://www.wenzi.com/1.html 时,通过控制台可看到下图
302 临时重定向
域名临时重定向,告诉浏览器域名不是固定重定向到当前目标域名,后期可能随时会更改,因此浏览器不会缓存当前域名的解析记录。
当nginx服务器无法访问时,浏览器不能利用缓存,而导致重定向失败
浏览器访问 http://www.wenzi.com/1.html 时会自动跳转到 http://www.wenzi.com/2.html,浏览器地址栏可看到地址变化为 http://www.wenzi.com/2.html 。当再次访问 http://www.wenzi.com/1.html 时,通过控制台可看到下图
对比
最大区别:301 永久重定向,浏览器会永久缓存重定向的DNS解析记录,而301 临时重定向,浏览器不会缓存重定向的DNS解析记录。
redirect:302,旧网站无影响,新网站会有排名,跳转不会缓存
permanent:301,旧网站排名会被清空,新跳转网站继承原网站排名,跳转会缓存,主要用于旧域名废弃和新域名启用时使用。
Web网站的登录页面通常都会使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取。
https 由 http + ssl/tls 构成。在http上又加了一层处理加密信息的模块,传输的信息都是经过tls加密后的信息。
1、客户端发起HTTPS请求
用户在浏览器里输入一个https网址,然后连接到服务器的443端口
2、服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥
3、传送服务器的证书给客户端
证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等
4、客户端解析验证服务器证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等 等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一 个随机值。然后用证书中公钥对该随机值进行非对称加密
5、客户端将加密信息传送服务器
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端 的通信就可以通过这个随机值来进行加密解密了
6、服务端解密信息
服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值
7、服务器加密信息并发送信息
服务器将数据利用随机值进行对称加密,再发送给客户端
8、客户端接收并解密信息
客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容
模块:Module ngx_http_ssl_module
yum安装默认开启;编译安装需要指定编译参数 --with-http-ssl-module开启
测试通过浏览器访问 https://www.wenzi.com ,因为是自签名,所以不被浏览器识别。点击高级,继续访问即可正常访问
点击左上方 不安全—证书无效,即可看到证书信息