Nginx的学习之旅

Nginx的学习之旅

1、Nginx的概述

1.1、什么是Nginx

​ Nginx是一个高性能的HTTP和反向代理的web服务器,同时提供IMAP/POP3/SMTP的服务,在BSD-like协议下发行,特点是占据内存少,并发能力强。

1.2、Nginx的适用场景

​ Nginx的三个主要应用场景为:静态资源服务、反向代理服务以及提供API服务。
在这里插入图片描述
​ Web请求流程:一个web请求,会先经过nginx,再到应用服务(如Tomcat、Django),之后访问Redis、或者像Mysql的数据库,提供基本的数据功能。

​ 所遇到的问题:由于我们的应用服务,要求开发效率高,因此运行效率很低,QPS(Queries Per Second,每秒查询率),TPS(Transactions Per Second,每秒事务数)和并发都是受限的,因此需要将很多这样的应用服务组成一个集群,向用户提供高可用性,而很多服务构成集群后,就要求Nginx具有反向代理功能,把动态请求传导给应用服务。而一旦很多应用服务构成集群后就带来了两个需求,第一,需要动态扩容,第二,当有些服务出问题时,需要做容灾,这就要求了反向代理具备负载均衡功能,其次,在这样的链路中,nginx处于企业内网的边缘结点,随着链路的增长,用户体验到的时延加长,因此,就需要将一些用户看起来不变的,或者一段时间内不变的动态内容缓存到nginx中,由nginx直接向用户提供访问,因此反向代理会衍生出缓存,加速访问的效率,再者,很多时候,像访问CSS、Javascript、js文件、和一些小图片等静态资源,是不需要由应用服务提供访问的,只需要通过本地文件中系统放置的资源,直接由nginx提供访问即可。还有,应用服务本身的性能存在很多的问题,但是数据库服务比应用服务好的多,因为其业务场景比较简单,其TPS、并发性能比应用服务好的多,因此,衍生出由nginx直接访问数据库、或者应用服务,利用nginx的高并发,实现一些例如像防火墙等复杂的功能,提供api服务。
在这里插入图片描述

1.3、Nginx的优点

​ Nginx具备以下优点:

  1. 支持高并发连接;
  2. 内存消耗少;
  3. 成本低廉
  4. 配置文件简单
  5. 节省带宽
  6. 稳定性高,支持热部署
  7. 支持Rewrite重写,并内置健康检查功能

1.4、Nginx的四大组成部分

在这里插入图片描述

​ Nginx的四大组成部分分别为:Nginx二进制可执行文件,Nginx.conf配置文件,access.log访问日志和error.log错误日志。

Nginx二进制可执行文件:由Nginx本身的框架,官方模块还有我们编译进去的各种第三方模块一起构建的一个文件,提供所有的功能;
Nginx.conf配置文件:定义了Nginx的处理请求的方式
access.log访问日志:记录下每一条Nginx处理过的Http请求的请求信息和响应信息;
error.log错误日志:出现了一些我们不可预期的一些问题时;可以通过error.log去把问题定位出来

1.5、Nginx的版本选择

​ Nginx官网提供了三个类型的版本:

  1. Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
  2. Stable version:最新稳定版,生产环境上建议使用的版本
  3. Legacy versions:遗留的老版本的稳定版

2、Nginx的安装配置

2.1、Nginx的依赖安装

