nginx入门 - 学习笔记(ing)

一、初识

1、相关概念

1)正向代理

一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标,然后代理向原始服务器转交请求并将获得内容返回给客户端。
在这里插入图片描述

2)反向代理

位于用户与目标服务器之间,但是对于用户而言,反向代理服务器相当于目标服务器,即用户值机额访问反向代理服务器就可以获得目标服务器的资源。用户不需要知道目标服务器的地址,也无需在用户端做任何设定。
在这里插入图片描述

3)负载均衡

指将负载进行平衡、分摊到多个操作单元上进行运行。
在这里插入图片描述

4)动静分离

在web服务器结构中,将静态页面与动态页面或者静态内容接口和动态内容接口分来不同系统访问的架构设计方法,进而提升整个服务器的访问性能和可维护性。

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

2、安装

nginx官网
在这里插入图片描述

Linux版本官方安装步骤:
在这里插入图片描述

安装成功:
在这里插入图片描述
安装时存在的问题指路:
linux安装nginx遇到的报错

安装后的资源目录:

类型路径
nginx.conf配置文件etc/nginx/nginx.conf
nginx启动脚本etc/sysconfig/nginx
nginx logvar/log/nginx
nginx pidvar/run/nginx.pid

3、虚拟主机配置

1、配置文件

//查看安装路径
nginx -t

在这里插入图片描述

#设置worker进程的归属  用户 用户组
#user  nobody;
#指定worker进程数 自动
worker_processes  1;

# 设置错误日志的位置
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# 指定master进程编号 存储的位置
#pid        logs/nginx.pid;


events {
	#单个worker进程最大的连接数
    worker_connections  1024;
}


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

    #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;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    
    client_max_body_size 100M;
   
    #gzip  on;

    #一个server就是一个服务
    server {
        listen       80;
        server_name  lcoalhost;

        location / {
			#当前web服务资源存放的位置
            root html;
			index index.html index.html;
        }
		
		#error_page 404    				/404.html;
		error_page 500 502 503 504      /50x.html;
		location = /50x.html{
			root html;
		}
    }
}

4、配置域名

在安装nginx目录下,创建文件夹study、work、relex,并创建文件index.html

在上面配置文件中添加server

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


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

    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;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        server_name  study.com;
		root /etc/nginx/study;

        location / {
			index index.html; 
        }
    }
    server {
        listen       80;
        server_name  relex.com;
		root /etc/nginx/relex;

        location / {
			index index.html; 
        }
    }    
	server {
        listen       80;
        server_name  work.com;
		root /etc/nginx/work;

        location / {
			index index.html; 
        }
    }
}

以Linux为例,本机去测试。
C:\Windows\System32\drivers\etc中找到host文件,添加192.168.21.129 study.com relex.com work.com
ip地址可以使用ip addr查询
直接访问配置的域名即可。
在这里插入图片描述
三个域名通过CDN服务解析出来的IP应该是同一个,Nginx会根据请求的域名来调用对应的服务来处理请求

4、location匹配规则

location会根据用户请求中的url来匹配上面的/URI表达式,如果可以匹配,选择location{}块中的配置来处理用户请求。

location[=|~*]/uri/ {

}
~标识一个正则匹配,区分大小写
~*标识执行一个正则匹配,不区分大小写
=进行普通字符精确匹配
注意/和{之间的空格

优先级:
在这里插入图片描述

实际使用配置:

//代理
location =/ {
	procy_pass http://tomcat:8080/index
}
//静态文件请求
//目录匹配
location ^~/static/ {
	root/webroot/static/;
}

//后缀匹配
location ~*\.(gif|jpg|jpeg|png|css|js|ico)$  {
	root/webroot/res/;
}
//通用规则,用来转发动态请求到后端应用服务器,非静态文件请求默认是动态
location /  {
	procy_pass http://tomcat:8080/
}

二、应用实战

1、实现反向代理

主要就是在配置文件中,配置

server{
	listen 80;
	server_name localhost;
	location /  {
		#这里的i地址是服务器的地址,端口是项目	
		proxy_pass http://192.168.20.1:8081;
		#提交方式
		proxy_method POST;
	}
}

注意这里的代理请求方式
在这里插入图片描述
在这里插入图片描述

用于将客户端请求转发给后端服务器或负载均衡器,并传递一些请求头信息,以便于日志记录或保留客户端信息

#在localtion中加入
			#将客户端请求的Host头部设置为变量的值,保存客户端请求的服务器名称
			proxy_set_header HOST $host;
			#保存客户端请求的协议(HTTP/HTTPS)
            proxy_set_header X-Forwarded-Proto $scheme;
            #将客户端的真实IP地址传递给后端服务器,而不考虑请求是否经过了代理或负载均衡器
            proxy_set_header X-Real-IP $remote_addr;
            #所有经过的代理服务器的IP地址都追加到 X-Forwarded-For 字段中,以便后端服务器能够获取整个请求链上的IP地址信息
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • 如果你只关心客户端的真实IP地址,而不需要了解请求的传递路径,可以使用 proxy_set_header X-Real-IP
    $remote_addr; 这个指令,将客户端的真实IP地址直接传递给后端服务器。
  • 如果你需要了解请求的传递路径以及所有经过的代理服务器的IP地址,可以使用 proxy_set_header X-Forwarded-For
    $proxy_add_x_forwarded_for; 这个指令,将整个请求链上的IP地址信息传递给后端服务器。

2、负载均衡

  • 网络负载均衡的大致原理是利用一定的分配策略将网络负载平衡的分摊大网络集群的哥哥操作单元上,使得单个重负载任务能够分担到多个单元上进行处理,使得大量并发访问或数据流量分担到多个单元上分别处理,从而减少用户的等待响应时间
  • upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡
#负载均衡配置
upstream web_test {
#服务器列表
  server 192.168.20.1:8081;
  server 192.168.20.1:8082;
   server 192.168.20.1:8083;
}

server{
	listen 80;
	server_name localhost;
	location /  {
	#和upstream是对应的
		proxy_pass http://web_test ;
	}
}
  • server 192.168.20.1:8081 down; 当前服务器停用
  • server 192.168.20.1:8081 backup; 当前服务器是备用服务器
  • server 192.168.20.1:8081 weight; 当前server负载过重,权重越大被请求几率越大,默认是1

3、负载均衡策略

1)轮询

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
会出现会话不一致的问题

