Nginx学习日记1

本文详细介绍了Nginx作为高性能HTTP和反向代理服务器的角色,包括其在正向代理和反向代理中的应用。Nginx以其高并发、低延迟和丰富的模块特性著称,常用于实现负载均衡和服务器压力缓解。文中还解析了Nginx的基础配置、目录结构、日志管理和信号控制,以及如何进行平滑升级。此外,还涵盖了Nginx的用户和工作进程设置,以及HTTP服务的相关配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/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进程,累出几个简单的信号命令

SignalEffectHowUse
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指令,但是不关闭masterkill -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操作会拖垮机子的资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值