NGINX初级学习笔记

 

 

前言

跟随张一明老师的讲课进入nginx的学习过程。课程建议:

  1. 初中级程序员,只需要学习初级部分。
  2. 架构师、资深研发工程师或者希望向架构师方向努力,需要学习完 本套全部课程。
    所以这篇文章是一个初级部分的学习。

1 NGINX概述

1.1 NGINX是什么

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

NGINX版本
在这里插入图片描述

2 NGINX开源版安装

2.1 虚拟机安装

在这里插入图片描述

2.1.1 系统安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.2 linux配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=10ac735e-0b8f-4b19-9747-ff28b58a1547
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.44.101
NETMASK=255.255.255.0
GATEWAY=192.168.44.1
DNS1=8.8.8.8

在这里插入图片描述
在这里插入图片描述

2.2 NGINX安装

编译安装

./configure --prefix=/usr/local/nginx
make
make install

出现错误或警告— 依赖检查

在这里插入图片描述

yum install -y gcc

提示
在这里插入图片描述
在这里插入图片描述

yum install -y pcre pcre-devel

在这里插入图片描述

yum install -y zlib zlib-devel

接下来执行

make

make install 

启动、停止及关闭防火墙服务

在这里插入图片描述
在这里插入图片描述

安装成系统服务

创建服务脚本

vi /usr/lib/systemd/system/nginx.service

服务脚本内容

[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.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 -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target

重新加载系统服务

systemctl daemon-reload

启动服务

systemctl start nginx.service

开机启动

systemctl enable nginx.service

2.3 NGINX卸载

在这里插入图片描述

  1. 停止Nginx软件
    /usr/local/nginx/sbin/nginx -s stop
    在这里插入图片描述

  2. 查找根下所有名字包含nginx的文件
    find / -name nginx
    在这里插入图片描述

  3. 执行命令 rm -rf 删除nignx安装的相关文件
    说明:全局查找往往会查出很多相关文件,但是前缀基本都是相同,后面不同的部分可以用
    代替,以便快速删除~

  4. 其他设置
    如果设置了Nginx开机自启动的话,可能还需要下面两步
    chkconfig nginx off
    rm -rf /etc/init.d/nginx

3 目录结构与基本运行原理

3.1 目录结构

在这里插入图片描述

conf/nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    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;
        }

}

注意:
nginx查看是否运行:ps -ef |grep nginx
在这里插入图片描述
在这里插入图片描述
然后reboot重启就行了。

3.2 基本运行原理

在这里插入图片描述
master进程不工作,真正工作的是worker进程,master进程是进行读取、校验配置文件的。

4 Nginx配置与应用场景

4.1 最小配置

在这里插入图片描述

在这里插入图片描述

开启后
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 虚拟主机

在这里插入图片描述

4.3 反向代理

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.4 负载均衡策略

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.5 动静分离

动态资源和静态资源。我们像html文件夹一样,单独设置css /js这种存放静态资源的文件夹,通过该location /css location /js单独设置来使得动态资源和静态资源的分离。
在这里插入图片描述
在这里插入图片描述
这样有一个问题,就是会有很多的这种location,那么我们可不可以使用一些方式来进行简单配置呢?
答案是使用正则表达式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.6 UrlRewrite

比如说http://192.168.76.100/login?userid=xxxx&password=xxxx 暴露在地址栏,我们不希望这样,所以进行重写。
http://192.168.76.100/login/1.
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.7 防盗链配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.8 高可用配置

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
第一台机器

! Configuration File for keepalived

global_defs {
   router_id lb1 # 名字与其他配置了keepalive的机器不重复就行
}

vrrp_instance heyingjie {#vrrp实例名可以随意取
    state MASTER #只能有一个默认的Master,其他写BACKUP
    interface ens33 # ip addr查看下网卡名,默认时ens33
    virtual_router_id 51
    priority 100 # 多台安装了keepalived的机器竞争成为Master的优先级
    advert_int 1 #通信时间
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16 #虚拟IP
    }
}

在这里插入图片描述
第二台机器

! Configuration File for keepalived

global_defs {
   router_id lb2 
}

vrrp_instance heyingjie {
    state BACKUP #只能有一个默认的Master,其他写BACKUP
    interface ens33 
    virtual_router_id 51
    priority 50
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16 #虚拟IP
    }
}

在这里插入图片描述

4.9 Https证书配置

不安全的http协议
在这里插入图片描述

对称加密的加密因子是公开的,所以不安全,引出了非对称加密
非对称加密指的就是加密和解密的算法不一致,加密用的是公钥,解密用的是私钥
需要保证以下三点就是合格的非对称加密算法
1、公钥加密,公钥不能解密
2、私钥能解密
3、公钥私钥不一致

非对称加密是https的底层算法,不过还不够安全,一旦伪造服务端,也就是一开始
访问的就是伪造的服务端,我替你去访问了你真实要访问的服务器,然后拦截了真正的公钥
伪造了公钥给你,你用假私钥解密,和我建立了安全链接,我就可以拦截你的数据去篡改了,
然后把篡改后的数据和你要访问的服务器进行链接这个时候就需要引入一个可信任的机构,用这个机构做证人,证明这个发送的机构确实是可以信任的机构
这个机构就是CA机构
具体流程如下

服务器端在未下发证书给用户时,需要先提交资料给CA机构,CA机构和服务器的通讯是非对称算法+CA机构
自己内置的私钥加密的,由于CA机构的私钥不在网络传输,所以非法机构无法获取到,而CA机构的证书下方的
过程中如果被非法机构拦截了,非法机构可以解密,但是无法加密,因为它无法获取CA机构内置的私钥,所以
无法再次加密,而未加密的证书,服务器端是不承认的,这就可以防止,被非法机构拦截了

此时服务器端就直接发送自己的公钥加密数据给用户就可以了,因为非法机构此时获取的是CA机构的公钥,服务端给用户的
也是公钥,公钥是无法解密公钥的,所以可以防止被非法机构窃取

在这里插入图片描述

4.10 自签名

在这里插入图片描述
CA 签名

后记

这里仅仅只是完成了一部分的最简单,最基础的学习,深入学习还需在后续工作中继续。

posted @ 2022-10-26 18:01  hxld  阅读(55)  评论(0编辑  收藏  举报