nginx反向代理理解
实际开发中,会有不同的环境:
- 开发环境:自己的电脑
- 测试环境:提供给测试人员使用的环境
- 预发布环境:数据是和生成环境的数据一致,运行最新的项目代码进去测试
- 生产环境:项目最终发布上线的环境
如果不同环境使用不同的ip去访问,可能会出现一些问题。为了保证所有环境的一致,在各种环境下都使用域名来访问。
一个域名一定会被解析为一个或多个ip。这一般会包含两步:
- 本地域名解析
浏览器会首先在本机的hosts文件中查找域名映射的IP地址,如果查找到就返回IP ,没找到则进行域名服务器解析,一般本地解析都会失败,因为默认这个文件是空的。
- Windows下的hosts文件地址:`C:/Windows/System32/drivers/etc/hosts`
- Linux下的hosts文件所在路径: `/etc/hosts`
样式:
```shell
# My hosts
127.0.0.1 localhost
0.0.0.0 account.jetbrains.com
127.0.0.1 www.xmind.net
```
- 域名服务器解析
本地解析失败,才会进行域名服务器解析,域名服务器就是网络中的一台计算机,里面记录了所有注册备案的域名和ip映射关系,一般只要域名是正确的,并且备案通过,一定能找到。
虽然域名解决了,但是现在如果我们要访问,还得自己加上端口:`http://api.cms.com:9999/swagger-ui.html`。
项目一般都是直接域名访问:`http://api.cms.com:9999/swagger-ui.html`
这种情况下端口默认是80,如何才能把请求转移到9998端口呢?
这里就要用到:Nginx 它是一个高性能的web和反向代理服务器
nginx可以作为web服务器,但更多的时候,我们把它作为网关,因为它具备网关必备的功能:
==反向代理,负载均衡,动态路由,请求过滤==
外网服务器:是让所有人访问的服务器
内网服务器:必须连入内部的网络才能访问内部的服务器
前端会发很多请求给nginx,也就是说nginx会负载很多请求,此时nginx就成为网关。
正向代理:当你访问谷歌时,无法访问,你会通过翻墙去访问,这实际上是要先连接到vpn的服务器(代理服务器),然后vpn的服务器再去连接到谷歌的服务器,此时你才能访问到。本质上就是用户直接访问谷歌服务器。但是谷歌服务器只知道是代理服务器发出的请求,他不知道具体是哪个用户发出的。本质上来说代理服务器代理的就是一个个的用户,
---正向代理就是代理客户端,服务端不知道实际发起请求的客户端。
通过客户机的配置,实现让一台服务器代理客户机,客户的所有请求都交给代理服务器处理。
反向代理:
用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器。
---反向代理就是代理服务器
当你要访问内网服务器时 你访问不到,此时就需要通过代理服务器去代理你要访问的内网服务器,你只需要访问代理服务器即可访问内网服务器。
当我们要访问的内网服务器ip+端口为172.0.0.3:9999时 那么我们可以将这个内网服务器代理在代理服务器上 代理服务器的ip+端口为172.0.0.3:80 80可以省略, 当你要访问内网服务器时,先访问代理服务器,代理服务器会将其转发到内网服务器上,而80端口可以省略就解决了隐藏端口的效果。
正向代理:访问的服务器不知道是哪个用户在访问,只知道是哪个代理服务器在访问
反向代理:用户不知道具体要访问的是哪个服务器(当然在nginx中可以通过配置特定的域名来确定),只知道访问的哪个代理服务器
nginx反向代理理解的更多相关文章
- Nginx反向代理理解误区之proxy_cookie_domain
基本内容 Nginx做反向代理的时候,我们一般习惯添加proxy_cookie_domain配置,来做cookie的域名转换,比如 ... location /api { proxy_pass htt ...
- nginx反向代理跨域基本配置与常见误区
最近公司前后端分离,前端独立提供页面和静态服务很自然的就想到了用nginx去做静态服务器.同时由于跨域了,就想利用nginx的反向代理去处理一下跨域,但是在解决问题的同时,发现网上有些方案的确是存在一 ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- Nginx反向代理部署指南
一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...
- Linux 下的 Nginx 反向代理配置.
最近实践中遇到了需要利用 nginx 进行反向代理服务器请求的需求,以前没怎么碰触过,因此花了1个多小时,快速阅览了一下nginx官网在反向代理服务中给出的基本定义: 说实话,官网给予的定义是精准的, ...
- Nginx 反向代理、负载均衡
## Nginx 反向代理. (一)简介 一.什么是代理服务器 客户机原本发送给服务器的请求,不会直接发送给服务器,而是先发送给代理服务器:经过代理服务器处理后转发给服务器:服务器数据处理后转回给代理 ...
- CentOS 7 学习(二) 配置Nginx反向代理
CentOS 7 学习(二) 配置Nginx反向代理 Nginx可以通过php-fpm来运行PHP程序,也可以转向apache,让apache调用php程序来运行. 不过对于Nginx来说,其反向代理 ...
- Nginx(三)------nginx 反向代理
Nginx 服务器的反向代理服务是其最常用的重要功能,由反向代理服务也可以衍生出很多与此相关的 Nginx 服务器重要功能,比如后面会介绍的负载均衡.本篇博客我们会先介绍 Nginx 的反向代理,当然 ...
- nginx反向代理-解决前端跨域问题
1.定义 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访 ...
随机推荐
- Codeforces Round #575 (Div. 3) B. Odd Sum Segments 、C Robot Breakout
传送门 B题题意: 给你n个数,让你把这n个数分成k个段(不能随意调动元素位置).你需要保证这k个段里面所有元素加起来的和是一个奇数.问可不可以这样划分成功.如果可以打印YES,之后打印出来是从哪里开 ...
- 牛客编程巅峰赛S1第6场 - 黄金&钻石&王者 B.牛牛摆放花 (贪心)
题意;将一组数重新排序,使得相邻两个数之间的最大差值最小. 题解:贪心,现将所有数sort一下,然后正向遍历,将数分配到新数组的两端,然后再遍历一次维护一个最大值即可. 代码: class Solut ...
- PowerShell随笔5---添加.NET类型
有些情况下,有些脚本命令不能满足我们的需求,而手头却能用C#很方便的实现. 我们就可以把自定义的类型Add到PowerShell中使用,使用方法和PowerShell调用.NET类库方法是一样的. 以 ...
- C#之Dispose
前言 谈到Dispose,首先需要理解C#的资源 资源类型 托管资源:由CLR创建和释放 非托管资源:资源的创建和释放不由CLR管理.比如IO.网络连接.数据库连接等等.需要开发人员手动释放. 如何释 ...
- Linux命令之find命令中的-mtime参数
有关find -mtime的参数解释 mtime参数的理解应该如下: -mtime n 按照文件的更改时间来找文件,n为整数. n表示文件更改时间距离为n天, -n表示文件更改时间距离在n天以内,+n ...
- Java中多线程启动,为什么调用的是start方法,而不是run方法?
前言 大年初二,大家新年快乐,我又开始码字了.写这篇文章,源于在家和基友交流的时候,基友问到了,我猛然发现还真是这么回事,多线程启动调用的都是start,那么为什么没人掉用run呢?于是打开我的ide ...
- codeforces 1076E Vasya and a Tree 【dfs+树状数组】
题目:戳这里 题意:给定有n个点的一棵树,顶点1为根.m次操作,每次都把以v为根,深度dep以内的子树中所有的顶点(包括v本身)加x.求出最后每个点的值为多少. 解题思路:考虑到每次都只对点及其子树操 ...
- codeforces 858A
A. k-rounding time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 二分类问题中混淆矩阵、PR以及AP评估指标
仿照上篇博文对于混淆矩阵.ROC和AUC指标的探讨,本文简要讨论机器学习二分类问题中的混淆矩阵.PR以及AP评估指标:实际上,(ROC,AUC)与(PR,AP)指标对具有某种相似性. 按照循序渐进的原 ...
- js sort map by key
js sort map by key Map map to array // Array.from() Object let obj = {}; for(let key of Object.keys( ...