千家信息网

nginx是什么

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,1)Nginx服务概述Nginx由俄罗斯的lgor Sysoev开发,专为性能优化而开发,其最知名的优点就是它的稳定性和低系统资源消耗、以及对HTTP并发连接的高处立能力(单台物理服务器可支持3000
千家信息网最后更新 2025年01月22日nginx是什么

1)Nginx服务概述

Nginx由俄罗斯的lgor Sysoev开发,专为性能优化而开发,其最知名的优点就是它的稳定性和低系统资源消耗、以及对HTTP并发连接的高处立能力(单台物理服务器可支持30000~50000个并发请求)。正因为如此,大量提供社交网络、新闻资讯、电子商务及虚拟主机等服务的企业纷纷选择Nginx来提供Web服务。

搭建Web服务如果是为了解析静态网页、动态网页等、不需要太多的功能,那么Nginx绝对是首选。

2)安装Nginx

本次案例采用yum的方式进行安装,不过不使用epel源,因为这个nginx版本更新的太快了,导致epel根本赶不上Nginx的更新速度,所以我们采用官方的yum的yum源进行配置!

[root@nginx ~]# yum install -y gcc gcc- c++ autoconf pcre pcre-devel make automake wget httpd-tools vim tree#由于是最小化安装的系统,所以安装一些必要的软件[root@nginx ~]# vim /etc/yum.repos.d/nginx.repo#配置nginx的yum源,Nginx官方也有相应的配置信息[nginx]name=nginx_repo baseurl=http://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1#该yum源默认情况下安装的是nginx最新的、稳定版[root@nginx ~]# yum -y install nginx              #安装nginx[root@nginx ~]# nginx -v             #查看nginx的版本nginx version: nginx/1.16.1

3)Nginx安装目录

为了更清晰的了解 Nginx 软件的全貌,有必要介绍下 Nginx 安装后整体的⽬录结构及⽂件功能。

[root@nginx ~]# rpm -ql nginx#查看与nginx相关的目录

下图对nginx的安装目录进行详细的解释!

4)Nginx的编译参数

[root@nginx ~]# nginx -V#查看nginx的编译参数

下图展示了Nginx编译参数选项以及作用!

5)Nginx常用模块

Nginx模块分为 Nginx官⽅模块以及Nginx第三⽅模块!如图表:

Nginx编译选项模块作用
ngx_http_core_module包含⼀些核⼼的http参数配置,对应Nginx的配置区块部分
ngx_http_access_module访问控制模块,⽤来控制⽹站⽤户对Nginx的访问
ngx_http_gzip_module压缩模块,对Nginx返回的数据压缩,属于性能优化模块
ngx_http_fastcgi_modulefastci模块,和动态应⽤相关的模块,例如PHP
ngx_http_proxy_moduleproxy代理模块
ngx_http_upstream_module负载均衡模块,可以实现⽹站的负载均衡功能及节点的健康检查
ngx_http_rewrite_moduleURL地址重写模块
ngx_http_limit_conn_module限制⽤户并发连接数及请求数模块
ngx_http_limit_req_module限制Nginx request processing rate根据定义的key
ngx_http_log_module访问⽇志模块,以指定的格式记录Nginx客户访问⽇志等信息
ngx_http_auth_basic_moduleWeb认证模块,设置Web⽤户通过账号密码访问Nginx
nginx_http_ssl_modulessl模块,⽤于加密的http连接,如https

6)Nginx内置变量

$uri:当前请求的URI,不带参数;$request_uri:请求的URI,带完整参数;$host:http请求报文中host首部,如果没有则以处理此请求的虚拟主机名称名代替;$hostname:nginx服务运行在主机的主机名;$remote_addr:客户端IP;$remote_port:客户端端口;$remote_user:使用用户认证时客户端用户输入的用户名;$request_filename:用户请求中的URI经过本地root或alias转换后映射的本地文件路径;$request_method:请求方法:GET、POST、PUT$server_addr:服务器地址;$server_name:服务器名称;$server_port:服务器端口;$server_protocol:服务器向客户端发送响应时的协议,如http/1.1 http/1.0;$scheme:在请求中使用scheme,作用是截取http://xxxx.com中的http;$http_HEADER:匹配请求报文中指定的HEADER;$http_host:匹配请求报文中的host首部;$document_root:当前请求映射到的root配置;$http_user_agent:从http请求的头部信息中,获取客户端的访问设备;$status:响应报文返回的状态码;$body_bytes_sent:从服务端响应给客户端body信息大小;$http_referer:http上一级页面,防盗链、用户行为;$http_x_forwarded_for:http请求携带的http信息;$time_local:nginx的时间;

