服务器提供的代理为反向代理
原理:当用户向服务器请求资源时,他会 首先进过Nginx,由Nginx再向服务器请求资源,得到资源后,服务器首先会把资源发送到Nginx上,然后由Nginx在发送给用户,此时Nginx就是反向代理服务器。
用户提供的代理为正向代理(socket代理,http代理等)
正向代理服务器、反向代理服务器与网关本质上是一样的。
访问网络的入口就是网关,例如家庭中的路由器就相当于一个网关,我在家用手机,平板等上网,访问资源等都会打到网关上,在传输出去。通俗一点网关就相当于学校的大门,你想出去,必须经过大门。
网关特点:中转。
用户访问资源,都需要打进网关,当通过网关将请求发送到服务器,服务器又会把信息,传到网关 ,最后传递给用户。
问题:当用户请求多的,流量大的时候,如果网关上限带宽不大的时候,就会发生阻塞。
解决方法:只能加大代理服务器的带宽。
因为nginx代理的带宽,决定了用户集群的网络带宽,在比较高的io操作,nginx做反向代理,效果不明显。
解决方案:当用户请求服务器时,必须经过nginx,但是当服务器返回数据是,直接打到用户,不在经过nginx(DR模型
)
用到proxy_pass
关键字设置
proxy_pass
后面有俩种配置方法
可以是代理的地址,这个地址可以是一台主机或者一个网址
可以把它配成一组服务器(下面先配一个服务器)
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://www.baidu.com; //只有这个地方改变了
#root html;
#index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
运行结果:
设置俩台虚拟主机:这里一个ip:192.168.56.136,另一个是192.168.56.137
我用的是桥接的方法,直接nat方法和仅主机方法都试过了,但是俩台虚拟机都ping不通。
注意:
在代理到网站的时候,虚拟机需要Ping通外网才可以
在代理本机服务器时,俩台虚拟机需要ping通才可以。(你想代理哪个服务器,你就需要和谁ping通)
修改网络配置命令
vi /etc/sysconfig/network-scripts/ifcfg-ens33
CentOS7配置情况:(ip:192.168.56.136)
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="DHCP"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="b73ab354-05d7-4492-87df-d537a32120bd"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.56.136
NETMASK=255.255.255.0
GETWAY=192.168.56.2
DNS1=8.8.8.8
Nginx配置情况:(ip:192.168.56.137)
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="DHCP"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="b73ab354-05d7-4492-87df-d537a32120bd"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.56.137
NETMASK=255.255.255.0
GETWAY=192.168.56.2
DNS=8.8.8.8
配置centos7中的nginx.conf文件文件只修改了一个地方
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.56.137; //只有这一个地方变了
#root html;
#index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
配置nginx2中的nginx.conf文件文件没有修改,保持默认情况
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
为了区分默认的root下的html,将192.168.56.137下面的html文件改为
DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!title>
head>
<body>
<body style="background-color: pink">
<h1>192.168.56.137h1>
body>
html>
运行结果:(通过在网址中输入192.168.56.136,由于设置了proxy_pass他会跳转到192.168.56.137,然后显示137下面的html文件)
目前只是代理一台服务器,可以代理到多台服务器上