当前位置: 首页 > news >正文

Nginx网络服务

一、Nginx概述

1.1Nginx介绍

Nginx:

  • 一款高新能、轻量级Web服务软件
  • 稳定性高
  • 系统资源消耗低
  • 对HTTP并发连接的处理能力高
  • 单台物理服务器可支持30 000~50 000个并发请求。

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。

对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求。

Apache:

Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。

1.2Nginx和Apache的差异

Apache: 创建多个进程或线程,而每个进程或线程都会为其分配cpu和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会榨干服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx 支持更高的并发。

1.3Nginx和Apache的优缺点比较

(1)nginx相对于apache的优点∶

  • 轻量级,同样起web服务,比apache占用更少的内存及资源
  • 抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能
  • 高度模块化的设计,编写模块相对简
  • 支持热部署,平滑升级

(2)apache相对于nginx的优点∶

  • Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)
  • 模块多,基本想到的都可以找到
  • 少bug, nginx的bug相对较多
  • 超稳定
  • Nginx处理动态请求是弱项,动态请求要Apache去做。

总结:一般来说,需要性能的web服务,用Nginx. 如果不需要性能只求稳定,那就Apache。Nginx处理动态请求是弱项,一般动态请求要Apache去做,Nginx只适处理静态网页或反向代理。

1.4Nginx的进程

Apache和Nginx的默认端口都是80,如果其中一个已经启动了,那么再启动另一个会报错。如果想要同时使用,可以修改其中一个的端口号。

Nginx有两个进程:

master process:主进程(守护进程),用来管理工作进程。

worker process:工作进程,用来处理用户的请求。

二、编译安装Nginx服务

