• Nginx 网站服务


    Nginx

    稳定性高

    (但是没有apache稳定)
    版本号:1.12 1.20 1.22

    系统资源消耗低

         (处理http请求的并发能力很高,单台物理服务器可以处理30000-50000个并发请求)

    稳定:一般在企业中,为了保持服务器稳定,并发量的设置在20000个左右。

    占用内存2M左右;keep-alive则占用内存在3M左右

    Nginx主要功能

    1. 静态文件服务:nginx可以直接提供静态文件的服务,如 HTML,CSS,AVAScript,图片等能够高效地处理并且响应静态文件的请求
    2. 反向代理:可作为反向代理的服务器,将客户端的请求转发给后端多个服务器,并且可以实现负载均衡,高可用,从而提高整个集群的性能以及可靠性。
      客户端请求时,沟通代理服务器会把请求流量按轮询算法,转发到后台不通的服务器上,实现负载均衡,高可用。
    3. 处理动态内容:Nginx处理动态内容很差,php  node.is  java  python  nginx可以代理请求,然后发送到后端的动态服务处理;动态服务器理完之后,Nginx来把动态请求响应给客户端。
    4. SSL/TLS加密:HTTPS的加密方式,数字证书验证机制。
    5. 虚拟主机:Nginx可以在一台服务器上设置多个虚拟主机;同一个服务器上可以有多个域名和站点
    6. URL重定向:可以实现灵活的url重写和重定向。
    7. 缓存功能:Nginx自带缓存功能。
    8. 日志功能:可以详细的记录请求的信息,包括访问时间,请求路径 ip地址,响应状态,有助于故障排查
      系统控制的日志,记录在/ar/log/messages
      业务日志:aess.og  error.log  aess记录的谁访问我了,都是访问成功的记录;
      error日志也记录谁访问了我,但是记录的是访问失败的记录。
    正向代理

    客户端 —— (运营商) —— nginx服务器 —— web服务器

    VPN也是典型的正向代理;已知后端服务器,请求只会往固定的服务器发送

    反向代理

    客户端 —— nginx服务器(代理) —— 
    ( 通过轮询算法,随机指向其中一台web服务器 ) —— 
    web服务器1  或  web服务器2  或  web服务器3 (这三天服务器称之为集群)

    从而实现了高可用、负载均衡

    Nginx的主要应用场景

    • 静态服务
    • 反向代理、负载均衡
    • 缓存服务
    • 动态服务

    Nginx是如何实现高并发的    *面

    • Nginx自身代码的问题: 大量的底层代理进行了优化,同时自带了一个功能模块。epol模块,支持高并发。
    • Nginx也是一个master进程控制多个work进程。master负责收集和分发请求,work是实际执行者。每一个请求进来,master就会拉起一个work进程处理请求,同时master进程也负责监控worker的状态
      worker的数量和cpu要一致或者是cpu的2倍.
      worker处理请求的过程中,只受内存大小的限制。
      所以可以处理多个请求,再加上nginx本身就是轻量级的服务,处理请求时占用的内存本身就很少,所以可以起到大并发处理的能力。

    二者之间相互依赖,相互补充

    建立 Nginx 服务

    关闭防火墙

    systemctl stop firewalld
    setenforce 0

    安装依赖包

    yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel

    创建运行用户、组

    useradd -M -s /sbin/nologin nginx

    (Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地        控制其访问权限)

    编译安装 Nginx

    tar -xf nginx-1.22.0.tar.gz -C /opt/

    解压nginx安装包

    --with-http ssl module\                   #http协议的加密模块
    --with-http_v2 module\                   #安装http2.0模块
    --with-http realip module\               #允许nginx获取客户端的真实ip地址
    --with-http stub status module\      #可以记录nginx访问状态信息的模块
    --with-http_gzip static_module\      #支持页面压缩功能
    --with-pcre\                                     #支持pcre库
    --with-stream\                                 #支持tcp/udp代理模块
    --with-stream ssl module\               #tcp/udp的加密横块
    --with-stream realip module            #允许nginx作为代理服务器时,可以获取客户端的ip

    make -j 4 && make install

    编译并安装

    安装后生成四个文件及功能
    • conf:保存的是所有nginx的配置文件,其中最核心的就是nginx.conf
    • html:保存nginx的web文件,这是默认目录可改
    • logs:保存日志文件的位置
    • sbin:nginx二进制的启动脚本,可以结合不同

    50x.html:是nginx默认的错误页面显示

    添加Nginx系统服务

    vim /lib/systemd/system/nginx.service


    [Unit]
    Description=nginx - high performance web server
    Documentation=http://nginx.org/en/docs/
    After=network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target


    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/run/nginx.pid
    #注意文件位置,如果不对 启动不了
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
    #注意启动文件位置
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s TERM $MAINPID


    [Install]
    WantedBy=multi-user.target

    赋权限

    chown -R nginx.nginx /usr/local/nginx      #修改权限

    常用命令
    • nginx -t:检查配置文件是否配置正确。
    • nginx -v:查看niginx的版本号
    • nginx -s:向主进程传输信号 —— 停止、开启、重启、重新加载
    • niginx -c:设置配置文件的默认路径
    • ulimit -a:  
    信号符

    信号符结合kill命令使用

    kill -USR1 pid号          #日志分割
    kill -s HUP pid号         #只要是kill,只能跟pid号,重新加载
    killall -s HUP nginx     #可以跟服务名,也可以用pid号
    kill -s  QUIT pid号      #优雅退出(有人访问时不会结束进程,访问完后才会结束进程)
    kill -s WHICH pid号    #优雅介绍work进程(请求结束后,才结束work)

    创建目录

    mkdir -p /usr/local/nginx/run/

    修改配置文件

    vim /usr/local/nginx/conf/nginx.conf
    pid /usr/local/nginx/run/nginx.pid;
    #找到 pid的位置修改  

    重启服务

    systemctl daemon-reload 

    systemctl restart nginx

    重新加载配置,并重启服务

    全局配置的模块

    • events模块:配置影响nginx服务器与用户之间的网络链接
    • http模块:只要是针对http请求的配置,代理,缓存,日志,反向代理,虚拟web主                          机,也可写在stream中,server块
                          非http请求的方式,不能写在该模块当中                                                                            反向代理:七层,四层方向代理,不能写在http的模块
    • server块:配置虚拟主机的相关参数,一个HTTP模块当中可以有多个server模块
                       包含在HTTP模块中,不能单独设置
    • location块:匹配的是uri,包含在server当中不能单独设置 
    location模块中  root和alias的区别      *面
    • root:指定的目录和location匹配的uri之间做的一个拼接,
      /opt/ky30/这俩个路径都真实存在而且都是目录,并且uri目录里面要有web文件。
    • alias : 匹配指定路径下的web文件

    /root后面有没有  "/"  无所谓,加不加都可;root标签可以使用重定向
    alias加了  "/"  后面也必须有  "/"  否则匹配不到;alias不可以设置重定向

    • porxy_pass:反向代理
    • upstream:反向代理指定服务器的命令,在HTTP模块中 七层,基于IP和端口,走HTTP协议
    • stream:四层,走的是TCP或者udp流量,不能写入HTTP,写在全局配置
    修改Linux服务器最大打开文件数      *面

    events块中 —— " worker_connections 1024 " 代表默认的最大进程连接数为1024

    修改连接数有两种方法,如下:

    可在命令行修改:

    ulimit -n 65535

    vim /etc/security/limits.conf

    * soft nproc 65535: 最大进程数软限制为 65535,即可以使用 ulimit -u 命令查看和修改的值
    * hard nproc 65535: 最大进程数硬限制为 65535,即最大可分配的进程数
    * soft nofile 65535:最大打开文件数软限制为 65535,可以使用 ulimit -n 命令查看和修改值
    * hard nofile 65535:最大打开文件数硬限制为 65535,即最大可分配的文件数

  • 相关阅读:
    React + Antd 自定义Select选择框 全选、清空功能
    leetcode(2)栈
    Linux- 网络编程初探
    【Python】datetime 库
    C语言必会15个文件函数
    【Java】IDEA 将 Java 项目打包成 Jar 包
    最新面试题:用友OC,美团三面已挂
    java计算机毕业设计ssm贫困区教育资源捐赠平台(源码+系统+mysql数据库+Lw文档)
    机器学习(三)之监督学习2
    【Java SE】数组常见问题及技巧用法
  • 原文地址:https://blog.csdn.net/as958361025/article/details/133776042