Nginx实现反向代理
写在前面通过前面的学习,我们已经对Nginx有了一个初步的认识,那么接下来将通过实际的例子来学习Nginx如何实现反向代理。
反向代理入门演示在实际工作中,服务器最常用的功能就是反向代理。使用反向代理后,直接收到请求的服务器是代理服务器,然后代理服务器将请求转发给内部网络上真正进行处理的服务器,并将得到的结果返回给客户端。也就是说,反向代理隐藏了真实的服务器,为服务器收发请求,使真实服务器对客户端不可见。反向代理一般用在需要处理跨域请求的时候,现在基本上大型的网站都设置了反向代理,下面简单介绍一下如何实现反向代理。
(1)考虑到后续的效果演示,这里修改之前在nginx.conf主文件中的导入配置,之前只是导入了vhost目录下的某个名为envythink.com.conf的配置文件,而在实际工作中肯定需要导入多个,因此将其修改为如下所示的信息:
1include vhost/*.conf;
(2)在/usr/local/nginx/conf/vhost目录下新建一个名为envy.com.conf的配置文件,其中的代码如下所示:
1234567891011# /usr/local/ngi ...
Nginx虚拟主机
写在前面在了解了Nginx相关的基础知识后,接下来将正式进入Nginx的实战内容。首先来学习Nginx的虚拟主机,这是后续学习其他知识的基础。
虚拟主机概念虚拟主机,在Web服务中可以理解为是一个独立的网站站点,这个站点具有“独立的域名”(所谓的独立域名可以是真的不同域名和IP地址,也可以是同一域名的不同端口),独立的程序和资源目录,可以独立的向外提供服务。
类型既然前面说了“独立的域名”的不同含义,因此这里的类型就是对实际“独立的域名”的解释和分类:(1)基于域名的虚拟主机:采用不同的域名来区分不同的虚拟主机或者对外提供服务;(2)基于端口的虚拟主机:采用相同的域名,但是以不同的端口来区分不同的虚拟主机或者对外提供服务;(3)基于IP的虚拟主机:采用不同的IP地址来区分不同的虚拟主机或者对外提供服务,这种方式在生产中使用的较少;
以上三种类型可以单独使用,也可以混合使用,具体如何使用需要结合具体场景来选择。
虚拟主机配置实例为了更好的学习和使用Nginx虚拟主机,这里分别对前面介绍的基于域名的虚拟主机、基于端口的虚拟主机和基于IP的虚拟主机这三种方式进行实战练习。
基于域名的虚拟主机 ...
Nginx主配置文件
写在前面考虑到Nginx主配置文件的重要性和日常使用的高频率,这里专门拿出一篇文章来深入学习nginx.conf主配置文件,灵活配置nginx.conf主配置文件是学好Nginx的关键所在。
Nginx配置文件在nginx目录下有一个conf目录,里面存放的都是与Nginx配置相关的文件,一般来说我们修改的都是名为nginx.conf的主配置文件。该配置文件由若干个部分组成,每个大括号{}表示一个部分,每行指令都由分号结束;,用于表示一行的结束。去除nginx.conf主配置文件中的注释代码,完整的内容如下所示:
12345678910111213141516171819202122232425262728worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepa ...
Nginx安装和功能模块介绍
写在前面本篇学习如何在CentOS7上安装Nginx,并在此基础上了解Nginx强大的功能模块、目录结构和文件等信息。
Nginx安装这里以Centos7系统为例,介绍如何在Linux系统上安装Nginx。
第一步,安装相应的依赖。依次执行如下命令:
12yum -y install pcre-develyum -y install openssl openssl-devel
第二步,下载Nginx。使用如下命令:
1wget http://nginx.org/download/nginx-1.17.0.tar.gz
第三步,解压下载的Nginx目录。使用如下所示的命令:
1tar -zxvf nginx-1.17.0.tar.gz
之后并进入到该解压后的文件中,依次执行如下命令来编译和安装Nginx:
123./configuremakemake install
之后使用whereis命令可以发现Nginx默认被安装在/usr/local/nginx目录下。
第四步,启动Nginx。进入到/usr/local/nginx/sbin目录下,执行./nginx命令即可启动nginx。
第 ...
Nginx简介
写在前面我们知道在传统的Web服务器中,每个客户端连接需要一个单独的进程或者线程来处理,在切换任务的时候需要将CPU切换到新的任务并创建一个新的运行时上下文,这样不仅会消耗额外的内存还会花费一定的CPU时间。当并发请求增加时,服务器负担将会加重,进而对性能产生一定影响。而本文将学习的Nginx服务器则很好的解决了这个问题。
Nginx简介Nginx是一个高性能的HTTP(处理静态文件)和反向代理(负载均衡)服务器,也是一个IMAP/POP3/SMTP代理服务器。现在大部分的Web服务器都使用Nginx作为负载均衡器。
Nginx特点(1)速度更快。在单次请求下会得到更快的响应,而在高并发环境下,Nginx比其他Web服务器有更快的响应。(2)高扩展性。Nginx基于模块化设计,由多个耦合度极低的模块组成,具有很高的扩展性。这种强扩展性,非常适合高流量的网站系统。(3)高可靠性。Nginx的可靠性来源于其核心代码的优秀设计,模块设计的简单性。Nginx官方提供的常用模块非常稳定,每个worker进程相对独立,master进程在一个worker进程出错时可以快速拉起一个新的worker子进 ...
索引原理
写在前面在前面我们对一些常用的数据检索算法和数据结构进行了学习,后面还遗留了B-树和B+树,因此接下来就开始学习这些知识。
B-树B-树读作B杠树,B-树是在平衡二叉树(AVL)上进化而来的,前面学习的几种树,每个节点上只有一个元素,而B-树节点中可以存放多个元素,其目的是为了降低树的高度。
一棵m阶的B-Tree有如下特点:(1)每个节点最多有m个孩子,m称为b树的阶;(2)除了根节点和叶子节点外,其它每个节点至少有Ceil(m/2)个孩子;(3)若根节点不是叶子节点,则至少有2个孩子;(4)所有叶子节点都在同一层,且不包含其它关键字信息;(5)每个非终端节点包含n个关键字(键值)信息;(6)关键字的个数n满足:ceil(m/2)-1 <= n <= m-1;(7)ki(i=1,…n)为关键字,且关键字升序排序;(8)Pi(i=1,…n)为指向子树根节点的指针。P(i-1)指向的子树的所有节点关键字均小于ki,但都大于k(i-1)。
B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块。为了描述B-Tree,首先定义一条记录为一个二元的数组[key, data] , ...
索引入门和检索算法
写在前面从本篇开始就正式进入到MySQL的索引学习,索引非常重要,也是后续学习MySQL优化的基础。
本文主要的学习内容如下:(1)索引定义;(2)磁盘中数据的存取;(3)MySQL中的页;(4)数据检索过程;(5)数据检索过程;(6)常用数据结构;(7)文章总结。
索引索引定义索引是依靠某些数据结构和算法来组织数据,最终引导用户快速检索出所需要的数据。
可以看到索引有两个特点:(1)通过数据结构和算法来对原始的数据进行一些有效的组织;(2)通过有效的组织,可以引导用户快速检索出所需要的数据。
其实也就是说索引的本质,是通过不断缩小想获取数据的范围来筛选出最终想要的结果,同时将随机事件变成顺序事件,即使用索引使得我们总能使用同一种查找方式来锁定数据。
磁盘中数据的存取由于数据最终是存储在磁盘内,因此这里以机械键盘为例,来学习磁盘中的几个概念。
(1)扇区。磁盘存储的最小单位,扇区一般大小为512Byte;(2)磁盘块。文件系统与磁盘交互的的最小单位(计算机系统读写磁盘的最小单位),一个磁盘块由连续几个(2^n)扇区组成,块一般大小一般为4KB;(3)磁盘读取数据。磁盘读取数据靠的是机械 ...
异常捕获及处理
写在前面其实在书写存储过程的时候,你已经发现可能会存在一些问题,如“插入的数据违反唯一约束,导致插入失败”、“插入或者更新数据超过字段最大长度,导致操作失败”、“update影响行数和期望结果不一致”等问题。当遇到上述各种异常问题的时候,需要我们捕获异常,并可能回滚当前事务。由于事务在前面已经进行了学习,因此这里主要就学习如何处理异常,也会使用到游标,通过游标来遍历select查询的结果集,然后对每行数据进行处理。
本文主要的学习内容如下:(1)异常分类;(2)内部异常;(3)外部异常;(4)乐观锁解决并发修改数据出错;(5)update影响行数和期望结果不一致时的处理;(6)文章总结。
数据准备为了后续学习的必要,这里先准备了一张数据表book4,相应的建表语句如下所示:
12drop table if exists book4;create table book4(a int primary key);
异常分类MySQL中的异常分为内部异常和外部异常。
在执行SQL语句的时候,可能违反了MySQL的一些约束,导致MySQL内部报错,这些异常是由MySQL内部抛出的,因此称之为My ...
游标学习
写在前面前面对存储过程、函数和流程控制语句进行了学习,接下来再学习另一个知识点—游标。当我们需要对一个select语句的查询结果进行遍历时,就可以使用游标来进行遍历,之后就可以对每行数据进行处理。
本文的主要内容如下:(1)游标定义;(2)游标作用;(3)游标作用;(4)游标的使用语法;(5)单游标示例;(6)游标过程详解;(7)嵌套游标示例;(8)文章总结。
数据准备为了后续学习的必要,这里先准备了三张数据表envy1、envy2和envy3,相应的建表语句如下所示:
12345678910111213141516drop database if exists envythink;create database envythink;use envythink;drop table if exists envy1;create table envy1(a int,b int);insert into envy1 values(1,2),(3,4),(5,6);drop table if exists envy2;create table envy2(a int);insert into ...
流程控制语句
写在前面上一篇文章主要对存储过程和自定义函数进行了学习,可以发现这些逻辑都是较为简单的,但是在实际工作中的业务逻辑远比这复杂,因此需要使用到流程控制语句,那么本篇就来学习MySQL中流程控制语句相关内容。
本文的主要内容如下:(1)if函数;(2)if函数示例;(3)case结构;(4)case结构—类似于Java中的switch语句;(5)case结构—类似于Java中的多重if语句;(6)if结构;(7)if结构示例;(8)循环控制;(9)while循环;(10)repeat循环;(11)loop循环;(12)文章总结。
数据准备为了后续学习的必要,这里先准备了一张数据表t_user,相应的建表语句如下所示:
123456789101112use envythink;drop table if exists t_user;create table t_user( id int primary key comment '编号', sex tinyint not null default 1 comment '性别:1男,2女', name ...