使用Nginx解决 前端请求自己电脑跨域的问题(Nginx的安装和配置,使用)

推荐博客

一、nginx的简介:

1.什么是Nginx?

(1)Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
(2)因为它 内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用;

2.什么是代理:此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色;

(1)正向代理:通过代理访问原本不能访问的网站,如Google。正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
(2)反向代理:客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。反向代理,“它代理的是服务端,代服务端接收请求”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
(3)举个例子:
①正向代理:由于防火墙的原因,我们不能直接访问谷歌,那么我们就可以借助VPN来实现,这就是一个的正向代理的例子,客户端知道访问的是谷歌,但是谷歌不知道客户端是通过VPN访问进来的;
②反向代理:当我们在外网访问百度的时候,其实过程中是会进行一次转发,代理到内网中去,这就是反向代理,即反向代理代理的是服务器端,而且这个过程对于客户端是透明的。

3.承载量:能够支撑50000并发连接,并且CPU、内存等资源消耗却非常低,运行非常稳定;

4.Nginx的应用场景:

(1)HTTP服务器:Nginx是一个Http服务可以独立提供http服务,可以做网页静态服务器;
(2)虚拟主机:可以实现一台服务器虚拟出多个网站;
(3)反向代理和负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求,需要用多台服务器集群可以使用Ngnix做反向代理。并且多台服务器可以平均分担请求负载,不会出现因为某个服务器宕机了影响其他的服务,或者某个服务器闲置的情况;

5.Nginx出现的背景:

(1)在互联网没有现在这么火,每个网站所需要支持的并发量不需要太大的时候,最开始使用的是Apache就能够满足要求。但是Apache对高并发不支持,所以它不是高性能的web服务器,因为并发量上万之后,会导致服务器消耗大量的内存,操作系统对其进行进程和线程的切换会消耗大量的CPU资源,导致Http请求的平均响应速度降低。
(2)为了应对现在互联网流程,需要一个高性能的稳定的服务器,Nginx应运而生。

6.为什么Ngnix就能解决互联网高并发的需求呢?

(1)开源,免费的产品;
(2)Nginx使用事件驱动架构,使得它可以支持数以百万级别的TCP链接
(3)Nginx是一个跨批改服务器,可以运行在Linux,Windows,MacOSSierra等主流的操作系统上;
(4)极为稳定;

7.Nginx的优势:

(1)作为Web服务器:相比较Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率。能够支持高达50000个并发连接数的响应;
(2)作为负载均衡服务器:
①Nginx既可以内部直接支持Rails和PHP,也可以支持作为HTTP代理服务器对外进行服务。
②Nginx用C编写,系统资源开销和CPU的使用效率逗比Perlbal要好很多;
(3)Nginx安装简单,配置文件非常简洁(还能够支持perl语法),bugs非常少的服务器:Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月,也不需要重新启动。还能够在不间断服务的情况系,进行软件的升级。
(4)Nginx使用基于时间驱动架构,使得其可以支持数以百万级别的TCP连接。
(5)Nginx是一个跨平台服务器,可以运行在各个操作系统上。

8.Nginx的Master-Worker模式

(1)启动Nginx之后,其实就是在80端口启动了Socker服务进行监听,Nginx设计Master进程和Worker进程。
①Master进程作用:读取并验证配置文件nginx.conf;管理worker进程;
②Worker进程作用:每一个Worker进程都维护一个线程(避免线程的切换),处理连接和请求;其中Worker进程的数量是由配置文件决定的,一般是和CPU的个数(有利于进程的切换)有关,配置几个就有几个Worker进程;

9.Nginx的热部署原理:

(1)什么是热部署?就是在修改了配置文件之后,不需要终端Nginx,也不需要终端请求,就能让配置文件生效的一个动作;
(2)Nginx达到热部署的效果可能通过下面俩种思路?
①方案一:修改配置文件nginx.conf后,主进程master负责推送给woker进程更新配置信息,woker进程收到信息后,更新进程内部的线程信息。(有点valatile的味道)
②方案二:修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。
Nginx采用的就是方案二来达到热部署的!

10.Nginx是如何完成在高并发下的高效处理的?

(1)简单的一条原因就是:Nginx中的worker进程个数和CPU绑定,worker进程内包含一个线程,不出现线程切换的消耗,这一个线程能不停地高效回环处理请求,有助于高效;
(2)另一个:实际上 Nginx是采用了Linux的epoll模型,epoll模型基于事件驱动机制,它可以监听多个事件是否准备完毕,如果OK,那么放入epoll队列中,这个过程是异步的。Worker只需要从epoll队列循环处理即可;
总结:https://blog.csdn.net/hemeinvyiqiluoben/article/details/82256419
通过异步非阻塞的事件处理机制,Nginx实现由进程循环处理的准备好的事件,从而实现高并发和轻量级;

11.Nginx挂了怎么办呢? 如何避免Nginx的单点故障问题? 如何实现高可用?

方案:Keepalived+Nginx实现高可用。
(1)Keepalived是一个高可用解决方案;
(2)Keepalived+Nginx实现高可用的原理:
①第一:请求不直接打到Nginx上,应该先通过Keepalived(就是所谓虚拟IP,VIP);
②第二:Keepalived会监控Nginx的生命状态,(提供一个用户自定义的脚本,定义检查进程状态,进行权重变化,从而实现Nginx的故障切换)。

二、Nginx的安装和使用,解决跨域问题

1. 安装:

http://nginx.org/en/download.html 可以选择下载稳定版;
不用安装 直接启动;

2. 启动Nginx:

(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过(一般不推荐使用,因为可能启动失败)
(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start nginx ,回车即可;

3. 检查Nginx是否启动成功

访问http://localhost:80 得到如下界面:
在这里插入图片描述

4. 配置Nginx:conf目录下的nginx.conf

默认监听的是80 端口,要确认监听端口未被占用

server {
        listen       80;
        server_name  localhost;
		
		location / {             #以/开头的,也就是所有请求都转发
			proxy_pass http://ip:8080;     # 这里的http url一定要写全
			proxy_set_header Host $host;
			index index.html index.htm;
		}
    }

这个网址解释的还行
相当于:
原本想要访问的是:
http://ni.hao/api/getDetail
实际上调试的页面是:http://192.168.11.33:8080/
想要解决跨域问题,就相当于请求的接口是:http://192.168.11.33:8080/api/getDetail
也就是所有请求http://192.168.11.33:8080/ 都转发到请求 http://ni.hao/api上去;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章