7)Nginx的配置文件

Nginx主配置⽂件 /etc/nginx/nginx.conf 是⼀个纯⽂本类型的⽂件,整个配置⽂件是以区块的形式组织的。⼀般,每个区块以⼀对⼤括号 {} 来表示开始与结束。

//nginx默认配置语法user                                                                //设置nginx服务的系统使⽤⽤户worker_processes                //⼯作进程, 配置和CPU个数保持⼀致error_log                                           //错误⽇志, 后⾯接⼊的是路径pid                                                                 //Nginx服务启动时的pid//events事件模块events  {               //事件模块                                                              worker_connections      //每个worker进程⽀持的最⼤连接数                use                                                                 //内核模型,select,poll,epoll}//⾮虚拟主机的配置或公共配置定义在http{}段内, server{}段外http    {...                             //必须使⽤虚拟机配置站点,  每个虚拟机使⽤⼀个server{}段                'server'    {                                listen  80;             //监听端⼝, 默认80                                server_name     localhost;  //提供服务的域名或主机名                                //控制⽹站访问路径                                'location'  /   {                                                root            /usr/share/nginx/html;          //存放⽹站路径                                                index       index.html  index.htm;              //默认访问⾸⻚⽂件                                }                                //指定错误代码,   统⼀定义错误⻚⾯,   错误代码重定向到新的Locaiton                                error_page          500 502 503 504     /50x.html;                                'location'  =   /50x.html   {                                                root            html;                                }                }                ...                //第⼆个虚拟主机配置                'server'    {                ...                }}

8)Nginx日志配置

//配置语法: 包括: error.log   access.logSyntax: log_format  name    [escape=default|json]   string  ...;Default:                log_format  combined    "...";Context:                http//Nginx默认配置    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';//Nginx⽇志变量$remote_addr                //表示客户端地址$remote_user                //http客户端请求nginx认证⽤户名$time_local                 //Nginx的时间$request                                //Request请求⾏,   GET等⽅法、http协议版本$status                                 //respoence返回状态码$body_bytes_sent                //从服务端响应给客户端body信息⼤⼩$http_referer                           //http上⼀级⻚⾯,    防盗链、⽤户⾏为分析$http_user_agent                //http头部信息, 客户端访问设备$http_x_forwarded_for           //http请求携带的http信息

9)Nginx状态监控

--with-http_stub_status_module 记录 Nginx 客户端基本访问状态信息!
具体配置如下:

    location    /mystatus   {                stub_status on;                access_log  off;}//Nginx_status概述Active  connections:2               //Nginx当前活跃连接数server  accepts handled requests16                  16                  19server表示Nginx处理接收握⼿总次数。accepts表示Nginx处理接收总连接数。请求丢失数=(握⼿数-连接数)可以看出,本次状态显示没有丢失请求。handled requests,表示总共处理了19次请求。Reading                 Nginx读取数据Writing                 Nginx写的情况Waiting             Nginx开启keep-alive⻓连接情况下,    既没有读也没有写,   建⽴连接情况

10)Nginx下载站点

Nginx默认是不允许列出整个目录浏览下载的!

Syntax: autoindex   on  |   off;Default:                autoindex   off;Context:                http,   server, location//autoindex常⽤参数autoindex_exact_size    off;默认为on, 显示出⽂件的确切⼤⼩,单位是bytes。修改为off,显示出⽂件的⼤概⼤⼩,单位是kB或者MB或者GB。autoindex_localtime on;默认为off,显示的⽂件时间为GMT时间。修改为on, 显示的⽂件时间为⽂件的服务器时间。charset utf-8,gbk;默认中⽂⽬录乱码,添加上解决乱码。

