前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >没想到你是这样的Nginx!

没想到你是这样的Nginx!

作者头像
数据和云
发布2019-07-08 16:57:33
2860
发布2019-07-08 16:57:33
举报
文章被收录于专栏:数据和云数据和云

墨墨导读:Nginx是一个HTTP和反向代理服务,一个邮件代理服务,一个通用的TCP/UDP代理服务。Nginx可以提供HTTP、反向代理服务,邮件代理服务,通用的TCP/UDP代理服务。云和恩墨的zCloud数据库云管平台的微服务端使用Nginx提供HTTP服务,并使用nginx作为内部的反向代理解决自动化部署安装过程中相关组件、文件依赖包下载的问题。(点击“阅读原文”查看更多)

Nginx是什么


Nginx是一个HTTP和反向代理服务,一个邮件代理服务,一个通用的TCP/UDP代理服务。

Nginx基本功能


Nginx基本功能可以分为基本的HTTP服务、高级HTTP服务和邮寄服务三大类。

Nginx提供的基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,通过缓存加速访问;通过FastCGI,uwsgi,SCGI等提供缓存,支持负载均衡和容灾;支持SSL和TLS SNI协议等。

Nginx提供高级的HTTP服务,基于名称和IP的虚拟服务器;基于IP、密码、子请求的访问控制;支持FLV和MP4媒体传输;嵌入perl语言等。

Nginx作为邮件代理服务器支持IMAP、POP3代理服务功能;通过外部HTTP身份验证服务器进行用户身份验证,并将连接重定向到内部SMTP服务器。

我们为什么选择Nginx?


为什么选择Nginx,会必不可少地和Apache服务器做个比较,WEB服务器鼻祖Apache采用的是同步阻塞型的、多进程模型,一个连接对应一个进程,高并发下会消耗大量内存,进程间切换也会消耗大量CPU资源 ;Nginx 采用的是异步非阻塞工作模型,具备高并发、低资源消耗的特性,高度模块化设计使 Nginx 具备很好的扩展性,在处理静态文件、反向代理请求等方面,Nginx 表现出很大的优势。

从netcraft网站最新统计情况可以看到Nginx份额逐渐在升高。已经逐渐接近Apache占用量。

Nginx优点


首先,Nginx支持高并发的同时资源消耗相比其他的服务器要低很多,据统计一般情况下10000个非活跃的HTTP连接在nginx中仅消耗2.5M内存,单机峰值能达到10W连接。

支持热部署,Master管理进程和worker工作进程的分离设计,使得Nginx能够提供热部署功能。

高可靠性能各大网站选择Nginx的基本条件,很多家高流量的网站核心服务器上都大规模使用Nginx。

BSD协议许可,不止允许免费使用,而且允许用户在自己的项目中直接使用或修改nginx源代码。

Nginx优点不止于此,期待各位的发掘。

安装Nginx


获取Nginx

可在http://nginx.org/en/download.html官方网站下载nginx各个版本。可以看到有主流版本(Mainline version),也可以说是开发版本,稳定版本(Stableversion)和过期版本(Legacy versions)。

编译安装Nginx

编译Nginx源代码,需要标准的gcc编译器,还需要automake完成窜国家makefile的工作,依赖一些第三方库,通常有pcre库(支持rewrite模块)、zlib库(支持gzip模块)、openssl库(支持ssl模块)。

代码语言:javascript
复制
yum -y install gcc automake make pcre-devel zlib-devel openssl-devel

下载文件后解压可以看到目录如下:

代码语言:javascript
复制
[root@lsl-test1 nginx-1.16.0]$ ls -l
total 752
drwxr-xr-x. 6 1001 1001   4096 Jun 18 23:19 auto
-rw-r--r--. 1 1001 1001 296223 Apr 23 21:13 CHANGES
-rw-r--r--. 1 1001 1001 451813 Apr 23 21:13 CHANGES.ru
drwxr-xr-x. 2 1001 1001    168 Jun 18 23:19 conf
-rwxr-xr-x. 1 1001 1001   2502 Apr 23 21:12 configure
drwxr-xr-x. 4 1001 1001     72 Jun 18 23:19 contrib
drwxr-xr-x. 2 1001 1001     40 Jun 18 23:19 html
-rw-r--r--. 1 1001 1001   1397 Apr 23 21:12 LICENSE
drwxr-xr-x. 2 1001 1001     21 Jun 18 23:19 man
-rw-r--r--. 1 1001 1001     49 Apr 23 21:12 README
drwxr-xr-x. 9 1001 1001     91 Jun 18 23:19 src

