IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx -> 正文阅读

[系统运维]Nginx

Docker安装Nginx

1.下载Nginx镜像

docker pull nginx:latest

2.创建本地目录方便数据卷映射

  • 创建目录结构如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.配置文件修改

  • nginx.conf修改配置
#user nobody; #主模块命令,指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行
worker_processes  1; #指定Nginx要开启的进程数

#error_log  logs/error.log; #定义全局错误日志文件的路径和日志名称
#error_log  logs/error.log  notice; #日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,面crit(严重)输出日志最少。默认是error
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; #用来指定进程id的存储文件位置

#设定nginx的工作模式及连接数上限
events {
    use epoll; #其中参数use用来指定nginx的工作模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式,
			#nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll
			#其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于linux系统,epoll是首选
    worker_connections  1024; #设置nginx每个进程最大的连接数,默认是1024,所以nginx最大的连接数max_client=worker_processes * worker_connections。
}

http {
    include       mime.types; #主模块命令,对配置文件所包含文件的设定,减少主配置文件的复杂度,相当于把部分设置放在别的地方,然后在包含进来,保持主配置文件的简洁
    default_type  application/octet-stream; #默认文件类型,当文件类型未定义时候就使用这类设置的

	#指定nginx日志的格式
    #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  logs/access.log  main;

    sendfile        on;        #开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝
    #tcp_nopush     on;        #开启TCP_NOPUSH套接字(sendfile开启时有用)

    #keepalive_timeout  0;    #客户端连接超时时间
    keepalive_timeout  65;

    #gzip  on;             #设置是否开启gzip模块
    include /etc/nginx/conf.d/*.conf;    #  ****以包含的方式加入其它配置文件
}
  • location.conf
#下面是server段虚拟主机的配置
server {

	listen       80;    #虚拟主机的服务端口
	server_name  127.0.0.1;     #用来指定ip或者域名,多个域名用逗号分开

	location  / {        
				#地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以location命令对nginx进行动态和静态网页过滤处理
				root   /usr/share/nginx/html;                   #虚拟主机的网页根目录
				index  index.html index.htm;   #默认访问首页文件
			}

}

4.启动nginx

docker run --name nginx1 -p 81:80 -v D:\dockercontainers\nginx\nginx.conf:/etc/nginx/nginx.conf    -v D:\dockercontainers\nginx\conf.d:/etc/nginx/conf.d  -v D:\dockercontainers\nginx\html:/usr/share/nginx/html -d nginx

1.网页的路径:/usr/share/nginx/html
2.配置文件:/etc/nginx/nginx.conf 
3.日志路径:/var/log/nginx
	注意:nginx中日志访问不到,因为重定向,需要通过docker logs 容器id

5.进入容器

docker exec -it nginx1 /bin/bash

6.测试访问静态页面

  • nginx动静分离
    在这里插入图片描述

命令

1.关闭Nginx

  • ./nginx -s stop:快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
  • ./nginx -s quit:平稳关闭Nginx,保存相关信息,有安排的结束web服务

2.指定配置文件,替代缺省的

  • nginx -c filename:指定配置文件来代替缺省的
  • ./nginx -c nginx.conf的文件:指定配置文件位置,如果不指定,默认为NGINX_HOME/conf/nginx.conf

3.其他

  • ./nginx -s reload重新加载配置而重载
  • nginx -s reopen:重新打开日志文件
  • nginx -t不运行,仅仅测试配置文件;nginx将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
  • nginx -V:显示nginx的版本,编译器版本和配置参数

特点

1.正向代理与反向代理的区别

  • 正向代理
    在这里插入图片描述
  • 反向代理(Nginx)
    在这里插入图片描述

2.Nginx的Master-Worker模式

  • nginx可以在服务器不关闭的情况下刷新配置,那如何实现呢?
  • 可以通过Zookeeper的监听机制,但是这样的话,每次使用nginx都还好带一台Zookeeper服务器,不好
  • 接下来看看Nginx如何做

  • 使用主从架构
    在这里插入图片描述

查看主进程与子进程

  • 在docker安装ps命令
apt-get update && apt-get install procps

在这里插入图片描述

  • 在nginx容器内查看 ps aux|grep nginx
    在这里插入图片描述

3.Nginx采用linux的epoll模型做到高并发下的高效处理 5w/s

  • 配置
    在这里插入图片描述
  • epoll模型基于事件驱动机制,可监控多个事件是否准备完毕,如果OK那么放入epoll队列中,这个过程是异步的worker只需从epoll队列循环处理即可
  • epoll也叫多路复用,准备完毕的进队,这时worker才处理
ABC三个老师,他们都要帮助一个班级的学生解决课堂作业中的问题
老师A采用从第一排开始一个学生一个学生轮流解答的方式,老师A浪费了很多时间,并且有的学生作业还没有完成老师就来了,反反复复效率极慢
老师B是一个忍者,他发现老师A的方法行不通,于是他使用了影分身术,分身出好几个自己同一时间去帮好几个同学回答问题,最后还没回答完,老师B消耗光了能量累倒了
老师C比较精明,他告诉学生,谁完成了作业举手,有举手的同学他才去指导问题,他让学生主动发声,分开了“并发”

4. Keepalived+Nginx实现高可用,避免单点故障问题

  • Nginx前再加一层Keepalived来维护心跳
    在这里插入图片描述

5.利用nginx完成对访问资源的动静分离

  • 静态资源放在nginx/html目录下
  • 动态资源请求转发给后端

6.nginx是轻量级

  • Nginx仅保留了HTTP需要的模块,其他都用插件的方式,后天添加
  • 适合二次开发, 如阿里巴巴Tengine

7.总结nginx作用

  • 负载均衡
  • 动静分离
  • 页面缓存
  • 反向代理

配置详情

1.nginx.conf

  • 典型的分段配置文件
    在这里插入图片描述

2.全局配置模板

user                    #设置nginx服务的系统使用用户
worker_processes        #工作进程数 一般情况与CPU核数保持一致
error_log               #nginx的错误日志
pid                     #nginx启动时的pid

events {
    worker_connections    #每个进程允许最大连接数
    use                   #nginx使用的内核模型
}

3.http配置模板

# http段配置信息
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
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;   # Nginx访问日志存放位置

    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;   # 默认文件类型

    include /etc/nginx/conf.d/*.conf;   # 加载子配置项
}

4.server配置模板

http {
    ... ...        # http 配置项目
    
    # server段配置信息
    server {
     listen       80;       # 配置监听的端口
     server_name  localhost;    # 配置的域名
      
     # location段配置信息
     location / {
      root   /usr/share/nginx/html;  # 网站根目录
      index  index.html index.htm;   # 默认首页文件
      deny 172.168.22.11;   # 禁止访问的ip地址,可以为all
      allow 172.168.33.44;# 允许访问的ip地址,可以为all
     }
     
     error_page 500 502 503 504 /50x.html;  # 默认50x对应的访问页面
     error_page 400 404 error.html;   # 同上
    }
    
    server {
        ... ... 
    } 
}

5.upstream负载均衡配置

  • 配置模板
#服务器列表
upstream balanceServer {
    server 宿主机IP:服务port;
    server 10.1.22.34:12345;
    server 10.1.22.35:12345;
}

server { 
	listen 80; #虚拟机服务端口
    server_name  yingshename; #多个用,分开
    	#防止域名冲突,需配置域名映射 C:\Windows\System32\drivers\etc\hosts中做域名映射:127.0.0.1 yingshename
    	#访问地址:http://yingshename:81/请求---> yingshename被负载均衡替换
    
	location /api {
			proxy_pass http://请求; #负载均衡配置
		}
}
  • 寻找宿主机IP(每个人不一样)
server配置时需要知道宿主机ip地址 --> 发现docker提供全局变量host.docker.internal,全局变量中存了宿主机IP,但是不敢确认)
为确认宿主机IP,ping host.docker.internal --> 又发现docker中没有装这个命令
一次性装好ip addr/ifconfig/ping命令 --> apt update && apt install -y iproute2 && apt install -y net-tools && apt install -y iputils-ping
装好后,在nginx中开始ping --> 终于找到宿主机IP
  • 负载均衡算法
1.轮询(默认)
	upstream nginx {
		server 172.17.0.4:8081;
		server 172.17.0.5:8081;
		}
2.weight
	upstream nginx {
		server 172.17.0.4:8081 weight=2;
		server 172.17.0.5:8081 weight=1;
		}
3.ip_hash
	upstream nginx {
		ip_hash;
		server 172.17.0.4:8081;
		server 172.17.0.5:8081;
		}

6.常用的内置全局变量

在这里插入图片描述

7.以上配置完后需要nginx -s reload

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-06 17:33:28  更:2022-06-06 17:34:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 19:47:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码