​ 在Nginx安装之前,需要预先安装好nginx的依赖,对Linux下检查是否安装过某软件包,主要有三种方式分别为:

  1. rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用rpm -qa | grep “软件或者包的名字”。

  2. 以deb包安装的,可以用dpkg -l 看到,如果是查找指定软件包,用dpkg -l | grep “软件或者包的名字”。

  3. 以yum方式安装的,可以用 yum list installed 查找,如果是查找指定包,用yum list installed | grep “软件名或者包名”。

    检查好依赖后,若发现缺少该软件的,则需要安装软件之后,才能继续安装nginx,举个小栗子:

    ##检查是否安装了gcc
    ##yum list installed | grep "gcc"
    [root@localhost sbin]# yum list installed | grep "gcc"
    devtoolset-9-gcc.x86_64                     9.3.1-2.el7                @centos-sclo-rh
    devtoolset-9-gcc-c++.x86_64                 9.3.1-2.el7                @centos-sclo-rh
    gcc.x86_64                                  4.8.5-39.el7               @base    
    gcc-c++.x86_64                              4.8.5-39.el7               @base    
    libgcc.x86_64                               4.8.5-39.el7               @base    
    ##从这里可以发现,gcc已经安装好了,若没有安装,则可以通过 yum -y install gcc这条命令安装。
    ##注意:在安装nginx之前,一点需要先安装gcc、pcre-devel、zlib-devel和openssl-devel
    ##安装这些软件的命令:yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
    

2.2、Nginx的安装

​ nginx的下载地址:https://nginx.org/download/

##通过使用wget命令下载"nginx-1.18.0.tar.gz",并将该压缩包移动到/usr/local目录下

##解压
tar -zxvf nginx-1.18.0.tar.gz

##进入nginx目录
cd nginx-1.18.0

##配置
./configure  --prefix=/usr/local/nginx

#make
make
make install

# cd到刚才配置的安装目录
./sbin/nginx -t

##提示信息
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
------------------------------------------------------------------------------------------------
##错误检查
##检查服务器80端口是否已经打开
[root@localhost sbin]# firewall-cmd --query-port=80/tcp
yes

####如果没有开启,则显示为no,需要执行以下语句
firewall-cmd --add-port=80/tcp --permanent
###重启防火墙
systemctl restart firewalld

##当出现403错误是,有以下几种方法解决:
##第一步,通过查看nginx的错误日志,发现以下问题:
2020/08/20 18:36:53 [error] 6715#0: *11 open() "/home/zfl/nginx/html/favicon.ico" failed (13: Permission denied), client: 192.168.66.106, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.122.1", referrer: "http://192.168.122.1/"

由上述的日志,可以发现,访问失败主要是因为权限问题,原因可能由以下所述:
	1、启动用户和nginx工作用户不一致所致:
	1.1 查看nginx的启动用户的命令如下: ps aux | grep "nginx:worker process" | awk '{print $1}'
	->[root@localhost sbin]# ps aux | grep "nginx:worker process" | awk '{print $1}'
	->root
	1.2 查看conf/nginx.conf配置文件
	配置文件如下:
		user  nobody; #发现用户为nobody,需要改为root
		worker_processes  1;
	1.3 之后需要重现加载配置文件
	
	2、缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件。
	配置文件如下:
		server {  
		listen       80;  
		server_name  localhost;  
		index  index.php index.html;  
		root  /data/www/;
		}
	如果在/data/www/下面没有index.php,index.html的时候,直接文件,会报403 forbidden。
	注意:root与alias的区别,关于更多这两者的信息,可以查阅此博客:
    https://www.cnblogs.com/zhangqunshi/p/6866522.html
	
	3、权限问题,如果nginx没有web目录的操作权限,也会出现403错误。
	解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,重启Nginx即可解决
	3.1  chmod -R 777 /data
	3.2  chmod -R 777 /data/www/

	4、SELinux设置为开启状态(enabled)的原因。
	4.1、查看当前selinux的状态。
      [root@localhost sbin]# sestatus
      SELinux status:                 enabled
      SELinuxfs mount:                /sys/fs/selinux
      SELinux root directory:         /etc/selinux
      Loaded policy name:             targeted
      Current mode:                   permissive
      Mode from config file:          error (Success)
      Policy MLS status:              enabled
      Policy deny_unknown status:     allowed
      Max kernel policy version:      31
	4.2、使用vim /etc/selinux/config命令将SELINUX=enforcing 修改为 SELINUX=disabled 状态。
	4.3、重启生效,命令:reboot。