配置目录浏览功能

//开启⽬录浏览        location /down {                            root    /usr/share/nginx/html;                            autoindex       on;                            autoindex_localtime     on;                            autoindex_exact_size    off;        }

11)Nginx访问限制

连接频率限制:limit_conn_module请求频率限制:limit_req_module

http协议的连接与请求
HTTP是建⽴在TCP, 在完成HTTP请求需要先建⽴TCP三次握⼿(称为TCP连接),在连接的基础上在HTTP请求。

HTTP协议的连接与请求

HTTP协议版本连接关系
HTTP1.0TCP不能复用
HTTP1.1顺序性TCP复用
HTTP2.0多路复用TCP复用
HTTP请求建立在一次TCP连接基础上;一次TCP请求至少产生一次HTTP请求;
1)Nginx连接限制
//Nginx连接限制语法Syntax:     limit_conn_zone key zone=name:size;Default:    -Context:    httpSyntax: limit_conn  zone    number;Default:    -Context:    http,   server, location//具体配置如下:http    {//http段配置连接限制,  同⼀时刻只允许⼀个客户端IP连接limit_conn_zone $binary_remote_addr zone=conn_zone:10m;                ...                server  {                ...                                     location    /   {                                //同⼀时刻只允许⼀个客户端IP连接                                limit_conn  conn_zone   1;                                }//压⼒测试yum install -y  httpd-toolsab  -n  50  -c  20      http://127.0.0.1/index.html
2)Nginx请求限制
//Nginx请求限制语法Syntax:     limit_req_zone  key zone=name:size  rate=rate;Default:    -Context:    httpSyntax: limit_conn  zone    number  [burst=number]  [nodelay];Default:    -Context:    http,   server, location//具体配置如下:http    {//http段配置请求限制,  rate限制速率,限制⼀秒钟最多⼀个IP请求limit_req_zone  $binary_remote_addr zone=req_zone:10m   rate=1r/s;                ...                server  {                ...                                     location    /   {                                //1r/s只接收⼀个请求,其余请求拒绝处理并返回错误码给客户端                                                limit_req   zone=req_zone;                                //请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量,   多余的请求返回503                                                #limit_req  zone=req_zone   burst=3 nodelay;                                }//压⼒测试yum install -y  httpd-toolsab  -n  50  -c  20      http://127.0.0.1/index.html

连接请求没有请求限制有效?
1)多个请求可以建⽴在⼀次的TCP连接之上, 那么我们对请求的精度限制,当然⽐对⼀个连接的限制会更加的有效;
2)因为同⼀时刻只允许⼀个连接请求进⼊;
3)但是同⼀时刻多个请求可以通过⼀个连接进⼊;
4)所以请求限制才是⽐较优的解决⽅案;

12)Nginx访问控制

基于IP的访问控制:http_access_module基于⽤户登陆认证:http_auth_basic_module
1)基于IP的访问控制
//允许配置语法Syntax: allow   address |   CIDR    |   unix:   |   all;Default:        -Context:    http,   server, location,   limit_except//拒绝配置语法Syntax: deny    address |   CIDR    |   unix:   |   all;Default:        -Context:    http,   server, location,   limit_except//配置拒绝某⼀个IP,    其他全部允许location    ~   ^/1.html    {                root    /usr/share/nginx/html;                index   index.html;                deny    192.168.10.1;                    #注意检查顺序是从上往下                allow   all;}//只允许某⼀个⽹段访问,其它全部拒绝location    /   {                root            html;                index       index.php   index.html  index.htm;                allow           192.168.10.0/24;                deny                all;}

http_access_module局限性:

下图是使⽤http_x_forwarded_for记录真实客户端IP地址以及代理服务器IP

解决方案:
1)采⽤HTTP头信息控制访问, 代理以及web服务开启 http_x_forwarded_for;
2)结合geo模块;
3)通过HTTP⾃动以变量传递;

