本文旨在用最通俗的语言讲述最枯燥的基本知识
nginx作为一个高性能的web服务器,想必大家垂涎已久,蠢蠢欲动,想学习一番了吧,语法不多说,网上一大堆。下面博主就nginx的非常常用的几个功能做一些讲述和分析,学会了这几个功能,平常的开发和部署就不是什么问题了。因此希望大家看完之后,能自己装个nginx来学习配置测试,这样才能真正的掌握它。前方高能,文末有福利。
文章提纲:
正向代理
反向代理
透明代理
负载均衡
静态服务器
nginx的安装
一点点小福利
正向代理
正向代理:内网服务器主动去请求外网的服务的一种行为
光看概念,可能有读者还是搞不明白:什么叫做“正向”,什么叫做“代理”,我们分别来理解一下这两个名词。
正向:相同的或一致的方向
代理:自己做不了的事情或者自己不打算做的事情,委托或依靠别人来完成。
借助解释,回归到nginx的概念,正向代理其实就是说客户端无法主动或者不打算完成主动去向某服务器发起请求,而是委托了nginx代理服务器去向服务器发起请求,并且获得处理结果,返回给客户端。
从下图可以看出:客户端向目标服务器发起的请求,是由代理服务器代替它向目标主机发起,得到结果之后,通过代理服务器返回给客户端。
举个栗子:广大社会主义接班人都知道,为了保护祖国的花朵不受外界的乌烟瘴气熏陶,国家对网络做了一些“优化”,正常情况下是不能外网的,但作为程序员的我们如果没有谷歌等搜索引擎的帮助,再销魂的代码也会因此失色,因此,网络上也曾出现过一些fan qiang技术和软件供有需要的人使用,如某VPN等,其实VPN的原理大体上也类似于一个正向代理,也就是需要访问外网的电脑,发起一个访问外网的请求,通过本机上的VPN去寻找一个可以访问国外网站的代理服务器,代理服务器向外国网站发起请求,然后把结果返回给本机。
正向代理的配置:
1server {
2 #指定DNS服务器IP地址
3 resolver 114.114.114.114;
4 #指定代理端口
5 listen 8080;
6 location / {
7 #设定代理服务器的协议和地址(固定不变)
8 proxy_pass http://$http_host$request_uri;
9 }
10}
复制代码
这样就可以做到内网中端口为8080的服务器主动请求到1.2.13.4的主机上,如在Linux下可以:
1curl --proxy proxy_server:8080 http://www.taobao.com/
复制代码
正向代理的关键配置:
resolver:DNS服务器IP地址
listen:主动发起请求的内网服务器端口
proxy_pass:代理服务器的协议和地址
反向代理
反向代理:reverse proxy,是指用代理服务器来接受客户端发来的请求,然后将请求转发给内网中的上游服务器,上游服务器处理完之后,把结果通过nginx返回给客户端。
上面讲述了正向代理的原理,相信对于反向代理,就很好理解了吧。
反向代理是对于来自外界的请求,先通过nginx统一接受,然后按需转发给内网中的服务器,并且把处理请求返回给外界客户端,此时代理服务器对外表现的就是一个web服务器,客户端根本不知道“上游服务器”的存在。
举个栗子:一个服务器的80端口只有一个,而服务器中可能有多个项目,如果A项目是端口是8081,B项目是8082,C项目是8083,假设指向该服务器的域名为www.xxx.com,此时访问B项目是www.xxx.com:8082,以此类推其它项目的URL也是要加上一个端口号,这样就很不美观了,这时我们把80端口给nginx服务器,给每个项目分配一个独立的子域名,如A项目是a.xxx.com,并且在nginx中设置每个项目的转发配置,然后对所有项目的访问都由nginx服务器接受,然后根据配置转发给不同的服务器处理。具体流程如下图所示:
反向代理配置:
1server {
2 #监听端口
3 listen 80;
4 #服务器名称,也就是客户端访问的域名地址
5 server_name a.xxx.com;
6 #nginx日志输出文件
7 access_log logs/nginx.access.log main;
8 #nginx错误日志输出文件
9 error_log logs/nginx.error.log;
10 root html;
11 index index.html index.htm index.php;
12 location / {
13 #被代理服务器的地址
14 proxy_pass http://localhost:8081;
15 #对发送给客户端的URL进行修改的操作
16 proxy_redirect off;
17 proxy_set_header Host $host;
18 proxy_set_header X-Real-IP $remote_addr;
19 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
21 proxy_max_temp_file_size 0;
22 }
23}
复制代码
这样就可以通过a.xxx.com来访问a项目对应的网站了,而不需要带上难看的端口号。
反向代理的配置关键点是:
server_name:代表客户端向服务器发起请求时输入的域名
proxy_pass:代表源服务器的访问地址,也就是真正处理请求的服务器(localhost+端口号)。
3. 透明代理
透明代理:也叫做简单代理,意思客户端向服务端发起请求时,请求会先到达透明代理服务器,代理服务器再把请求转交给真实的源服务器处理,也就是是客户端根本不知道有代理服务器的存在。
举个栗子:它的用法有点类似于拦截器,如某些制度严格的公司里的办公电脑,无论我们用电脑做了什么事情,安全部门都能拦截我们对外发送的任何东西,这是因为电脑在对外发送时,实际上先经过网络上的一个透明的服务器,经过它的处理之后,才接着往外网走,而我们在网上冲浪时,根本没有感知到有拦截器拦截我们的数据和信息。
作者:Java邵先生
链接:https://www.jianshu.com/p/3305375e6686