Nginx学习日记1
Nginx 代理与负载均衡的部署
简介
- 背景:一个具有高性能的http和反向代理的WEB服务器,同时也是一个邮件协议(pop3,smtp,imap)代理服务器,是伊戈尔.塞索耶弗使用C语言编写的开源项目
- 正向代理与反向代理:正向代理:当服务端因为某些原因拒绝客户端的访问时,客户端可以采用代理节点的方式获取服务端的数据(eg.翻墙);反向代理:服务端发送请求时,会把请求发送到Nginx代理服务器,由代理服务器经过负载均很等操作将请求分发给不同的(最优的)服务端进行响应,降低服务端的压力
- Nginx的优点:
- 速度更快,并发更高(多进程+IO多路复用)
- 配置简单,扩展性强
- 高可靠性 (Master进程 Worker进程)
- 热部署 (可以在Nginx不停止的情况下对自己升级)
- 成本低,BSD许可证
- Nginx功能与特性:
- A. 基本的HTTP服务: 反向代理,缓存加速访问,简但的负载均衡与容错,包过滤,SSL,支持HTTP2
- B. 高级的HTTP服务: 网络监控,自定义日志格式,FLV流媒体传输等
- C. 常用模块: 静态资源部署, Rewrite地址重写, 反向代理, 负载均衡,Web缓存, 环境部署。
- Nginx核心组成:
- Nginx2进制可执行文件
- Nginx.conf 配置文件
- error.log 错误日志记录
- access.log 访问记录
基础配置
安装:我使用的docker安装,映射好端口就可以用宿主机访问了。(人生苦短,环境万难,我用docker)
Nginx所在的目录: (这里懒了一下,参考https://blog.csdn.net/a419240016/article/details/117308956)
# Nginx 配置文件
/etc/nginx/nginx.conf # Nginx 主配置文件
/etc/nginx/nginx.conf.default# 可执行程序文件
/usr/bin/nginx-upgrade
/usr/sbin/nginx# Nginx 库文件
/usr/lib/systemd/system/nginx.service # 用于配置系统守护进程
/usr/lib64/nginx/modules # Nginx 模块目录# 帮助文档
/usr/share/doc/nginx-1.16.1
/usr/share/doc/nginx-1.16.1/CHANGES
/usr/share/doc/nginx-1.16.1/README
/usr/share/doc/nginx-1.16.1/README.dynamic
/usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10# 静态资源目录
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html# 存放 Nginx 日志文件
/var/log/nginx
Nginx 查看配置
root@b46986b38387:/# nginx -V
nginx version: nginx/1.21.6
built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
built with OpenSSL 1.1.1k 25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
.......
用DOCKER / yum(apt-get install) 进行安装的nginx会给你进行好一般该有的配置。但是如果你去官网使用源码安装(make && make install) 你会发现,你没有configure, OpenSSL的配置,为你的个性化配置提供了充足的空间(误)
配置信息分析:
1. PATH模块 将XX设置未某些路径
--prefix=/etc/nginx Nginx的安装目录
--sbin-path=/usr/sbin/nginx Nginx的运行(二进制文件)目录
--modules-path=/usr/lib/nginx/modules Nginx动态模块安装目录
--conf-path=/etc/nginx/nginx.conf Nginx配置文件目录
--error-log-path=/var/log/nginx/error.log !!!Nginx错误日志目录(重要)
--http-log-path=/var/log/nginx/access.log !!!访问Nginx的目录(重要)
--pid-path=/var/run/nginx.pid Nginx进程的pid,记录进程当前id号2. With模块 添加某些功能包,第三方模块的支持(后面更新)3. 其他
--user=nginx 设置Nginx的所属用户
--group=nginx 设置Nginx的所在组
Nginx的目录分析 (自动安装:/etc/nginx, 源码安装+未设置路径:/usr/local/nginx)
- 拓展CGI
root@b46986b38387:/etc/nginx# tree
.
|-- conf.d 子配置文件目录
| `-- default.conf
|-- fastcgi_params 高效率改进cgi协议
|-- mime.types 记录我们文件的MIME类型以及后缀名
|-- modules -> /usr/lib/nginx/modules
|-- nginx.conf
|-- scgi_params
`-- uwsgi_params查看MIME文件信息
root@b46986b38387:/etc/nginx# more mime.types
types {text/html html htm shtml;text/css css;text/xml xml;image/gif gif;
...............................................................
conf.d 所有的配置文件目录
CGI (Common Gateway Interface) 通用网关接口。主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用CGI程序处理响应的结果给客户端的一种标准规范。,但是效率比较低,所以有改进的fastcgi等等
Nginx服务的信号配置
Nginx高性能与其架构有关,Nginx是多进程的方式工作的:
root@b46986b38387:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:14 ? 00:00:00 nginx: master process master进程
nginx 24 1 0 15:14 ? 00:00:00 nginx: worker process worker进程
Nginx支持多worker多开的进程执行,worker进程由master进程掌控。worker进程主要用来处理和接受用户的请求,master进程负责管理所有的worker进程。
管理员通过信号来管理master进程,累出几个简单的信号命令
Signal | Effect | HowUse |
---|---|---|
TERM/INT | 立即关闭整个服务 | kill -TERM/INT (master)pid |
QUIT | 如果worker在处理请求,处理完正在处理的请求后关闭服务 | kill -QUIT pid |
HUP | 重启nginx的worker, 并使用最新配置 | kill -HUP pid |
USR1 | 重新生成日志文件(access.log, error.log)(删除后会在生成) | kill -USR1 pid |
USR2 | 实现nginx的平滑升级 | 较复杂,见下 |
WINCH | 给worker发Quit指令,但是不关闭master | kill -WINCH pid |
USR2 信号
首先搞清楚Nginx是如何平滑升级
- nginx复制一份 master到worker进程,并将新的master进程的pid记录放到nginx放pid的地方。
- 为了保留老的nginx的pid保证升级成功后通知,会把老的nginx的pid放在nginx.pid.oldbin。
- 当升级完成之后就从这里拿到nginx的老进程pi发送Quite信号。
USR2信号就是将nginx 进行进程复制并记录老进程pid的命令,之后我们手动的kill Quit发送给老进程的pid即可.
Nginx常用命令
- nginx -t/T 找到nginx.conf进行测试,并返回测试结果(会测试语法与语义)
- nginx -tq 在测试时只输出测试的错误信息,正确则不输出
- nginx -s stop quit( 同上 ) reopen reload
- nginx -p prefix 指定Nginx的prefix命令
- nginx -c filename 指定nginx色配置文件路径
- nginx -g 补充nginx配置文件, 作用快捷配置nginx.conf, 如pid等等
- make upgrade (位置为 /usr/local/nginx/sbin目录) docker不用这么麻烦。apt-get大法好
Nginx 核心文件
-----------------全局块------------------------------
# 理论上应该是nginx用户所有,实际竟然他妈是root
user nginx;
# 自动配置工作环境
worker_processes auto;error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;----------------服务器配置网络连接---------------------
events {worker_connections 1024;
}----------------Nginx的代理,反代理等,核心-------------
http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;# 这里的文件包含主要是server.include /etc/nginx/conf.d/*.conf;
}
全局块
User: 用于配置运行nginx服务worker进程的用户与用户组,这也就是为什么即使你用 ls -l查看nginx.sh是root权限,user还是nginx,因为他,管理的是worker进程
eg. user Someone
group Somegroup
WorkProcess: 用来配置Nginx生成的工作进程数量,一般与CPU内核数保持一致。与workerprocess相对的就是masterprocess 用来指定是否开启工作进程(on|off)
daemon 设定Nginx是否已守护进程方式启动(虽然,再docker里都没差(doge)) on|off
剩下的都是文件路径了,没啥了。值得一提的是nginx的log等级,不要设置的太低,否则多次IO操作会拖垮机子的资源
Nginx学习日记1相关推荐
- Nginx 学习日记2
events块 accept_mutex: 设置Nginx网络连接得序列化(默认 accept_nutex on;)这个配置用来解决 " 惊群问题" , 即一个请求发送过老的得时候 ...
- Nginx学习日记第五篇 -- upstream及fastcgi
一.Nginx upstream Ngx_http_upstream_module模块可实现七层负载均衡,定义的服务器组可被proxy_pass.fastcgi_pass.uwsgi_pass.scg ...
- Nginx学习4:负载均衡实例
Nginx配置实例-负载均衡 目标 在浏览器地址栏输入地址 http://192.168.126.131:8080/edu/a.html,负载均衡效果,平均分配到 8080 和 8081 端口中 准备 ...
- Nginx 学习总结(2) —— 基本配置
这是 Nginx 学习总结的第二篇,上一篇介绍到了 Nginx 学习总结(1) -- 概述,这一篇会对 Nginx 的基本配置做一些总结. Nginx 配置信息主要分为六大部分: main(全局设置) ...
- nginx学习总结五(nginx反向代理)
nginx学习总结五(nginx反向代理) 2011-02-28 12:59:33标签:反向代理nginx负载均衡 原创作 ...
- 【nginx学习一】基本原理初探
由于性能问题,需要将 apache + php5.2 升级到 nginx + php7,对于nginx的性能和热加载早有耳闻,why nginx so diao.小拽进行了初探,有任何疑问或不准确的地 ...
- Nginx学习之负载均衡fair模块
2019独角兽企业重金招聘Python工程师标准>>> Nginx学习之负载均衡fair模块 2017-04-10 20:27 写在开始 前面对Nginx的三种负载均衡实现做了一个简 ...
- nginx 学习笔记(2) nginx新手入门
这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...
- java的圆周率_java学习日记,圆周率的打印
前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...
最新文章
- crontab安装_django-crontab实现服务端的定时计划任务
- AutoX江苏超级工厂首曝光!机械臂随处可见,车辆出厂就能完全无人驾驶
- windows server 2003 学习笔记
- 全面认识Docker和基本指令
- CSS兼容IE6,IE7,FF的技巧(COPY来的,还没看)
- 程序员的年龄越大编程能力越弱???原来我们都理解错了
- 爱了!蚂蚁开源的“SpringBoot”框架,新增了这6项功能...
- 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)
- 马云妇女节寄语女性:没有败家的女人 只有爱家的女人
- qss qmenu 设置icon位置大小_实战PyQt5: 125-使用配置文件来保存和恢复应用的设置...
- 如何搭建私人电子图书馆
- 计算流体力学基础与网格概述(与书同行)——ANSYS ICEM CFD网格划分从入门到精通——丁源
- SEO网站优化是什么
- [PTA报错]warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
- BZOJ 1208 宠物收养所 Splay树
- requests Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en
- 中国银联正式推出在线支付和手机支付业务zt
- 开关电源IC的选择要求
- Vue 中 store 基本用法
- 国产系统Ubuntu麒麟 我们的第三条路
热门文章
- 【厚积薄发系列】Python项目总结1—后端常驻程序的基本要求
- dedecms友情链接plus/flink.php页面出错,DedeCMS友情链接flink_add Getshell漏洞管理员CSRF漏洞...
- 钉钉开放平台API对接第一讲
- 什么是回滚事务rollback?
- SparkRDD算子--mapPartitionsWithIndex算子
- org.quartz
- 中级篇——Linux下通过进程名、ID、端口号查看进程信息
- 滑雪在日本 之 新泻篇 3
- “很抱歉,出现错误,word不能启动”超简单解决方法
- 极客的Linux常用命令速查手册