2)基于用户登录认证
//配置语法Syntax: auth_basic  string| off;Default:    auth_basic  off;Context: http,  server, location,   limit_except//⽤户密码记录配置⽂件Syntax: auth_basic_user_file    file;Default:    -Context:    http,   server, location,   limit_except//需要安装依赖组件[root@nginx ~]# yum install httpd-tools[root@nginx ~]# htpasswd    -c  /etc/nginx/auth_conf    zhangsan     #新创建的用户[root@nginx ~]# htpasswd    -b  /etc/nginx/auth_conf    lisi 123456     #增加用户需使用-b选项并指定密码//可在http,server,location下添加如下信息auth_basic  "请输入用户名及密码!";auth_basic_user_file    /etc/nginx/auth_conf;

用户认证局限性:
1)用户信息依赖文件方式;
2)用户管理文件过多,无法联动;
3)操作管理机械,效率低下;

解决方法:
1)Nginx结合LUA实现高效认证;
2)Nginx结合nginx-auth-ldap模块;

13)Nginx虚拟主机

所谓虚拟主机,在web服务器⾥是⼀个独⽴的⽹站站点,这个站点对应独⽴的域名(也可能是IP或端⼝),具有独⽴的程序及资源⽬录,可以独⽴地对外提供服务供⽤户访问。

1)配置基于域名的虚拟主机
1.创建web站点⽬录[root@nginx conf]#  mkdir   /soft/code/{www,bbs}[root@nginx conf]#  echo    "www"   >   /soft/code/www/index.html[root@nginx conf]#  echo    "bbs"   >   /soft/code/bbs/index.html2.配置虚拟主机[root@nginx conf]#  cat conf.d/{www,bbs}.confserver  {                listen  80;                server_name     www.nginx.com;                root    /soft/code/www;                ...}server  {                ...                listen 80;                server_name     bbs.nginx.com;                root    /soft/code/bbs;}
2)配置不同端⼝访问不同虚拟主机
//仅修改listen监听端⼝即可,  但不能和系统端⼝发⽣冲突server  {                ...                listen 8001;                ...}server  {                ...                listen  8002;                ...}
3)配置虚拟主机别名

所谓虚拟主机别名,就是虚拟主机设置除了主域名以外的⼀个域名,实现⽤户访问的多个域名对应同⼀个虚拟主机⽹站的功能。
以www.nginx.com 域名的虚拟主机为例:为其增加⼀个别名nginx.com时,出现⽹站内容和访问www.nginxi.com 是⼀样的,具体配置如下:

//默认配置[root@nginx ~]# vim /etc/nginx/nginx.confserver  {                listen 80;                server_name www.nginx.com;}//别名配置[root@LNMP  ~]# vim /etc/nginx/nginx.confserver  {                listen  80;                server_name     www.nginx.com   nginx.com;                ...}//使⽤Linux下curl测试结果[root@LNMP  conf]#  curl    nginx.comwww.nginx.com[root@LNMP  conf]#  curl    www.nginx.comwww.nginx.com//访问带www和不带www是⼀样的, 除了别名实现也可以通过rewrite实现

--------本文到此结束,感谢阅读------------

配置 模块 服务 主机 限制 客户 客户端 虚拟主机 信息 用户 服务器 参数 域名 语法 控制 认证 时间 处理 功能 状态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 客户机服务器模式又称为什么模式 涉密网络安全监管 公共信息网络安全侦查 网络安全作业教育平台登录 长乐财务软件开发哪里好 淮北软件开发招聘 软件开发 规范性原则 数据库安全与完整性要求 网络安全人员任命文件 中国服务器简称 银行软件开发考什么条件 软管理服务器部分文件被破坏 为什么阿里服务器没有被黑客攻破 数据库中怎么存放头像 宽城区新时代网络安全答疑解惑 华科网络安全学院研究生招生 软件开发对设备的要求 外国网络安全公益广告 数据库文献怎么引用 英雄联盟打到一半无法连接服务器 西安集创云互联网科技有限公司 软件开发工程师执业环境 高中网络安全手抄报模板大全 网络安全培训机构哪个比较好 制作app数据库怎么解决 我的世界服务器多世界插件 鄂州鄂城区软件开发 华为网络安全认证难不难 数据库的典型操作有哪些 百度时间 服务器
0