六、Centos7初始化:nginx安装配置,负载均衡,请求,跨域详解

相信来看这篇文章的秃友都已经对nginx有了大致的了解,概念什么的随便一搜都能搜到的东西我也就不赘述了,下面记录下自己的愚见。

背景:

传统的 Web 服务器,每个客户端连接作为一个单独的进程或线程处理,需在切换任务时将 CPU 切换到新的任务并创建一个新的运行时上下文,消耗额外的内存和 CPU 时间,当并发请求增加时,服务器响应变慢,从而对性能产生负面影响。
Nginx 是开源、高性能的Web 和反向代理服务器,支持热部署,能在不间断服务的情况下对软件版本进行热更新,而且配置简单,性能方面是 Nginx 被广泛使用的最大原因,因其占用内存少,并发能力强大,据说能支持5W个并发连接(我也不知道),这么牛**?反正我觉得牛**,而且:免费

使用场景:

1 静态资源服务,通过本地文件系统提供服务;
2 反向代理服务,延伸出包括缓存、负载均衡等;
3 OpenResty (有兴趣可以去了解一下)

请求:

简单请求和复杂请求:
什么是简单请求,有两个条件:
1、请求方法是 HEAD、GET、POST 三种之一;
2、HTTP 头信息不超过这几个字段:Accept、Accept-Language、Content-Language、Last-Event-ID,并且 Content-Type 只限于以下三个值 application/x-www-form-urlencoded、multipart/form-data、text/plain,凡是不同时满足这两个条件的,都属于非简单请求(复杂请求)。浏览器对于简单请求和非简单请求的处理方式不一样。
简单请求:
对于简单请求,浏览器会在头信息中增加 Origin 字段后直接发出,Origin 字段用来说明,本次请求来自的哪个源(协议+域名+端口)。
如果服务器发现 Origin 指定的源不在许可范围内,服务器会返回一个正常的 HTTP 回应,浏览器取到回应之后发现回应的头信息中没有包含 Access-Control-Allow-Origin 字段,就抛出一个错误给 XHR 的 error 事件;
如果服务器发现 Origin 指定的域名在许可范围内,服务器返回的响应会多出几个 Access-Control- 开头的头信息字段。
复杂请求(非简单请求):
非简单请求是指对服务器有特殊要求的请求,比如请求方法是 PUTDELETE,或 Content-Type 值为 application/json。浏览器会在正式通信之前,发送一次 HTTP 预检 OPTIONS 请求,先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些 HTTP 请求方法和头信息字段。只有得到肯定答复,浏览器才会发出正式的 XHR 请求,否则报错。

跨域

这里借用:https://www.jianshu.com/p/f049ac7e2220,这位老哥的🌰,通俗易懂。

http://www.yyy.cn/index.html 调用 http://www.xxxyyy.cn/server.php 非跨域

http://www.xxxyyy.cn/index.html 调用  http://www.xxx.cn/server.php  跨域,主域不同

http://abc.xxxyyy.cn/index.html 调用  http://def.xxx.cn/server.php  跨域,子域名不同

http://www.xxx.cn:8080/index.html 调用  http://www.xxx.cn/server.php  跨域,端口不同

https://www.xxx.cn/index.html 调用  http://www.xxx.cn/server.php  跨域,协议不同

正向代理和反向代理

正向代理: 客户端直接向目标服务器发送请求并获取内容,使用正向代理后,客户端改为向代理服务器发送请求,并指定目标服务器(原始服务器),然后由代理服务器和原始服务器通信,转交请求并获得的内容,再返回给客户端。正向代理隐藏了真实的客户端,为客户端收发请求,使真实客户端对服务器不可见;
🌰:A没钱了,朝B借钱,B想借给他,但是B也没有钱,于是B朝C借了钱之后又把钱借给了A,这里,C并不知道他的钱是借给A了,他只知道他是借给B的,B在此充当的就是正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的,即隐藏了真实的请求客户端。或者是最通俗易懂的例子,FQ(访问google,这里不允许发布FQ相关信息,不懂的自行百度)。
反向代理: 与一般访问流程相比,使用反向代理后,直接收到请求的服务器是代理服务器,然后将请求转发给内部网络上真正进行处理的服务器,得到的结果返回给客户端。反向代理隐藏了真实的服务器,为服务器收发请求,使真实服务器对客户端不可见。一般在处理跨域请求的时候比较常用。现在基本上所有的大型网站都设置了反向代理。
🌰:去饭店吃饭,可以点川菜、粤菜、江浙菜,饭店也分别有三个菜系的厨师 ,但是你作为顾客不用管哪个厨师给你做的菜,只用点菜即可,小二将你菜单中的菜分配给不同的厨师来具体处理,那么这个小二就是反向代理服务器。
一般给客户端做代理的都是正向代理,给服务器做代理的就是反向代理。
在这里插入图片描述
图片来源:https://www.cnblogs.com/taostaryu/p/10547132.html