Auto目录放着大量脚本文件和configure脚本程序相关:

  • CHANGES文件存放着本版本的改变,CHANGE.ru是俄语的说明,因为Nginx是俄罗斯人开发的;
  • conf目录放着配置文件;
  • configure文件是Nginx软件的自动脚本程序,检察环境和生成编译代码需要的makefile文件;
  • contrib存放着几个特殊脚本,目录下readme有说明;
  • html存放着两个.html的静态网页文件;
  • man存放了Nginx软件帮助文档;
  • src目录存放了Nginx软件的源代码。

可以看下配置的帮助,每个参数后面都有英文解释

代码语言:javascript
复制
[root@lsl-test1 nginx-1.16.0]$ ./configure  --help
  --help                             print this message
  --prefix=PATH                  set installation prefix
  --sbin-path=PATH             set nginx binary pathname
  --modules-path=PATH        set modules path
  --conf-path=PATH             set nginx.conf pathname
  --error-log-path=PATH       set error log pathname
  --pid-path=PATH               set nginx.pid pathname
  --lock-path=PATH              set nginx.lock pathname
  --user=USER                    set non-privileged user for worker processes
  --group=GROUP                set non-privileged group for worker processes
  --build=NAME                   set build name
  --builddir=DIR                  set build directory
......

使用configure脚本生成make文件

代码语言:javascript
复制
[root@lsl-test1 nginx-1.16.0]$./configure   --sbin-path=/nginx/nginx --conf-path=/nginx/nginx.conf --user=nginx

使用make进行源码编译

代码语言:javascript
复制
make

make install安装Nginx

代码语言:javascript
复制
make install

编译安装完成之后启动Nginx

代码语言:javascript
复制
[root@lsl-test1 contrib]$ nginx
[root@lsl-test1 contrib]$ps -ef|grep nginx
root        8264      1      0 23:30 ?           00:00:00 nginx: master process nginx
nginx      8265   8264   0 23:30 ?          00:00:00 nginx: worker process
root         9068   2726   0 23:47 pts/1    00:00:00 grep --color=auto nginx

可以使用-?或-h查看Nginx具体命令参数

代码语言:javascript
复制
[root@lsl-test1 ~]$ nginx -h
nginx version: nginx/1.15.12
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
  -?,-h         : this help
  -v              : show version and exit
  -V              : show version and configure options then exit
  -t               : test configuration and exit
  -T              : test configuration, dump it and exit
  -q              : suppress non-error messages during configuration testing
  -s signal    : send signal to a master process: stop, quit, reopen, reload
  -p prefix    : set prefix path (default: /etc/nginx/)
  -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

Nginx组成


文件组成

编译后的Nginx主要文件组成有Nginx二进制可执行文件,nginx.conf配置文件,access.log访问日志,error.log错误日志。

这里主要说下nginx.conf配置文件,Nginx和它的模块工作方式由配置文件决定,配置文件默认名为nginx.conf ,放在/usr/local/nginx/conf, /etc/nginx,或者/usr/local/etc/nginx目录下。

下面是Nginx初始化默认的一个配置文件

代码语言:javascript
复制
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    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  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location / {
        }
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
...
}

配置文件由指令和指令块构成,每条指令以分号结尾,指令和参数间以空格分分隔,指令快以大括号{}将所多条指令组织到一起,include语句可以组合多个配置文件。使用#添加注释,提高可队形。使用$符号获取变量。

下面我们看看nginx.conf各个指令块的作用。

1)全局块

全局块是默认配置文件从开始到events块之间的一部分,例如下面节选的部分默认配置文件。主要设置一些影响Nginx服务器整体运行的配置质量,通常包括运行的用户,工作进程数,pid存放路径,日志路径及配置文件等。

