侧边栏壁纸
博主头像
LYMTICS

海纳百川,有容乃大

  • 累计撰写 45 篇文章
  • 累计创建 37 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

Nginx学习笔记(一):介绍和基本使用

LYMTICS
2022-02-08 / 0 评论 / 0 点赞 / 90 阅读 / 5,641 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-02-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Nginx学习笔记(一):介绍和基本使用

学习资源:

参考了其对应的学习资料,并进行重排、总结和补充。

介绍

Nginx

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

优点:

  1. 速度更快、并发更高
  2. 配置简单,扩展性强
  3. 高可靠性
  4. 热部署
  5. 成本低、BSD许可证

反向代理

正向代理: 举个例子,你用游戏加速器玩国外的游戏

image

反向代理: 你访问的经过反向代理到其他的地方

image-20220206162648027

其他服务器

Tomcat: Tomcat是一个运行Servlet和JSP的Web应用软件,Tomcat技术先进、性能稳定而且开放源代码,因此深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。但是Tomcat天生是一个重量级的Web服务器,对静态文件和高并发的处理比较弱。

Apache: Apache的发展时期很长,同时也有过一段辉煌的业绩。从上图可以看出大概在2014年以前都是市场份额第一的服务器。Apache有很多优点,如稳定、开源、跨平台等。但是它出现的时间太久了,在它兴起的年代,互联网的产业规模远远不如今天,所以它被设计成一个重量级的、不支持高并发的Web服务器。在Apache服务器上,如果有数以万计的并发HTTP请求同时访问,就会导致服务器上消耗大量能存,操作系统内核对成百上千的Apache进程做进程间切换也会消耗大量的CUP资源,并导致HTTP请求的平均响应速度降低,这些都决定了Apache不可能成为高性能的Web服务器。这也促使了Lighttpd和Nginx的出现。

Lighttpd: Lighttpd是德国的一个开源的Web服务器软件,它和Nginx一样,都是轻量级、高性能的Web服务器,欧美的业界开发者比较钟爱Lighttpd,而国内的公司更多的青睐Nginx,同时网上Nginx的资源要更丰富些。

基本使用

安装

安装工具安装

sudo apt install nginx

自己编译安装

提前准备:

  • GCC: Nginx是使用C语言编写的程序,因此想要运行Nginx就需要安装一个编译工具。GCC就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了C语言。

  • PCRE: Nginx在编译过程中需要使用到PCRE库(perl Compatible Regular Expressoin 兼容正则表达式库),因为在Nginx的Rewrite模块和http核心模块都会使用到PCRE正则表达式语法。

  • zlib: 提供了开发人员的压缩算法,在Nginx的各个模块中需要使用gzip压缩,所以我们也需要提前安装其库及源代码zlib和zlib-devel

  • openssl: OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,并且避免被窃听。

    SSL:Secure Sockets Layer安全套接协议的缩写,可以在Internet上提供秘密性传输,其目标是保证两个应用间通信的保密性和可靠性。在Nginx中,如果服务器需要提供安全网页时就需要用到OpenSSL库,所以我们需要对OpenSSL的库文件及它的开发安装包进行一个安装。

一键安装上述:

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

开始安装:

  1. 进入官网查找需要下载版本的链接地址,然后使用wget命令进行下载

    wget http://nginx.org/download/nginx-1.21.6.tar.gz
    
  2. 建议大家将下载的资源进行包管理

    mkdir -p nginx/core
    mv nginx-1.21.6.tar.gz nginx/core
    
  3. 解压缩

    tar -xzf nginx-1.21.6.tar.gz
    
  4. 进入资源文件中,发现configure,通过执行这个文件生成配置信息

    chmod +x ./configure
    ./configure
    
  5. 编译并安装

    make && make install
    
  6. 如果没有指定,默认安装在 /usr/local/nginx 目录

image

差别

通过命令 nginx -V 查看Nginx的版本和配置信息

发现自己编译安装的没有配置参数

image

apt 安装的带许多参数:

image

编译安装带参数

在上述目录中执行下命令查看参数:

./configure --help

共有三类:

  • PATH:是和路径相关的配置信息
  • with:是启动模块,默认是关闭的
  • without:是关闭模块,默认是开启的

例如:

./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--modules-path=/usr/local/nginx/modules \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/usr/local/nginx/logs/nginx.lock

卸载

步骤一:需要将nginx的进程关闭

./nginx -s stop

步骤二:将安装的nginx进行删除

rm -rf /usr/local/nginx

步骤三:将安装包之前编译的环境清除掉

make clean

目录解释

压缩包的目录

image

解释:

  • auto:存放的是编译相关的脚本
  • CHANGES: 版本变更记录
    CHANGES.ru: 俄罗斯文的版本变更记录
  • conf: nginx默认的配置文件
  • configure: nginx软件的自动脚本程序,是一个比较重要的文件,作用如下:
    (1)检测环境及根据环境检测结果生成C代码
    (2)生成编译代码需要的Makefile文件
  • contrib: 存放的是几个特殊的脚本文件,其中README中对脚本有着详细的说明
  • html: 存放的是Nginx自带的两个html页面,访问Nginx的首页和错误页面
  • LICENSE: 许可证的相关描述文件
  • man: nginx的man手册
  • README: Nginx的阅读指南
  • src: Nginx的源代码

