Nginx的作用

nginx的作用

nginx是什么

Web服务器,或者WWW(World Wide Web)服务器。具备Web服务器的基本功能:基于REST架构风格,以统一资源描述符(URI)或者统一资源定位符(URL)作为沟通依据,通过HTTP为浏览器等客户端程序提供各种网络服务。

竞争对手:Apache,Lighttpd,Tomcat,Jetty,HS

Tomcat和Jetty面向java语言,先天就是重量级的服务器,性能与Nginx没有可比性

HS只能在windows上运行,windows相比UNIX稳定性,性能都不如

Apache发展时间很长,一个重量级,不支持高并发的web服务器。数以万计的并发HTTP请求同时访问,服务器消耗大量内存,进程切换消耗CPU。

Lighttpd和nginx都是轻量级,高性能的web服务器,欧美喜欢使用Lignttpd,国内喜欢使用nginx。

nginx是跨平台的web服务器。

nginx的特点

  • 更快
  • 高扩展性
  • 高可靠性
  • 低内存消耗
  • 单机支持10万以上的并发连接
  • 热部署
  • 最自由的BSD许可协议

安装

以linux系统为例:

前提条件

linux内核版本

需要内核为Linux2.6及以上的版本,因为2.6才支持epoll,而在Linux上使用select或poll来解决时间的多路复用,是无法解决高并发压力问题的。查看linux内核版本如下:


[root@VM-12-5-centos conf]# uname -a
Linux VM-12-5-centos 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

可见内核版本为3.10.0

必备软件

  • GCC编译器:用来编译C语言程序,Nginx不会直接提供二进制可执行程序
yum install -y gcc
yum install -y gcc-c++

使用C++来编写HTTP模块

  • PCRE库

支持正则表达式,如果需要在conf文件中使用正则表达式,则需要安装

yum install -y pcre pcre-devel
  • zlib库

用于对HTTP包的内容做gzip格式的压缩,如果需要在conf中皮质gzipon,对于某些类型(context-type)的HTTP响应使用gzip来进行压缩以减少网络传输

yum install -y zlib zlib-devel
  • OpenSSL开发库

如果不只是要支持HTTP,还需要更安全的SSL协议上传输HTTP,那么就需要使用OpenSSL了,

yum install -y openssl openssl-devel

磁盘目录

  • nginx源代码存放目录

存放nginx源码文件,以及第三方或我们自己缩写的模块源码文件

  • nginx编译阶段产生的中间文件存放目录

在configure命令执行后所生成的源文件及目录,以及make命令执行后生成的目标文件和最终连接成功的二进制文件。默认情况,configure命令会将该目录命名为objs,放nginx源码目录下

  • 部署目录

该目录存放实际nginx服务运行期间所需要的二进制文件,配置文件等。默认/usr/locl/nginx

  • 日志文件存放目录

日志文件通常比较大,研究nginx底层架构,需要打开debug级别,需要预先分配一个拥有更大磁盘空间的目录

linux内核参数的优化

修改linux内核参数的方法

# 修改参数
vim /etc/sysctl.conf
# 参数生效
sysctl -p

默认如下:


net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

net.ipv4.conf.all.promote_secondaries = 1
net.ipv4.conf.default.promote_secondaries = 1
net.ipv6.neigh.default.gc_thresh3 = 4096
net.ipv4.neigh.default.gc_thresh3 = 4096

kernel.softlockup_panic = 1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0
kernel.numa_balancing = 0
kernel.shmmax = 68719476736
kernel.printk = 5
kernel.sysrq = 1

需要修改的参数

fs.file-max = 999999
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_syn.backlog = 1024
net.ipv4.ip_local_port_range = 1024    61000
net.ipv4.tcp_rmem = 4096 32768 262142
net.ipv4.tcp_wmen = 4096 32768 262142
net.core.netdev_max_backlog = 8096
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
net.ipv4.tcp_syncookies = 1

解释如下

  • fs.file-max

进程可以同时打开的最大句柄数,这个参数直接限制最大并发连接数

  • net.ipv4.tcp_tw_reuse

