Nginx核心技术笔记(一) 初识nginx
文章目录
1.Nginx的优点
- 高并发,高性能(高吞吐量):对硬件及操作系统的深度挖掘。
- 可扩展性好:生态圈丰富,大量第三方模块。
- 高可靠性:持续不间断运行数年
- 热部署:不停止服务的情况下升级nginx
- BSD许可证:赋予最大灵活性,不止是开源免费,还可以通过自己需求修改源码。
2.主要应用场景
-
静态资源服务:
通过本地文件系统提供服务。
原因: 静态资源由nginx提供访问即可,加速用户访问。
-
反向代理服务:
- Nginx的强大性能
- 缓存
- 负载均衡
原因:
- 应用服务,要求开发效率高,导致运行效率低。qps,tps或者并发都是受限的。所以需要把很多这样的应用服务组成一个集群,向用户提供高可用性,而一旦很多应用服务组成集群,我们需要nginx具有反向代理功能。可以把动态请求传导给用户。
- 而很多应用服务构成集群又会带来两个需求:
- 动态扩容
- 有些服务出问题的时候需要做容灾
因此反向代理需要负载均衡功能。
- nginx处于内网边缘结点,随着链路增加导致用户访问时延增加,体验差,可以把一段时间不变的或者用户看起来不变的内容用nginx缓存这样时延会减少很多。因此反向代理衍生出另外一种功能:缓存。
-
API服务:
OpenResty
由nginx直接访问数据库,利用其强大并发性能实现web防火墙的业务功能,这要求api有强大的业务处理功能,利用OpenResty或js等工具库提供完整api。
3. Nginx出现的原因
当cpu单核摩尔定律未失效时,通过改变硬件,程序性能提升明显,但当单核摩尔定律逐渐向多核发展时,通过改变硬件,程序的性能提升倒不是很明显。这是因为操作系统和大量软件没有做好应对多核架构的准备,比如apache服务器。
nginx可以处理上百万,上千万的并发连接。一般新增的服务器都是使用nginx。
4. Nginx的组成
- Nginx二进制可执行文件
- Nginx.conf配置文件
- access.log访问日志
- error.log错误日志
5.编译属于自己的Nginx
原因:根据自己需求添加模块
源码目录:
- auto:主要是辅助conf文件对操作系统进行判断,以提供合适的服务。
- CHANGES:版本变化说明
- conf:示例文件,安装好nginx后,方便运维配置,把conf目录的示例文件拷贝到安装目录。
- configure脚本:生成中间文件,执行编译前的必备动作。
- contrib:提供脚本和vim语法文件,把vim文件拷贝到自己的vim文件夹后,vim会有语法显示。
- html:提供50x.html和index.html。
- man:帮助文件
- src:源代码
编译参数(还有其他的)
-with-系列指默认不会编译进去
-without系列指默认会编译进去
编译
- ./configure --prefix=+目录
如果无报错则编译成功,所有目录会被列出来,生成一些中间文件,中间文件在objs文件夹。
- 在nginx根目录执行make编译,如无错误则生成大量中间文件。生成运行时的二进制文件,在objs文件夹(做版本升级时,编译后从这里把二进制文件拷贝到安装文件中即可)
- make install(首次安装时使用),安装后在指定目录里面会生成一个nginx文件夹。
更新
- 更新nginx文件二进制文件时,先把旧文件cp为nginx.old文件再更新nginx文件。
- 然后使用kill -USR2 +进程号 ,生成新的worker,服务平滑过渡到新worker。
- kill -WINCH +进程号 优雅关闭旧服务的所有进程,但旧服务还在,方便版本回退。
安装后目录
- sbin有运行的二进制文件
- 配置文件在conf
- 日志再logs目录
6. 主要语法规则
- 配置文件由指令与指令块(有些有名字有些没有)构成
- 每条指令以;分号结尾,指令与参数间以空格符号分割
- 指令块以{}大括号讲多条指令组织在一起
- include语句允许组合多个配置文件以提升可维护性
- 使用#符号添加注释,提高可读性
- 使用$符号使用变量
- 部分指令的参数支持正则表达式
http指令块
- http:里面所有指令都是由http模块去进行解析执行的。
- upstream:上游服务,需要与tomcat等企业内务服务交互时定义。
- server:域名或一组域名
- location:url表达式
7. Nginx命令行
- 格式:nginx -s reload
- 帮助: -? -h
- 使用指定的配置文件: -c
- 指定配置指令:-g
- 指定运行目录:-p
- 发送信号:-s
- 立刻停止服务:stop
- 优雅的停止服务:quit
- 重载配置文件:reload
- 重新开始记录日志文件:reopen
- 测试配置文件是否有语法错误: -t -T
- 打印nginx的版本信息,编译信息等: -v -V
8. 搭建静态资源
步骤:
- vim nginx.conf
- listen:监听8080端口,访问服务器8080端口时监听。
- location / :任何url都跳转到本地资源。
- alias: 本地web静态资源文件根目录。里面文件的访问与根目录一一对应。
- 重启即可
注意:
- 通常要打开gzip,压缩传输的静态资源文件。
2. autoindex开启后显示静态资源文件所有的目录,可以共享静态资源。
-
set limit_rate 1k(每秒最多传输1k字节) ,限制发送响应的速度。
-
日志设置(格式设置参考文档)
9. 搭建反向代理
先把要代理的服务器配置成只有内网可以访问。
- vim conf
配置上游服务,可以配置多台服务器,然后用hash或其他算法选择一台服务器。
- 配置反向代理
- proxy_set_header:添加代理服务器的头信息(浏览器地址等),供上游服务器识别。
- proxy_cache:缓存上游服务器的内容。
10. GoAccess实现可视化并实时监控
access日志记录nginx相关信息,但实时分析access log相对比较困难,GoAccess为一款以图形化方式通过websocket协议实时把log反应到浏览器的工具。
显示效果:
启动:
设置nginx重定向:
11. SSL协议
公钥加密只有私钥能解密,私钥加密只有公钥能解密。
相关内容
https原理:https://blog.****.net/weixin_43958969/article/details/90344581
CA公信机构
- 证书订阅人通过向登记机构登记申请,登记机构通过CSR向CA申请。
- 申请通过后CA颁发一对公钥和私钥。
- 获取公钥和私钥后订阅人把证书部署到web服务器上。
- 浏览器请求证书时,web服务器会把公钥发送给浏览器。
- 浏览器通过CRL或者OCSP验证公钥是否有效。
证书类型
- DV:只验证域名的归属是否正确,域名指向的服务器是正在申请的服务器就能成功申请证书,若使用其他证书则会验证申请邮箱。(很多都是免费,验证实时)
- OV:验证企业或者机构是否正确。
- EV:验证更加严格。
证书链
-
组成结构:根证书,二级证书,主证书。
-
根证书验证严格,浏览器除了验证是否过期最主要是验证根证书是否有效。
12 .TLS通讯过程
主要做的事:
- 交换**
- 加密数据
13 . SSL协议握手时Nginx的性能
性能主要看椭圆加密算法和对称加密算法的影响。
- 对于小文件,握手是主要影响其qps性能的指标。
- 对于大文件,考虑对称加密算法的性能,使用AES算法的性能比较好
- 以小文件为主时主要考虑非对称加密性能。小文件比较多时主要优化椭圆曲线算法的强度。
- 以大文件为主时主要考虑对称加密算法性能。大文件比较多时,主要考虑AES算法是否能被替换,或者调整强度。
14. HTTPS网站部署
步骤+
-
安装工具
-
输入命令,自动修改配置文件,以及指定申请证书的域名。
-
选择是否重定向(不安全流量重定向到https站点)