nginx的目录

image

解释:

conf目录下:

  • .default 后缀的是同名文件的副本,便于回复
  • win-utfkio-utfkoi-win:编码转换有关
  • mine.types:配置MIME类型和TYPE之间关联
  • nginx.conf:核心配置文件
  • CGI: (Common Gateway Interface) 通用网关【接口】,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用调用CGI【程序】处理及相应结果给客户端的一种标准规范。
    • fastcgi.conffastcgi_params:fastcgi相关配置文件和参数
    • 同理,还有scgiuwsgi

html目录下:

  • index.html:首页
  • 50x.html:错误时的页面

logs目录下:

  • access.log:访问日志
  • error.log:错误日志
  • nginx.pid:进程PID

sbin目录:

  • 是存放执行程序文件nginx,用来控制Nginx的启动和停止等相关的命令。

启停命令

信号控制

Nginx中的master和worker进程:

前面在提到Nginx的高性能,其实也和它的架构模式有关。Nginx默认采用的是多进程的方式来工作的,当将Nginx启动后,我们通过ps -ef | grep nginx命令可以查看到如下内容:

image

我们现在作为管理员,只需要通过给master进程发送信号就可以来控制Nginx,这个时候我们需要有两个前提条件:

  1. 要操作的master进程的PID

    通过 ps 命令获取,或上述的 /usr/local/nginx/logs/pid.log 日志文件

  2. 信号

    信号作用
    TERM/INT立即关闭整个服务
    QUIT"优雅"地关闭整个服务
    HUP重读配置文件并使用服务对新配置项生效
    USR1重新打开日志文件,可以用来进行日志切割
    USR2平滑升级到最新版的nginx
    WINCH所有子进程不在接收处理新连接,相当于给work进程发送QUIT指令

格式: kill -signal PID

案例:

kill -TERM 1
#或
kill -TERM `cat /usr/local/nginx/logs/nginx.pid`

kill -INT PID 
#或
kill -INT `cat /usr/local/nginx/logs/nginx.pid`

命令行控制

通过Nginx安装目录下的sbin下的可执行文件 nginx 来控制Nginx的状态

image

  • 前三行,不用说就能看懂

  • -t-T-q:检查配置是否正确,差别上面已经说的很清了

  • -s:发送一个信号
    stop[快速关闭,类似于TERM/INT信号的作用]

    quit[优雅的关闭,类似于QUIT信号的作用]

    reopen[重新打开日志文件类似于USR1信号的作用]

    reload[类似于HUP信号的作用]

  • -p-c-e:如上所示

  • -g:用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置

版本升级

如果想对Nginx的版本进行更新,或者要应用一些新的模块,最简单的做法就是停止当前的Nginx服务,然后开启新的Nginx服务。

但是这样会导致在一段时间内,用户是无法访问服务器。

为了解决这个问题,我们就需要用到Nginx服务器提供的平滑升级功能。这个也是Nginx的一大特点,使用这种方式,就可以使Nginx在7*24小时不间断的提供服务了。

准备不同版本的Nginx:

# 进入版本一的安装目录
./configure
make && make install

# 进入版本二的安装目录
./configure
make
# 此时会在当前目录生成一个 obj 文件夹

Nginx信号

第一步: 将1.14.2版本的sbin目录下的nginx进行备份

cd /usr/local/nginx/sbin
mv nginx nginxold

第二步: 将Nginx1.16.1安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下

cd ~/nginx/core/nginx-1.16.1/objs
cp nginx /usr/local/nginx/sbin

第三步: 发送信号USR2给Nginx的1.14.2版本对应的master进程

第四步: 发送信号QUIT给Nginx的1.14.2版本对应的master进程

kill -QUIT `more /usr/local/logs/nginx.pid.oldbin`

安装目录的make命令

第一步: 将1.14.2版本的sbin目录下的nginx进行备份

cd /usr/local/nginx/sbin
mv nginx nginxold

第二步: 将Nginx1.16.1安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下

cd ~/nginx/core/nginx-1.16.1/objs
cp nginx /usr/local/nginx/sbin

第三步: 进入到安装目录,执行make upgrade

设置系统服务

vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx web service
Documentation=http://nginx.org/en/docs/
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=default.target

添加完成后如果权限有问题需要进行权限设置

chmod 755 /usr/lib/systemd/system/nginx.service

使用系统命令来操作Nginx服务

启动: systemctl start nginx
停止: systemctl stop nginx
重启: systemctl restart nginx
重新加载配置文件: systemctl reload nginx
查看nginx状态: systemctl status nginx
开机启动: systemctl enable nginx

配置环境变量

修改/etc/profile文件

vim /etc/profile
在最后一行添加
export PATH=$PATH:/usr/local/nginx/sbin

使之立即生效

source /etc/profile

关于Linux环境变量的更多信息,参考:Linux环境变量配置全攻略

0

评论区