使用nginx做反向代理
什么是代理、正向代理、反向代理?
代理
所谓代理其实就是通俗意义上的“将一件事情交给另一个人去做”,因为网络通信其实是蛮复杂的一个过程,所以单纯依靠客户自己去与服务器直接做所有通信过程肯定会让人崩溃!!
正向代理
正向代理就是指代理客户端,意思就是说客户端向代理说明自己的请求,之后代理服务器会根据客户端的需求去和真正的目标服务器通信,把目标服务器返回的数据传给客户端。代理可以是虚拟的IP,所以比如说本机IP和目标IP本身并没有接入在同一个网络,借助虚拟的代理IP就相当于“我们接入在目标服务器的那个网络”,此时,我们的机子对外相当于隐藏了真实的本机地址,也可以获得更低的延迟。典型的如VPN虚拟网络。
反向代理
反向代理的概念则恰恰相反,客户端不用告诉代理服务器想像哪一个目标服务器请求数据,而是直接把“我有一个请求”告诉代理服务器,代理服务器自己去找一个真实服务器请求/接收数据。这种情况下相当于隐藏了真实服务器的地址。当我们请求 www.baidu.com 的时候,背后可能有成千上万台服务器可以为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
(nginx负载均衡部分转自https://blog.youkuaiyun.com/aqleung/article/details/80923470)
nginx最基本的组成部分
最基本,所以这里只讲一下调nginx一般要用到的指令、文件。
下载
配置文件
设置代理等,只需修改下图部分
基础页面
在启动nginx代理后,访问127.0.0.1默认打开的页面
nginx.exe
位置比较明显,就叫nginx.exe
基本指令
部分转自https://blog.youkuaiyun.com/ruoxiyun/article/details/86980913
nginx -s reopen #重启Nginx
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop #强制停止Nginx服务
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)
首先不是特别建议直接双击打开nginx,机制问题,因为windows上每双击一次nginx,就相当于执行了 start nginx命令,又启动了一次nginx,有时候双击一次就会同时开启多个nginx.exe,关也关不掉。
nginx反向代理
打开nginx.conf文件:
进程与连接数量设置不做过多描述,可以参考官方文档
官方文档的改写
直接访问127.0.0.1,可以得到官方界面:
可以修改监听端口,使得可以通过指定端口访问本机的index.html
在这里,我重新写了一个index.html,打开的效果如下:
注意!上图是我指定8000端口访问index.html,事实上直接访问127.0.0.1还是官方文档,也就是说nginx默认监听http协议的80端口。如果非要和index挂钩只需要重写对80端口的监听即可
反向代理到其他网站
我们可以自己新建一个server,通过监听其他端口反向代理服务器,一旦用户“访问”这个端口,nginx就会反向代理把网页信息传给我们。
只监听端口
如下图,令nginx监听8888端口,随便给一个server_name,写一个location。location的意思就是说我们要向哪个服务器做反向代理。
每次完成修改后,记得在命令行输入nginx -s reload重新加载一次配置文件!
这里举个百度的例子。
另外就是写法问题。location / {}
这种写法就是默认的,也就是说我可以直接在浏览器地址栏输入127.0.0.1:8888发请求,nginx就会监听到并只给我们做百度的反向代理。
如果说像上图那样是location /baidu.com {}
的写法,则需要输入整个127.0.0.1:8888/baidu.com,否则nginx在只监听到127.0.0.1:8888请求后会只自动帮我们打开index.html
如果想做骚操作,用什么127.0.0.1:8888/weibo.com访问百度也当然是可以的,配置文件只算是告诉nginx解析规则而已。
单一端口多类处理
我们可以看一下使用HTTP的URL的一般形式:
http://<主机>:<端口>/<路径>?<参数>#<片段>
既然说location / 后面加上路径就可以指定去访问某个网站,那么单个端口多个location也并非不可以。
此时输入127.0.0.1:8888/baidu.com就是访问百度,
输入127.0.0.1:8888/weibo.com就是访问微博了。