nginx 资料整理(一)

在这里插入图片描述

官网 https://nginx.org/

1. 简介

nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,Nginx 的首个公开版本是在2004年10月4日发布的0.1.0,这个版本是Nginx历史上的一个重要里程碑,标志着Nginx正式进入了公开发行的历史舞台。

目前,Nginx 的主流版本包括 1.181.211.26等,这些版本提供了稳定和安全的功能,是大多数生产部署的首选。

Nginx 以其出色的性能高效的内存使用简单的配置低成本的维护著称。它在高并发连接下表现优秀,可以处理数以百万计的静态文件请求,并且可以配置为提供反向代理服务,负载平衡和缓存功能。

作为web服务器,nginx的全球市场占有率逐渐上升,可以看到最新的统计报告,nginx已经遥遥领先
在这里插入图片描述
各版本使用占比
在这里插入图片描述

统计来自 https://w3techs.com

那么nginx可以做什么呢?

  • 简单的网站示意图
    在这里插入图片描述

nginx主要功能包括

  • web服务器
  • 反向代理
  • 负载均衡
  • 前置缓存服务器等

下面我们将对部分功能进行详细介绍

2. web服务器

nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。nginx的并发能力确实在同类型的网页服务器中表现较好。

从严格意义上讲,nginx 主要作为静态页面的 web 服务器,同时支持 CGI 协议的动态语言,比如 perl、php 等,这也就组成了常说的LNMP网络架构模型。虽然不支持Java 程序,但能通过与 tomcat 配合完成,这个也就是LNMT网络架构模型。nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。

衍生产品Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。它的目的是打造一个高效、安全的Web平台。在大部分情况下,Tengine和nginx的命令,参数及配置文件是通用的。

2.1 相关文件

笔者服务器系统是Centos 7.9epel源中nginx版本是1.20.1

[root@backup-svr-01 share]# yum list nginx
nginx.x86_64                                                               1:1.20.1-10.el7                                                               @epel

如果需要其他版本的nginx,可以在官网下载安装

yum安装中nginx的相关文件

[root@backup-svr-01 share]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.20.1
/usr/share/doc/nginx-1.20.1/CHANGES
/usr/share/doc/nginx-1.20.1/README
/usr/share/doc/nginx-1.20.1/README.dynamic
/usr/share/doc/nginx-1.20.1/UPGRADE-NOTES-1.6-to-1.10
/usr/share/licenses/nginx-1.20.1
/usr/share/licenses/nginx-1.20.1/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/en-US
/usr/share/nginx/html/icons
/usr/share/nginx/html/icons/poweredby.png
/usr/share/nginx/html/img
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/nginx/modules
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx
/var/log/nginx/access.log
/var/log/nginx/error.log

ngx核心目录及文件

