Nginx反向代理
1.什么是正向代理(针对客户端)
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
特点:
1.正向代理介于用户与目标服务器之间.
2.用户非常清楚的知道自己访问的远程资源到底是谁.
3.一般采用正向代理时 都是为了实现网络的通信.
如下图
举个例子:在生活中我们都是直接把正向代理称作代理,称为代理就行了,正向两个字就去掉了,那么这个代理也很好理解,举个例子,比如说现在在教室里边,各位同学上不了网,只有老师的那台机器可以上网,那么现在学生们又想去访问外网要怎么半呢,那么老师这个机器就可以作为一个代理服务器,只需要在学生电脑上去配置这个代理服务器的IP地址接可以了。
配好了之后,将来学生在浏览器里输入对应的网址,其实呢,就是把这个请求发给了代理服务器,然后再由代理服务器去上网,上完网之后,请求的资源再通过代理服务器返回给各位学生,这样就能够实现局域网内可以来连接互联网这种请求,那么其实正向代理代理的就是客户端.
2.反向代理(针对服务端)
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率.
特点:
- 反向代理服务器 介于用户与目标服务器之间 (3个组成部分)
- 用户以为反向代理服务器就是目标服务器.
- 用户不清楚真是的目标服务器地址.
如下图
可以看到这个反向代理这个图刚好和代理那个图是相反的,那么反向代理其实就是,比如现在呢我有远程,想要去访问我的Tomcat的网站,比如说我想通过网络访问我部署在Linux系统中Tomcat这些网站,我直接访问也是可以的。
但是直接访问有这么两个问题,第一个问题就是,直接访问的话,如果访问量太大,就一台Tomcat的话,那么这样并发就太低了,所以我们希望搭建一个Tomcat的集群,那么搭完Tomcat的集群之后呢,我直接是去访问的话,我咋知道是访问1还是2还是3呢,所以我们做一个代理服务器,我所以的请求都打到,或者说都访问这个代理服务器,然后再由这个代理服务器给我分发这些请求到这些Tomcat1或者2或者3,这就是反向代理。
那么还有第二个原因,如果我通过互联网直接访问我服务器的一些资源的话,可能会不安全,所以呢如果用了反向代理服务器,我所有的资源请求都打到反向代理服务器上,然后呢,我可以在这个中间加上一个防火墙,或者压根把整个做成内网的,或者说局域网的,外网根本都访问不了,那么这样做就会显得更加安全一些,所以反向代理服务器代理的就是服务器端.
3.配置反向代理
3.1安装nginx
1.http://nginx.org/en/download.html 官网下载
2.上传安装包到/usr/local/src目录下
3.解压Nginx安装包 指令:tar -xvf nginx…(nginx压缩包的名字)
4.进入./configure目录下,依次执行make,make install指令
5.进入nginx/sbin目录中执行如下指令(看个人需求)
启动:./nginx
重启:./nginx -s reload(有更新操作执行)
关闭:./nginx -s stop(一般不执行)
6.修改nginx配置文件(实现图片反向代理,实现tomcat负载均衡)
#配置图片代理服务器 http://域名:端口号
server {
listen 80;
server_name 域名;
location / {
#root D:/JT-SOFT/images;
root /usr/local/src/images;
}
}
server{
listen 80;
server_name 图片域名;
location / {
#代理真实服务器地址
#proxy_pass http://localhost:8091;
#映射到集群
proxy_pass http://jtLinux;
}
}
#配置tomcat服务器集群 1.默认 轮询策略 2.权重策略 3.ip_hash策略
upstream jtWindows {
#ip_hash; down 标识宕机 backup 备用机
#max_fails=1 表示最大的失败次数
#fail_timeout=60s 如果访问不通,则在60秒内,不会再次访问故障机
server 127.0.0.1:8081 max_fails=1 fail_timeout=60s;
server 127.0.0.1:8082 max_fails=1 fail_timeout=60s;
server 127.0.0.1:8083 max_fails=1 fail_timeout=60s;
}
upstream jtLinux {
server 192.168.126.129:8081;
server 192.168.126.129:8082;
server 192.168.126.129:8083;
}
7.修改hosts文件(由于没有购买域名,所以只能通过修改hosts文件实现域名和本机的映射,有钱也可以自己买)
添加如下配置
192.168.126.129(本机地址) 域名
192.168.126.129(本机地址) 图片域名
127.0.0.1 www.xxx.com
127.0.0.1 localhost
解释:
用户现在在浏览器输入了hosts文件中配置的域名,其实他不知道自己访问的是nginx还是tomcat.但我们自己知道用户访问了nginx,nginx通过server_name配置,找到对应的Tomcat,完事之后,将资源返回给nginx,nginx返回给用户,这就是反向代理的一个过程.
总而言之,在请求的过程中正向代理和反向代理是同时存在的