Nginx--简单介绍

278 阅读8分钟

1、Nginx简单介绍

Nginx(“engine x”)一个具有高性能的HTTP反向代理WEB服务器,同时也是一个POP3/SMTP/IMAP代理服务器,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本,并且伊戈尔·赛索耶夫将Nginx的源码进行了开源,这也为Nginx的发展提供了良好的保障。

Nginx的优点

(1)速度更快、并发更高

单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一方面,在高峰期(如有数以万计的并发请求),Nginx比其他Web服务器更快的响应请求。Nginx之所以有这么高的并发处理能力和这么好的性能原因在于Nginx采用了多进程和I/O多路复用(epoll)的底层实现。

(2)配置简单,扩展性强

Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。

(3)高可靠性

Nginx采用的是多进程模式运行,其中有一个master主进程和N多个worker进程,worker进程的数量我们可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去"拉起"新的worker进程提供服务。

(4)热部署

现在互联网项目都要求以7*24小时进行服务的提供,针对于这一要求,Nginx也提供了热部署功能,即可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能。

2、Nginx安装部署

Nginx的安装方式有两种分别是:YUM安装、Nginx源码安装

1、YUM安装

提前准备的内容

系统内核

准备一个内核为2.6及以上版本的操作系统,因为linux2.6及以上内核才支持epoll,而Nginx需要解决高并发压力问题是需要用到epoll,所以我们需要有这样的版本要求。

依赖包

GCC编译器:Nginx是使用C语言编写的程序,因此想要运行Nginx就需要安装一个编译工具。GCC就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了C语言。使用命令yum install -y gcc来安装,安装成功后,可以通过gcc --version来查看gcc是否安装成功。

PCRE:Nginx在编译过程中需要使用到PCRE库(perl Compatible Regular Expressoin 兼容正则表达式库),因为在Nginx的Rewrite模块和http核心模块都会使用到PCRE正则表达式语法。可以使用命令yum install -y pcre pcre-devel来进行安装,安装成功后,可以通过rpm -qa pcre pcre-devel来查看是否安装成功。

zlib:zlib库提供了开发人员的压缩算法,在Nginx的各个模块中需要使用gzip压缩,所以我们也需要提前安装其库及源代码zlib和zlib-devel,可以使用命令yum install -y zlib zlib-devel来进行安装,安装成功后,可以通过rpm -qa zlib zlib-devel来查看是否安装成功。

OpenSSL:OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,并且避免被窃听。SSL:Secure Sockets Layer安全套接协议的缩写,可以在Internet上提供秘密性传输,其目标是保证两个应用间通信的保密性和可靠性。在Nginx中,如果服务器需要提供安全网页时就需要用到OpenSSL库,所以我们需要对OpenSSL的库文件及它的开发安装包进行一个安装。可以使用命令yum install -y openssl openssl-devel来进行安装,安装成功后,可以通过rpm -qa openssl openssl-devel来查看是否安装成功。上述命令,一个个来的话比较麻烦,可以通过一条命令来进行安装 。

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

使用源码进行简单安装,我们会发现安装的过程比较繁琐,需要提前准备GCC编译器、PCRE兼容正则表达式库、zlib压缩库、OpenSSL安全通信的软件库包,然后才能进行Nginx的安装。

配置yum源文件

 vim /etc/yum.repos.d/nginx.repo
 [nginx-stable]
 name=nginx stable repo
 baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
 gpgcheck=1
 enabled=1
 gpgkey=https://nginx.org/keys/nginx_signing.key
 module_hotfixes=true
 ​
 [nginx-mainline]
 name=nginx mainline repo
 baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
 gpgcheck=1
 enabled=0
 gpgkey=https://nginx.org/keys/nginx_signing.key
 module_hotfixes=true
 yum clean
 yum makecache