允许将TIME_WAIT状态的socket重新用于新的TCP连接

  • net.ipv4.tcp_keepalive_time

当启用keepalive时,TCP发送keepalive消息的频度。默认是2h,设置小一点,可以更快清理无效的连接

  • net.ipv4.tcp_fin_timeout

当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间

  • net.ipv4.tcp_max_tw_buckets

允许TIME_WAIT套接字数量的最大值,超过这个数字,TIME_WAIT套接字将立刻被清除并打印告警信息,该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器变慢

  • net.ipv4.tcp_max_syn.backlog

表示TCP三次握手建立连接接收SYN请求队列的最大长度,默认为1024,将其设置大一些可以使出现Nginx繁忙来不及accept新连接的情况下,Linux不至于丢失客户端发起的请求连接

  • net.ipv4.ip_local_port_range

定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围

  • net.ipv4.tcp_rmem

TCP接收缓存(用于TCP接收滑动窗口)的最小值,默认值,最大值

  • net.ipv4.tcp_wmen

TCP发送缓存(用于TCP发送滑动窗口)的最小值,默认值,最大值

  • net.core.netdev_max_backlog

当网卡接收数据包的速度大于内核处理速度时,会有一个队列保存这些数据包,这个参数表示该队列的最大值

  • net.core.rmem_default

表示内核套接字接收缓存区默认的大小

  • net.core.wmem_default

表示内核套接字发送缓存区默认的大小

  • net.core.rmem_max

内核套接字接收缓存区的最大大小

  • net.core.wmem_max

内核套接字发送缓存区的最大大小

  • net.ipv4.tcp_syncookies

该参数与性能无关,用于解决TCP的SYN攻击

安装

nginx: download

安装

#auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
#auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src在./configure后文件目录变化

./configure
make
make install

nginx命令行控制

默认nginx被安装在/usr/local/nginx,二进制文件在/usr/local/nginx/sbin/nginx,配置文件在/usr/local/nginx/conf/nginx.conf

  • 默认启动方式
/usr/local/nginx/sbin/nginx
  • 执行配置文件启动
/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf
  • 指定安装目录启动
/usr/local/nginx/sbin/nginx -p /usr/local/nginx/
  • 指定全局配置项启动
  • 测试配置信息是否有误
[root@VM-12-5-centos sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# -q参数可以不把error级别以下的信息输出到屏幕
/usr/local/nginx/sbin/nginx -t
  • 显示版本
[root@VM-12-5-centos sbin]# ./nginx -v
nginx version: nginx/1.22.1
  • 显示编译阶段的参数
[root@VM-12-5-centos sbin]# ./nginx -V
nginx version: nginx/1.22.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments:
  • 快速停止服务
/usr/local/nginx/sbin/nginx -s stop
# 类似于kill命令
# kill -s SIGTERM 进程ID
  • 优雅停止服务
/usr/local/nginx/sbin/nginx -s quit
# kill -s SIGQUIT 进程号

与stop区别,当快速停止服务时,worker进程和master进程收到信号后会立刻跳出循环,推出进程

而优雅停止服务时,首先会关闭监听器口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后推出进程

  • 使运行中的nginx重读配置项并生效
/usr/local/nginx/sbin/nginx -s reload
  • 日志文件回滚
/usr/local/nginx/sbin/nginx -s reopen
  • 平滑升级nginx

nginx服务升级到新版本必须要将旧的二进制文件替换掉,通常是需要重启服务的,但是nginx支持不重启服务来完成新版本的平滑升级

1)通过向master进程发送USR2信号可达到目的

kill -s SIGUSR2 <nginx master pid>

这时,运行中的nginx会将pid文件重命名,如将/usr/local/nginx/logs/nginc.pid重命名为/usr/local/nginx/logs/nginc.pid.oldbin这样新的nginx才有可能重新启动

2)启动新版本的nginx,可以使用之前的任意一种启动方式。通过ps命令可以发现新旧版本的nginx在同时运行

3)通过kill命令向旧的版本master进程发送SIGQUIT信号,以优雅的方式关闭旧版本的nginx。随后将只有新版本的nginx服务运行,此时平滑升级完毕

  • 显示命令行帮助
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值