负载均衡

客户端发送多个请求到服务器,服务器处理请求,其中一部分可能要操作一些资源比如数据库、静态资源等,服务器处理完毕后,再将结果返回给客户端。
这种模式对于早期的系统来说,功能要求不复杂,且并发请求相对较少的情况下还能胜任,成本也低。随着信息数量不断增长,访问量和数据量飞速增长,以及系统业务复杂度持续增加,这种做法已无法满足要求,并发量特别大时,服务器容易崩。
很明显这是由于服务器性能的瓶颈造成的问题,除了再加个几十台机器之外,最重要的做法就是负载均衡。
请求爆发式增长的情况下,单个机器性能再强劲也无法满足要求了,这个时候集群的概念产生了,单个服务器解决不了的问题,可以使用多个服务器,然后将请求分发到各个服务器上,将负载分发到不同的服务器,这就是负载均衡,核心是:分摊压力。Nginx 实现负载均衡,一般来说指的是将请求转发给服务器集群。
🌰:以前在知乎上看到的简单粗暴且形象的解释:你要洗脚,只有一盆水,不管多少水,也只能一个人洗,因为盆就那么大,也可以媳妇先洗你再洗,但是,你娶媳妇了,媳妇也要洗脚,你说你先洗,媳妇说她先洗,这就是单服务器应用,队列。但是问题还是来了,那媳妇不高兴了,问你为啥不能买两个盆???两个洗脚盆,就是两台服务器,就是多服务器应用,但是日子久了,媳妇又说凭什么你先打水,我后打水,那媳妇又不高兴了???为了解决这个问题,在水龙头上挂了个桶,桶两侧各开一个洞,水龙头开了水先流到桶里,然后再分别流到两个盆里,这就是分布式集群。但是时间长了又发现,同样用盆去桶下接水,媳妇的盆接的水总比你的少,原来是因为木桶当初钻洞的时候孔大小不一样,那媳妇又不高兴了,为啥你比我水多???于是,你只好把两个洗脚盆在相同的位置打通,当水量到达一定深度的时候,水会在两个洗脚盆之间流动。这下总和谐了吧,这就是负载均衡。(其实解决这个问题最好的办法就是别找媳妇,程序员不配有这么通情达理的媳妇!上述例子也是)

下面奉上centos7的nginx安装方式
1、安装

yum -y install gcc automake autoconf libtool make
yum install -y yum-utils
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

2、创建 nginx运行用户

groupadd nginx
useradd -g nginx nginx

3、下载 解压 Nginx

wget http://nginx.org/download/nginx-1.15.12.tar.gz
tar -zxvf nginx-1.15.12.tar.gz

4、编译安装

cd nginx-1.15.12
mkdir -p /usr/local/nginx1.15/tem/nginx/client
mkdir -p /usr/local/nginx1.15/tem/nginx/proxy
mkdir -p /usr/local/nginx1.15/tem/nginx/fcgi
./configure \
--prefix=/usr/local/nginx1.15 \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/usr/local/nginx1.15/log/nginx/error.log \
--pid-path=/usr/local/nginx1.15/nginx.pid \
--lock-path=/usr/local/nginx1.15/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--http-log-path=/usr/local/nginx1.15/log/nginx/access.log \
--http-client-body-temp-path=/usr/local/nginx1.15/tem/nginx/client \
--http-proxy-temp-path=/usr/local/nginx1.15/tem/nginx/proxy \
--http-fastcgi-temp-path=/usr/local/nginx1.15/tem/nginx/fcgi \
--with-http_stub_status_module
make && make install

5、启动Nginx

nginx -c /etc/nginx/nginx.conf

6、nginx 配置文件检测

nginx -t -c /etc/nginx/nginx.conf

5、重启Nginx

nginx -s reload
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值