2.3、Nginx的配置语法

​ Nginx的配置语法遵循以下规则:

1、配置文件有指令和指令块构成;
2、每条指令以;分号结尾,指令与参数之间以空格符号分隔;
3、指令块以{}大括号将多条指令组织在一起;
4、include语句允许组合多个配置文件以提升可维护性;
5、使用#符号添加注释,提高可读性;
6、使用$符号使用变量;
7、部分指令的参数支持正则表达式;

3、初识Nginx命令

3.1、Nginx的启动、关闭与重启

1、Nginx的启动:

##nginx的启动代码为 nginx安装目录地址 -c nginx配置文件地址
[root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2、Nginx的关闭:

##1、从容停止
[root@localhost sbin]# ps -ef | grep nginx ##查看进程号 
root       6420      1  0 18:27 ?        00:00:00 nginx: master process ./nginx
root       6786   6420  0 18:40 ?        00:00:00 nginx: worker process
root       7406   2564  0 19:35 pts/0    00:00:00 grep --color=auto nginx
[root@localhost sbin]# kill -QUIT 6420  ##从容停止,杀死进程
[root@localhost sbin]# ps -ef | grep nginx  ##查看是否已经关闭
root       7416   2564  0 19:36 pts/0    00:00:00 grep --color=auto nginx

##2、快速停止
[root@localhost sbin]# clear
[root@localhost sbin]# ps -ef | grep nginx
root       7490      1  0 19:41 ?        00:00:00 nginx: master process ./nginx
root       7491   7490  0 19:41 ?        00:00:00 nginx: worker process
root       7509   2564  0 19:42 pts/0    00:00:00 grep --color=auto nginx
[root@localhost sbin]# kill -TERM 7490
[root@localhost sbin]# ps -ef | grep nginx
root       7521   2564  0 19:42 pts/0    00:00:00 grep --color=auto nginx

##3、强制停止
[root@localhost sbin]# ./nginx
[root@localhost sbin]# ps -ef | grep nginx
root       7533      1  0 19:44 ?        00:00:00 nginx: master process ./nginx
root       7534   7533  0 19:44 ?        00:00:00 nginx: worker process
root       7536   2564  0 19:44 pts/0    00:00:00 grep --color=auto nginx
[root@localhost sbin]# pkill -9 nginx
[root@localhost sbin]# ps -ef | grep nginx
root       7539   2564  0 19:44 pts/0    00:00:00 grep --color=auto nginx

3、Nginx的重启:

##进入nginx安装目录sbin下,输入命令./nginx -t检测nginx的配置文件是否正确
[root@localhost sbin]# ./nginx -t
nginx: the configuration file /home/zfl/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /home/zfl/nginx/conf/nginx.conf test is successful
##输入./nginx -s reload 或者kill -HUP 进程号,实现nginx的重启
[root@localhost sbin]# ./nginx -s reload

3.2、搭建简单的静态资源服务器

通过nginx可以帮助我们搭建简单的静态资源服务器,以下是搭建服务器的过程:

1、进入nginx安装目录/nginx/conf/目录文件下,通过配置nginx.conf的配置文件,搭建服务
	以下是部分的配置文件信息:
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on; ##开启gzip,可以压缩文件大小
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   /home/zfl/nginx/html;
            index  index.html index.htm;
        }
        
        ##搭建服务
        location /test{
          	alias /home/zfl/dlib;
          	autoindex on; ##开启浏览目录权限
        }

3.3 、Nginx日志切割

​ 由于Nginx的日志文件并没有rotate功能,编写每天生成一个日志,可以利用shell脚本程序,帮助我们切割nginx的日志文件。

第一步:重命名日志文件
第二步:向nginx主进程发送USR1信号,主进程受到信号后,会从配置文件读取日志文件名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值