当前位置:首页 > CN2资讯 > 正文内容

海外nginx服务器 nginx服务器的作用

2天前CN2资讯


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服务运行,此时平滑升级完毕

  • 显示命令行帮助


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/23647.html

    分享给朋友:

    “海外nginx服务器 nginx服务器的作用” 的相关文章

    RackNerd VPS:超高性价比与稳定服务的完美选择

    引言 在如今的网络环境中,选择一家合适的VPS服务商无疑是一个关键决策。很多人可能对market上的多个选项感到无从选择。RackNerd作为一家美国成立的VPS主机商,凭借其超高性价比迅速进入了大众视野。特别是在一年一度的黑五促销活动中,RackNerd常常引发热潮,其 $10/年的价格实在让人不...

    ChicagoVPS 测评:性能、价格与客户服务的全面分析

    在开始谈论ChicagoVPS之前,我想分享一些关于它的背景故事。ChicagoVPS成立于2010年,源于对高效和可靠的虚拟专用服务器(VPS)的需求。作为一家快速崛起的公司,它在短短几年内就积累了相当可观的用户基础。它在美国中西部的沃土上发展壮大,吸引了不少希望获得优质服务的用户。公司的愿景是提...

    AkkoCloud评测:为中国用户打造的高性价比VPS与独立服务器解决方案

    AkkoCloud成立于2019年,作为一家具备国人运营背景的主机商,逐渐在海内外VPS和独立服务器市场中占据了一席之地。我的亲身体验让我感受到,AkkoCloud的设计初衷就是为中国大陆的用户提供一个稳健可靠的服务器解决方案。对于很多用户来说,它的出现无疑填补了国内市场的一部分空白。 回想起我探索...

    域名购买推荐:如何选择最适合你的域名注册商

    域名购买推荐概述 在互联网时代,域名显得尤为重要。对于个人用户、企业甚至是初创团队来说,域名不仅是网站的门面,更是品牌形象和业务宣传的基石。记得我第一次建立网站时,选择一个合适的域名让我意识到它的价值。一个容易记住、与品牌相关的域名可以有效吸引流量,提升访问者的信任感。 在选购域名时,有几点基本原则...

    怎么在VPS上测速并提升网络性能

    在使用虚拟专用服务器(VPS)时,了解它的性能和网络速度是至关重要的。VPS的效率直接影响到网站的加载速度和用户体验。想想当你的网站访问速度慢,用户可能会不耐烦,从而导致访客流失。这可不是任何网站主想要发生的事情。所以,定期对VPS进行测速,找出潜在问题,并加以解决,是一个非常明智的选择。 测速不仅...

    阿里云国际:企业数字化转型的理想云服务解决方案

    阿里云国际概述 阿里云国际成立于2015年,致力于为全球用户提供高效、可靠、安全的云计算服务。作为阿里巴巴集团的一部分,阿里云国际不仅承载着国内市场的技术精华,也积极拓展国际市场。随着全球互联网的快速发展,企业对云服务的需求不断增加,阿里云国际顺应这一趋势,凭借创新的技术和丰富的经验,迅速在全球范围...