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常用命令

  1. nginx -t/T 找到nginx.conf进行测试,并返回测试结果(会测试语法与语义)
  2. nginx -tq 在测试时只输出测试的错误信息,正确则不输出
  3. nginx -s stop quit( 同上 ) reopen reload
  4. nginx -p prefix 指定Nginx的prefix命令
  5. nginx -c filename 指定nginx色配置文件路径
  6. nginx -g 补充nginx配置文件, 作用快捷配置nginx.conf, 如pid等等
  7. 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相关推荐

  1. Nginx 学习日记2

    events块 accept_mutex: 设置Nginx网络连接得序列化(默认 accept_nutex on;)这个配置用来解决 " 惊群问题" , 即一个请求发送过老的得时候 ...

  2. Nginx学习日记第五篇 -- upstream及fastcgi

    一.Nginx upstream Ngx_http_upstream_module模块可实现七层负载均衡,定义的服务器组可被proxy_pass.fastcgi_pass.uwsgi_pass.scg ...

  3. Nginx学习4:负载均衡实例

    Nginx配置实例-负载均衡 目标 在浏览器地址栏输入地址 http://192.168.126.131:8080/edu/a.html,负载均衡效果,平均分配到 8080 和 8081 端口中 准备 ...

  4. Nginx 学习总结(2) —— 基本配置

    这是 Nginx 学习总结的第二篇,上一篇介绍到了 Nginx 学习总结(1) -- 概述,这一篇会对 Nginx 的基本配置做一些总结. Nginx 配置信息主要分为六大部分: main(全局设置) ...

  5. nginx学习总结五(nginx反向代理)

    nginx学习总结五(nginx反向代理)                             2011-02-28 12:59:33标签:反向代理nginx负载均衡            原创作 ...

  6. 【nginx学习一】基本原理初探

    由于性能问题,需要将 apache + php5.2 升级到 nginx + php7,对于nginx的性能和热加载早有耳闻,why nginx so diao.小拽进行了初探,有任何疑问或不准确的地 ...

  7. Nginx学习之负载均衡fair模块

    2019独角兽企业重金招聘Python工程师标准>>> Nginx学习之负载均衡fair模块 2017-04-10 20:27 写在开始 前面对Nginx的三种负载均衡实现做了一个简 ...

  8. nginx 学习笔记(2) nginx新手入门

    这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...

  9. java的圆周率_java学习日记,圆周率的打印

    前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...

最新文章

  1. crontab安装_django-crontab实现服务端的定时计划任务
  2. AutoX江苏超级工厂首曝光!机械臂随处可见,车辆出厂就能完全无人驾驶
  3. windows server 2003 学习笔记
  4. 全面认识Docker和基本指令
  5. CSS兼容IE6,IE7,FF的技巧(COPY来的,还没看)
  6. 程序员的年龄越大编程能力越弱???原来我们都理解错了
  7. 爱了!蚂蚁开源的“SpringBoot”框架,新增了这6项功能...
  8. 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)
  9. 马云妇女节寄语女性:没有败家的女人 只有爱家的女人
  10. qss qmenu 设置icon位置大小_实战PyQt5: 125-使用配置文件来保存和恢复应用的设置...
  11. 如何搭建私人电子图书馆
  12. 计算流体力学基础与网格概述(与书同行)——ANSYS ICEM CFD网格划分从入门到精通——丁源
  13. SEO网站优化是什么
  14. [PTA报错]warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
  15. BZOJ 1208 宠物收养所 Splay树
  16. requests Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en
  17. 中国银联正式推出在线支付和手机支付业务zt
  18. 开关电源IC的选择要求
  19. Vue 中 store 基本用法
  20. 国产系统Ubuntu麒麟 我们的第三条路

热门文章

  1. 【厚积薄发系列】Python项目总结1—后端常驻程序的基本要求
  2. dedecms友情链接plus/flink.php页面出错,DedeCMS友情链接flink_add Getshell漏洞管理员CSRF漏洞...
  3. 钉钉开放平台API对接第一讲
  4. 什么是回滚事务rollback?
  5. SparkRDD算子--mapPartitionsWithIndex算子
  6. org.quartz
  7. 中级篇——Linux下通过进程名、ID、端口号查看进程信息
  8. 滑雪在日本 之 新泻篇 3
  9. “很抱歉,出现错误,word不能启动”超简单解决方法
  10. 极客的Linux常用命令速查手册