代码语言:javascript
复制
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

2)events指令块

Events块设计指令主要是影响Nginx与用户网络连接,主要包括是否允许同时接收多个网络连接,选择哪个事件驱动模型处理请求,每个工作进程支持的最大连接数等。

3)http指令块

Http指令块是Nginx服务器配置中的重要部分。Http指令块中可以包含自己的全局块,也可以包含多个server指令块,server指令块又可以包含location指令块。Http全局块中可以定义MIME_TYPE,文件引入,自定义日志、连接超时时间、连接请求上限数量等。

4)server指令块

Server指令块可以包含多个location指令块,最常见的配置是监听端口配置和服务名称或者IP地址。

5)location指令块

Location指令块可以对特定请求进行处理。地址的定向、数据缓存和应答控制都在这部分实现。

进程组成

Nginx后台进程有一个主进程,和若干个工作进程。主进程的作用是读取和评估配置,并维护工作进程。工作进程处理请求。Nginx依赖事件模型和依靠操作系统机制,有效地分发工作进程间的请求。工作进程数量配置在配置文件中,并且可以修改为给定的配置或者根据CPU核数动态调整进程数。

代码语言:javascript
复制
[root@lslt ~]# ps -ef|grep nginx |grep -v grep
root     21960     1  0 Jun12 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx    21961 21960  0 Jun12 ?        00:00:00 nginx: worker process
nginx    21962 21960  0 Jun12 ?        00:00:00 nginx: worker process
nginx    21963 21960  0 Jun12 ?        00:00:00 nginx: worker process
nginx    21964 21960  0 Jun12 ?        00:00:00 nginx: worker process 

可以看到实际运行进程工作进程和配置文件数量是一致的。

代码语言:javascript
复制
[root@lslt ~]# cat /etc/nginx/nginx.conf |grep work
worker_processes                4;
worker_connections          1024;

Nginx为什么采用管理进程和工作进程分开的模式呢?主要好处有以下两点:

1)主进程不对用户请求提供服务,只用于管理提供服务的工作进程,所以主进程可以是唯一的,可以启停服务、重载配置文件、平滑升级程序等。主进程需要拥有较大的权限,工作进程的权限要小于或等于主进程,这样主进程才可以完全地管理工作进程。当任意一个工作进程出现错误时,主进程可以启动新的工作进程继续服务。

2)多个工作进程可以提供健壮性,一个进程异常后,其他进程可以正常处理请求。更重要的是可以实现多核并发处理。通常推荐工作进程数量和CPU核数相等,这样每个工作进程绑定到CPU核上,进程间切换代价最小。

关于 zCloud


云和恩墨zCloud数据库云服务管理平台,用于帮助客户以更低成本、更快方式、更安全的策略,实现企业私有云或行业云的数据库服务。

zCloud在实现数据库资源云化的基础上,通过标准化、自动化、智能化实现数据库的自动化和智能化运维,减少大型企业中数据库维护人员的日常运维工作,让数据库运维人员减少被动性救火工作,增强数据库运行的稳定性以及提高性能,以达到数据库云平台对数据库服务的SLA要求。

zCloud目前已经在金融、运营商、政府等多个领域有了最佳实践案例,帮助组织构建平稳、高效的数据库管理平台。

编辑:尹文敏

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

help,30万+下载的完整菜单栏

2019DTCC,数据库大会PPT

2018DTCC,数据库大会PPT

2018DTC,2018 DTC 大会 PPT

ENMOBK,《Oracle性能优化与诊断案例》

DBALIFE,“DBA 的一天”海报

DBA04,DBA 手记4 电子书

122ARCH,Oracle 12.2体系结构图

2018OOW,Oracle OpenWorld 资料

产品推荐

云和恩墨Bethune Pro2 企业版,集监控、巡检、安全于一身,你的专属数据库实时监控和智能巡检平台,漂亮的不像实力派,你值得拥有!

云和恩墨zData一体机现已发布超融合版本和精简版,支持各种简化场景部署,零数据丢失备份一体机ZDBM也已发布,欢迎关注。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档