源码包内的文件:

  • contrib:vim 格式文件,修改nginx配置文件的格式,高亮 cp -r /opt/nginx-1.18.0/contrib/vim/* /usr/share/vim/vimfiles/

  • conf:配置文件

  • man:man帮助 man man/nginx.8 不加路径看不了 nginx.8 文件

  • src:源码包 点c 点h 结尾的文件 find src -type f |xargs cat |wc -l 193678

2.1 关闭防火墙和selinux

2.2安装依赖包

nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

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

2.3创建运行用户、组

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

[root@localhost ~]# useradd -M -s /sbin/nologin/ nginx

2.4将安装nginx所需的软件包

2.5将安装包传到/opt目录下并解压

./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module 

 2.6做软连接

2.6修改权限

2.7开启和关闭nginx

配置文件中写入内容

vim /usr/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=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

2—1yum安装nginx


[root@centos2 ~]#yum install  epel-release -y
[root@centos2 ~]#yum install nginx -y
 
[root@centos2 ~]#rpm -q nginx
nginx-1.20.1-10.el7.x86_64
[root@centos2 ~]#nginx -v
nginx version: nginx/1.20.1
[root@centos2 ~]#

三、Nginx小命令

3.1信号

3.1.1指定配置 不已配置文件中的为准

 

3.1.2日志分割

3.1.3显示版本

3.1.4显示编译详细情况 模块等信息

3.1.5检查语法

3.1.6发送信号

kill -l  看信号大全
nginx -h   中可以看到的信号较少
s signal     : send signal to a master process: stop, quit, reopen, reload

可以使用man手册来查看详细的信号 如果没安装,去源码包里找到man文件
man   路径/nginx.8      不加路径打不开man帮助
stop          SIGTERM        直接停止
quit           SIGQUIT        优雅的退出:有人在访问不会结束进程
reopen       SIGUSR1        分割日志
reload       SIGHUP         重新加载配置文件
            SIGHUP           Reload configuration, start the new worker process with a new configuration, and
                             gracefully shut down old worker processes.
             SIGQUIT          Shut down gracefully.  优雅的关闭:有人在访问不会结束进程
             SIGUSR1          Reopen log files.       重新分割日志
             SIGUSR2          Upgrade the nginx executable on the fly.  运行中升级
             SIGWINCH         Shut down worker processes gracefully.    优雅的关闭worker进程,work进程负责处理请求,还有请求不会关闭
             
             
             
帮助: -? -h
使用指定的配置文件: -c
指定配置指令:-g
指定运行目录:-p
测试配置文件是否有语法错误:-t -T
打印nginx的版本信息、编译信息等:-v -V
发送信号: -s 示例: nginx -s reload

3.1.7升级 nginx1.18 nginx1.20

3.1.8回滚

四、Nginx优化小命令

4.1全局配置

nginx 官方帮助文档:nginx documentation

tengine 帮助文档:Nginx文档

Nginx的配置文件的组成部分:

主配置文件:nginx.conf

子配置文件: include conf.d/*.conf

配置文件由指令和指令块构成
每条指令以;分号结尾,指令与值之间以空格符号分隔
pid    /apps/run/nginx.pid
指令已{}达括号将多条指令组织在一起且可以嵌套指令块
include语句允许组合多个配置文件以提升可维护性 
#号注释
$使用变量
部分支持正则
自定义变量:由用户使用set命令定义,格式: set variable_name value

全局配置
events{  控制事件驱动      }
http  {  web网页配置有关   server  { location  }   }

main block:主配置段,即全局配置段,对http,mail都有效

#事件驱动相关的配置   同步
event {
 ...
}   
#http/https 协议相关配置段
http {
 ...
}          
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
 ...
}    
#stream 服务器相关配置段
stream {负载均衡
 ...
}
 

nginx 有多种模块

  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能

  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等

  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持

  • Stream服务模块: 实现反向代理功能,包括TCP协议代理

  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

4.1.1 关闭版本或修改版本

关闭版本

修改版本

 

4.1.2 修改启动的进程数

4.1.3cpu与work进程绑定

将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。

4.1.4 PID 路径

4.1.5 nginx进程的优先级(work进程的优先级)

4.1.6 调试work进程打开的文件的个数

4.1.7将Nginx转为前后进程

在容器环境,one container == one process,容器要能持续运行,必须有且仅有一个前台进程,所以对nginx进程容器化,需要将nginx转为前后进程( daemon off)。

user nginx;
worker_processes 2;
worker_cpu_affinity 00000101 00000010;
daemon off;
#加入此选项


[root@localhost ~]#systemctl start nginx

4.1.8 只有 master进程没有 work进程

master_process off|on;
#是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on

4.2event事件

events {
   worker_connections  65536;  #设置单个工作进程的最大并发连接数
   use epoll;
   #使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置。
   accept_mutex on; 
   #on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为on
   multi_accept on; 
   #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
}

4.3 http设置

http 是一个大的语句块,包含若干个小的语句块(比如server语句块)

http {
 ...
 ...  #各server的公共配置
 server {    #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
 ...
 }
 server {     
 ...
 server_name   #虚拟主机名
 root     #主目录
 alias     #路径别名
 location [OPERATOR] URL {     #指定URL的特性
 ...
 if CONDITION {
 ...
 }
 }
 }
}

http 协议配置说明

http {
   include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录
   default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
#日志配置部分
    #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 logs/access.log main;
#自定义优化参数

   sendfile       on; 
   
   
   
   对网络链接的优化
    #tcp_nopush     on; #在开启了sendfile的情况下,合并请求后统一发送给客户端。
    #tcp_nodelay   off; ###代表没有延迟
    #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。
    #keepalive_timeout 0;

   keepalive_timeout  65 65;长连接 65s 
   #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
    #gzip on; #开启文件压缩

   server {
       listen       80; #设置监听地址和端口
       server_name localhost; #设置server name,可以以空格隔开写多个并支持正则表达式,如:*.kgc.com www.kgc.* ~^www\d+\.kgc\.com$ default_server 
        #charset koi8-r; #设置编码格式,默认是俄语格式,建议改为utf-8
        #access_log logs/host.access.log main;

       location /fxj  {           www.ky31.com/fsj     /apps/nginx/html   
           root   /data;
           index index.html index.htm;
       }
        #error_page 404             /404.html;
        # redirect server error pages to the static page /50x.html
        #

       error_page   500 502 503 504 /50x.html; #定义错误页面
       location = /50x.html {
           root   html;
       }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ { #以http的方式转发php请求到指定web服务器
        #   proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ { #以fastcgi的方式转发php请求到php处理
        #   root           html;
        #   fastcgi_pass   127.0.0.1:9000;
        #   fastcgi_index index.php;
        #   fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
        #   include       fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht { #拒绝web形式访问指定文件,如很多的网站都是通过.htaccess文件

来改变自己的重定向等功能。
        #   deny all;
        #}

       location ~ /passwd.html {
           deny all;
       }
   }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server { #自定义虚拟server


3.3.1 MIME
范例: 识别php文件为text/html
    #   listen       8000;
    #   listen       somename:8080;
    #   server_name somename alias another.alias;
    #   location / { 
    #       root   html;
    #       index index.html index.htm; #指定默认网页文件,此指令由

ngx_http_index_module模块提供
    #   }
    #}
    # HTTPS server
    #
    #server { #https服务器配置
    #   listen       443 ssl;
    #   server_name localhost;
    #   ssl_certificate     cert.pem;
    #   ssl_certificate_key cert.key;
    #   ssl_session_cache   shared:SSL:1m;
    #   ssl_session_timeout 5m;
    #   ssl_ciphers HIGH:!aNULL:!MD5;
    #   ssl_prefer_server_ciphers on;
    #   location / {
    #       root   html;
    #       index index.html index.htm;
    #   }
    #}

4.3.1mime

此项为支持的 文件格式,如果不支持的格式 会自动帮你下载,如果支持 就会显示在网页上

[root@localhost ~]#vim  /etc/nginx/mime.types
types {
    text/html                                            html htm shtml;
    .....................................................................
    image/png                                         png;
    image/svg+xml                                  svg svgz;
    image/tiff                                           tif tiff;
    image/vnd.wap.wbmp                       wbmp;
    image/webp                                      webp;
    image/x-icon                                     ico;
    image/x-jng                                       jng;
    image/x-ms-bmp                               bmp;

相关文章:

  • python 几种常见的音频数据读取、保存方式
  • React setState同步还是异步
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • 【springBoot】springAOP
  • 信息学奥赛一本通1209:分数求和
  • 【智慧零售】门店管理设备解决方案,为企业数字化运营升级赋能
  • 逻辑回归算法概述
  • Ubuntu20.04 屏幕截图快捷键
  • GptSoVits音频教程
  • 设计模式-创建型模式-原型模式
  • 宏观视角下的浏览器
  • Selenium定位不到元素怎么办?一定要这么做
  • 电路设计(26)——速度表的multisim仿真
  • 计算机设计大赛 深度学习卷积神经网络的花卉识别
  • fastApi笔记01-路径参数
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 07.Android之多媒体问题
  • cookie和session
  • HashMap ConcurrentHashMap
  • Java新版本的开发已正式进入轨道,版本号18.3
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • maya建模与骨骼动画快速实现人工鱼
  • Median of Two Sorted Arrays
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • ReactNative开发常用的三方模块
  • vue-router的history模式发布配置
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 聚类分析——Kmeans
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (ros//EnvironmentVariables)ros环境变量
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (原創) 未来三学期想要修的课 (日記)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .chm格式文件如何阅读
  • .Mobi域名介绍
  • .NET : 在VS2008中计算代码度量值
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net 流——流的类型体系简单介绍
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net反编译的九款神器
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .Net小白的大学四年,内含面经
  • :中兴通讯为何成功
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Android 数据通信] android cmwap接入点
  • [Angular] 笔记 18:Angular Router
  • [ARC066F]Contest with Drinks Hard
  • [cb]UIGrid+UIStretch的自适应
  • [hihocoder1395] 最大权闭合子图