2)IP Hash

如果是同一个IP,就分配到一个后端服务器中

在upstream 中加入 ip_hash;

3)权重

服务器性能不一样,性能好的承担更多
可以指定轮询比率,weight和访问几率成正比

server 192.168.20.1:8081 weight=1;
server 192.168.20.1:8082 weight=2;
server 192.168.20.1:8083 weight=3;

4、动静分离

location ~* .(.jpg|png|js|css|gif){

静态资源存放的路径包

root static;
#过期时间
expires 1d;
}

5、原理分析

1)进程模型分析

  • 多进程方式:进程之间是独立的,如果要保证数据的一致性,就要进程之间的数据复制,资源开销增大
  • 多线程方式:共享内存,
  • 异步方式:客户端发送请求到服务器,可以立马操作其他业务
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2)热部署

/sbin/nginx -c conf/nginx.conf -s reload
在这里插入图片描述

3)worker进程处理请求

在这里插入图片描述
![!](https://img-blog.csdnimg.cn/2bc7fed9360d499dab59cb254d3245c3.png)
master:管理进程,不负责具体的业务处理,接受外界信号,向worker进程发送信号
worker:具体处理用户请求的,数量可以设置,一般和cpu个数一样

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/54986.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot整合mybatis分页(使用pagehelper 分页插件)-- 学习若依系统

学习文档&#xff08;参考若依系统&#xff09; 若依的文档&#xff1a;http://doc.ruoyi.vip/ruoyi-vue/document/htsc.html#%E5%88%86%E9%A1%B5%E5%AE%9E%E7%8E%B0 就不从零搭建springboot项目了&#xff0c;直接在自己的项目基础上引入。 1、引入的依赖 <!-- pagehel…

【ChatGPT辅助学Rust | 基础系列 | Cargo工具】Cargo介绍及使用

文章目录 前言一&#xff0c;Cargo介绍1&#xff0c;Cargo安装2&#xff0c;创建Rust项目2&#xff0c;编译项目&#xff1a;3&#xff0c;运行项目&#xff1a;4&#xff0c;测试项目&#xff1a;5&#xff0c;更新项目的依赖&#xff1a;6&#xff0c;生成项目的文档&#xf…

xml的学习笔记

学习视频&#xff1a;093-尚硅谷-xml-什么是XML以及它的作用_哔哩哔哩_bilibili 目录 XML简介 XML的作用 XML语法 1.文档声明 2.xml注释 3.元素标签 4.xml属性 5.语法规则 1.所有xml元素都须有关闭标签(也就是闭合) 2.xml 标签对大小写敏感 3.xml必须正确的嵌套 4…

8.泛型

目录 1 基本使用 2 多个泛型 3 泛型约束 3.1 数组 3.2 extends约束 3.3 用泛型约束泛型 4 泛型接口 5 ts中的数组用的就是泛型 6 泛型类 7 常用泛型工具类型 7.1 让所有属性变为可选属性 Partial 7.2 将所有属性都变为只读属性 Readonly 7.3 从指定类…

【LeetCode】不同路劲(动态规划)

不同路劲 题目描述算法流程编程代码 链接: 不同路劲 题目描述 算法流程 编程代码 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m 1,vector<int>(n 1));dp[1][0] 1;for(int i 1;i < m;i){for(int j 1;j < n…

用于视觉跟踪的在线特征选择研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

深入理解MVVM架构模式

MVVM原理 MVVM是一种用于构建用户界面的软件架构模式&#xff0c;它的名称代表着三个组成部分&#xff1a;Model&#xff08;模型&#xff09;、View&#xff08;视图&#xff09;和ViewModel&#xff08;视图模型&#xff09;。MVVM的主要目标是将应用程序的UI与其底层数据模…

认清现实重新理解游戏的本质

认清现实重新理解游戏的本质 OVERVIEW 认清现实重新理解游戏的本质现实两条小路的启发四个动机1.当前的学习任务或工作任务太艰巨2.完美主义3.对未来太过于自信/无知4.大脑小看未来的收益 四个方法1.让未来的收益足够巨大2.让未来的收益感觉就在眼前3.玩游戏有恶劣的结果4.玩游…

idea模块的pom.xml被划横线,不识别的解决办法

目录 问题&#xff1a; 解决办法&#xff1a; 1.打开设置 2. 取消勾选 3.点击确认 4.解决 问题提出&#xff1a; 写shi山的过程中&#xff0c;给模块取错名字了&#xff0c;改名的时候不知道点到了什么&#xff0c;一个模块的pom.xml变成灰色了&#xff0…

听说 Spring Bean 的创建还有一条捷径?

文章目录 1. resolveBeforeInstantiation1.1 applyBeanPostProcessorsBeforeInstantiation1.2 applyBeanPostProcessorsAfterInitialization1.3 案例 2. 源码实践2.1 切面 Bean2.2 普通 Bean 在 Spring Bean 的创建方法中&#xff0c;有如下一段代码&#xff1a; AbstractAutow…

【shell】获取ping的时延数据并分析网络情况及常用命令学习

文章目录 获取ping的时延数据并分析网络情况|、||、&、&&辨析teetailkillall 获取ping的时延数据并分析网络情况 网络情况经常让我们头疼&#xff0c;每次都需要手动在终端ping太麻烦了&#xff0c;不如写个脚本ping并将数据带上时间戳存入文件&#xff0c;然后也…

华为数通HCIA-华为VRP系统基础

什么是VRP? VRP是华为公司数据通信产品的通用操作系统平台&#xff0c;作为华为公司从低端到核心的全系列路由器、以太网交换机、业务网关等产品的软件核心引擎。 VRP提供以下功能&#xff1a; 实现统一的用户界面和管理界面 实现控制平面功能&#xff0c;并定义转发平面接口…

前端学习——Vue (Day6)

路由进阶 路由的封装抽离 //main.jsimport Vue from vue import App from ./App.vue import router from ./router/index// 路由的使用步骤 5 2 // 5个基础步骤 // 1. 下载 v3.6.5 // 2. 引入 // 3. 安装注册 Vue.use(Vue插件) // 4. 创建路由对象 // 5. 注入到new Vue中&…

无涯教程-jQuery - load( url, data, callback)方法函数

load(url&#xff0c;data&#xff0c;callback)方法从服务器加载数据&#xff0c;并将返回的HTML放入匹配的元素中。 load( url, [data], [callback] ) - 语法 [selector].load( url, [data], [callback] ) 这是此方法使用的所有参数的描述- url - 包含请求发送到…

【JMeter】JMeter添加插件

目录 一、前言 二、插件管理器 三、推荐插件 1.Custom Thread Groups &#xff08;1&#xff09;Ultmate Thread Group &#xff08;2&#xff09;Stepping Thread Group 2.3 Basic Graph 资料获取方法 一、前言 ​ 在我们的工作中&#xff0c;我们可以利用一些插件来帮…

数据结构:快速的Redis有哪些慢操作?

redis 为什么要这莫快&#xff1f;一个就是他是基于内存的&#xff0c;另外一个就是他是他的数据结构 说到这儿&#xff0c;你肯定会说&#xff1a;“这个我知道&#xff0c;不就是 String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、 Hash&#xff08…

(文章复现)梯级水光互补系统最大化可消纳电量期望短期优化调度模型matlab代码

参考文献&#xff1a; [1]罗彬,陈永灿,刘昭伟等.梯级水光互补系统最大化可消纳电量期望短期优化调度模型[J].电力系统自动化,2023,47(10):66-75. 1.基本原理 1.1 目标函数 考虑光伏出力的不确定性&#xff0c;以梯级水光互补系统的可消纳电量期望最大为目标&#xff0c;函数…

uni-app:实现分页功能,单击行获取此行指定数据,更改行样式

效果&#xff1a; 分段解析代码 分页功能实现&#xff1a; 一、标签 1、搜索栏-模糊查询 <!-- 搜索框--><form action"" submit"search_wip_name"><view class"search_position"><view class"search"><…

uniapp 小程序实时且持续获取定位信息(全局设置一次)(单页面监听定位改变)(不采用定时器)

本篇文章实现了uniapp 微信小程序实时获取定位信息,小程序打开即可持续获取定位信息, 位置更新也会触发相关自定义事件 优点 只设置一次不采用定时器的方式无需多个页面调用单独页面若想获取当前位置是否变化 可单独设置监听,并调用不同逻辑事件 原理: 采用uniapp推出的: un…

数据结构——单链表OJ题

单链表OJ题 前言一、删除链表中等于给定值 val 的所有节点二、反转一个单链表三、返回链表的中间结点四、输出该链表中倒数第k个结点五、将两个有序链表合并六、链表的回文结构七、将链表分割成两部分八、找出第一个公共结点九、判断链表中是否有环总结 前言 在前面的博客中我…