查看是否配置成功

 yum list | grep nginx
 ​
 nginx.x86_64                                1:1.20.1-1.el7.ngx         @nginx-stable
 nginx-debug.x86_64                          1:1.8.0-1.el7.ngx          nginx-stable
 nginx-debuginfo.x86_64                      1:1.20.1-1.el7.ngx         nginx-stable
 nginx-module-geoip.x86_64                   1:1.20.1-1.el7.ngx         nginx-stable
 nginx-module-geoip-debuginfo.x86_64         1:1.20.1-1.el7.ngx         nginx-stable
 nginx-module-image-filter.x86_64            1:1.20.1-1.el7.ngx         nginx-stable
 nginx-module-image-filter-debuginfo.x86_64  1:1.20.1-1.el7.ngx         nginx-stable
 nginx-module-njs.x86_64                     1:1.20.1+0.6.2-1.el7.ngx   nginx-stable
 nginx-module-njs-debuginfo.x86_64           1:1.20.1+0.6.2-1.el7.ngx   nginx-stable
 nginx-module-perl.x86_64                    1:1.20.1-1.el7.ngx         nginx-stable
 nginx-module-perl-debuginfo.x86_64          1:1.20.1-1.el7.ngx         nginx-stable
 nginx-module-xslt.x86_64                    1:1.20.1-1.el7.ngx         nginx-stable
 nginx-module-xslt-debuginfo.x86_64          1:1.20.1-1.el7.ngx         nginx-stable
 nginx-nr-agent.noarch                       2.0.0-12.el7.ngx           nginx-stable
 pcp-pmda-nginx.x86_64                       4.3.2-13.el7_9             updates

安装Nginx

 yum install -y nginx

验证

查看nginx的安装位置:

 whereis nginx

安装包是否下载:

 rpm -qa |grep nginx

查看安装参数:

 nginx -V
 ​
 nginx version: nginx/1.20.1
 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
 built with OpenSSL 1.0.2k-fips  26 Jan 2017
 TLS SNI support enabled
 configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

启动命令:

 nginx

2、Nginx源码安装

提前准备的内容

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

Nginx安装

Nginx的官方网站为: nginx.org

Download下载页面:nginx.org/en/download…

下载源码包:

 wget https://nginx.org/download/nginx-1.20.1.tar.gz

解压缩:

 tar -zxvf nginx-1.20.1.tar.gz
 cd nginx-1.20.1

配置命令configure

 ./configure

编译

 make

安装

 make install

查看安装参数:

 /usr/local/nginx/sbin/nginx -V
 
 nginx version: nginx/1.20.1
 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
 configure arguments:

Nginx源码编译命令详解

通过./configure来对编译参数进行设置,需要我们手动来指定。那么都有哪些参数可以进行设置,接下来我们进行一个详细的说明。

PATH:是和路径相关的配置信息

with:是启动模块,默认是关闭的(例如 --with-select_module、--with-http_ssl_module)

without:是关闭模块,默认是开启的(例如 --without-http_gzip_module、--without-http_proxy_module)

我们先来认识一些简单的路径配置已经通过这些配置来完成一个简单的编译:

--prefix=PATH

 指向Nginx的安装目录,默认值为/usr/local/nginx   

--sbin-path=PATH

 指向(执行)程序文件(nginx)的路径,默认值为<prefix>/sbin/nginx

--modules-path=PATH

 指向Nginx动态模块安装目录,默认值为<prefix>/modules

--conf-path=PATH

 指向配置文件(nginx.conf)的路径,默认值为<prefix>/conf/nginx.conf

--error-log-path=PATH

 指向错误日志文件的路径,默认值为<prefix>/logs/error.log

--http-log-path=PATH

 指向访问日志文件的路径,默认值为<prefix>/logs/access.log

--pid-path=PATH

 指向Nginx启动后进行ID的文件路径,默认值为<prefix>/logs/nginx.pid

--lock-path=PATH

 指向Nginx锁文件的存放路径,默认值为<prefix>/logs/nginx.lock

3、Nginx目录结构

在使用Nginx之前,我们先对安装好的Nginx目录文件进行一个分析,我们通过tree命令很去查看centos系统上的文件目录结构,如果想使用tree工具,就得先通过yum install -y tree来进行安装,安装成功后,可以通过执行tree /usr/local/nginx(tree后面跟的是Nginx的安装目录),获取的结果如下:

image-20210928105532345

conf:nginx所有配置文件目录

*.default 为备份文件

CGI(Common Gateway Interface)通用网关【接口】,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用调用CGI【程序】处理及相应结果给客户端的一种标准规范。

fastcgi.conf:fastcgi相关配置文件

fastcgi_params:fastcgi的参数文件

scgi_params:scgi的参数文件

uwsgi_params:uwsgi的参数文件

mime.types:记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系

mime.types.default:mime.types的备份文件

nginx.conf:这个是Nginx的核心配置文件,这个文件非常重要,也是我们即将要学习的重点

nginx.conf.default:nginx.conf的备份文件

koi-utf、koi-win、win-utf这三个文件都是与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码

html:存放nginx自带的两个静态的html页面

50x.html:访问失败后的失败页面

index.html:成功访问的默认首页

logs:记录入门的文件,当nginx服务器启动后,这里面会有 access.log error.log 和nginx.pid三个文件出现

sbin:是存放执行程序文件nginx

nginx是用来控制Nginx服务的命令执行文件。