文件或目录说明
/etc/nginx/ngx的配置文件目录
/etc/nginx/nginx.confngx主配置文件
/etc/nginx/conf.d/子配置文件目录
/etc/nginx/conf.d/*.conf子配置文件
/usr/sbin/nginxngx管理命令,大多使用nginx -t进行配置文件语法检查
/usr/share/nginx/htmlngx默认的站点目录
/var/log/nginxngx日志存放目录
/var/log/nginx/access.logngx默认的访问日志
/var/log/nginx/error.logngx默认的错误日志

ngx其他目录及文件

文件或目录说明
/etc/logrotate.d/nginxngx日志切割的配置文件(使用默认即可)
/etc/nginx/fastcgi_params包含了FastCGI应用程序所需的最基本参数,大多用于和php连接使用
/etc/nginx/fastcgi.conf包含了更高级的FastCGI参数,可以用于优化FastCGI应用程序的性能
/etc/nginx/uwsgi_params用于和python连接使用
/etc/nginx/mime.types媒体类型,http协议中的文件类型
/usr/lib/systemd/system/nginx.servicesystemctl管理nginx的配置文件
/usr/lib64/nginx/modules模块目录,用于存放 Nginx 的第三方模块。这些模块可以扩展 Nginx 的功能

2.2 主配置文件

########### 每个指令必须有分号(;)结束。#################
######################### 全局块 ###############################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
######################### 全局块 ###############################

######################### events块 ###############################
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
######################### events块 ###############################

######################### http块 ###############################
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}
######################### http块 ###############################

nginx的主配置文件由三部分组成

  1. 全局块(events之前的部分)
  2. events块(events{…})
  3. http块(http{…})
1. 全局块(events之前的部分)
######################### 全局块 ###############################
#user nginx nginx;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
######################### 全局块 ###############################

从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令,主要包括:

1)运行Nginx服务器的用户(组);
2)允许生成的Worker进程数;worker_processes 2;这是Nginx并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。
3)进程PID存放路径;
4)日志存放路径和类型;
5)配置文件的引入等

2. events块(events{…})

nginx采用的异步非阻塞的事件驱动机制。

######################### events块 ###############################
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
######################### events块 ###############################

events块涉及的是Nginx服务器与用户的网络连接,常用的设置包括:

1)是否开启对多worker进程下的网络连接进行序列化;
2)是否允许同时接收多个网络连接;
3)选取哪种事件驱动模型来处理连接请求;
4)每个worker进程可以同时支持的最大连接数(即上文的worker_connections);

该部分对Nginx性能影响较大,在实际中应该灵活配置。

3. http块(http{…})

定义HTTP协议的处理行为。

######################### http块 ###############################
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}
######################### http块 ###############################

这部分是nginx服务器配置中最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块配置都放在这里。

http块又包括:

  1. http全局块
  2. server块

一个http块可以嵌套多个server块,一个server就代表一个虚拟主机或host(Web服务器),例如www.cnblogs.com(一个host是指一个完整IP或三级、四级域名组)

  1. http全局块server块以外部分),全局块配置的指令包括:
  1. 文件引入(include)
  2. MIME-TYPE定义
  3. 日志自定义
  4. 连接超时时间
  5. 单链接请求数上限等
  1. server块(server{…})
    该块与虚拟主机有密切联系,从逻辑上看,虚拟主机与一台独立的硬件主机没什么区别(访问一个主机的两种方式:IP、域名)。每个http块可以包括多个server块,而每个server块就相当于一个WEB服务器。每个server块分为全局server块、location块。
server {                                           
        listen       80;                           
        server_name  localhost;                        
        location / {                               
            root   html;                           
            index  index.html index.htm;               
        }                              
        error_page   500 502 503 504  /50x.html;           
        location = /50x.html {                     
            root   html;                       
        }
    }

server块又包括

  • server全局块
  • location块

server全局块
最常见的配置是

1)本虚拟机的监听配置(listen项)
2)本虚拟机的名称或IP配置(server_name项)。

location块
一个server块可以配置多个location块。

这块的主要作用是基于Nginx服务器收到的请求字符串(如server_name/url-string),对server_name之外的字符串(如url-string)进行匹配,对匹配到的请求进行处理。地址定向、数据缓存、应答控制等功能。还有许多第三方模块的配置也在该处进行。

各大块简单介绍完,nginx的主配置文件看起来应该是这样的

全局块

events块 {
  ...
}


http块 {
    http全局块

    server块 {
        server全局块
        location块  {
          ...
        }

        location块  {
          ...
        }
        ...
    }

    server块 {
        server全局块
        location块  {
          ...
        }

        location块  {
          ...
        }
        ...
    }
    ...
}

2.3 子配置文件

在生产环境中,我们的一台服务器可能配置多个虚拟主机,也就是多个网站。这时,我们把虚拟主机(也就是server块)从主配置文件中移出到/etc/nginx/conf.d/目录中,并且指定*.confconf结尾的文件为子配置文件。这样做的好处就是很清晰,每个配置文件对应一个虚拟主机,也就是一个网站。

主配置文件中,我们在http全局块中加入include语句

http {
...
    include /etc/nginx/conf.d/*.conf;
...
}

子配置文件中,我们主要配置server块

[root@web-svr-01 conf.d]# cat /etc/nginx/conf.d/www.test.cn.conf
server {
        listen       80;
        server_name  localhost;

        location / {
            root   /data/html;
            index  index.html index.htm;
        }

        }

检查语法,重新加载nginx

[root@web-svr-01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web-svr-01 conf.d]# systemctl reload nginx

写个简单的首页文件,并进行测试

[root@web-svr-01 conf.d]# cat /data/html/index.html
hello, this is test rsync
[root@web-svr-01 conf.d]# curl -H Host:www.test.cn.conf 192.168.202.131
hello, this is test rsync
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值