Nginx保姆级入门——什么是反向代理?Nginx能实现哪些功能?

Posted 大饼干_GreatBiscuit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx保姆级入门——什么是反向代理?Nginx能实现哪些功能?相关的知识,希望对你有一定的参考价值。


1.为什么使用nginx

首先,我们知道,为了系统的高可用,我们的系统一般会部署多个实例,即如下图所示,项目部署于多个服务器上。

  • 但是,这样是存在问题的,我们应该要对用户屏蔽掉这一信息。因为我们是不可能安排好每个用户在特定时刻去访问特定的服务器。这明显是行不通的,首先,用户无法记住这么多的服务器地址,其次,系统管理者难以管理运营。

百度为例,百度的后台肯定是不止一台服务器的,但我们在访问百度的时候,只需要输入百度的地址,就会被分配到一个服务器上去,以获得服务。

而我们访问的是哪个服务器我们并不知道,我们只管访问www.baidu.com,后面的事都会有相应的机制帮我们实现。

  • 要实现此类效果,即无论应用有多少实例,我们只需要访问一个地址就可以得到服务。就需要在客户端与服务端之间加上一层服务器。
  • 客户端只管访问这一中介服务器(中介服务器的地址是确定的),再由中介服务器将请求代理到真正部署有实例的服务器上去即可。

2.正向代理与反向代理的区别

2.1 正向代理

正向代理就是代理客户端。

  • 其实我们平时是接触到了很多正向代理的,正向代理就是我们在没有权限访问某些服务器或者速率很慢时,通过代理服务器代表我们去访问,而代理服务器常常是有能力、有权限达到目的的。

下面进行举例:

  1. 我们在校外、公司外,是访问不到学校、公司的内网的,但是我们想要访问内网资源时,会用到VPN。而一般内网会存在一个VPN服务器,我们使用VPN其实就是让内网的VPN服务器代替我们去进行访问(VPN服务器位于内网是可以访问内网资源的)。这其实就是一种正向代理,通过内网VPN服务器代理客户端进行请求。
  2. 我们在玩一些服务器部署在国外的游戏时(如:吃鸡),延迟会很长,此时,我们会“翻墙”,以此来提升速率。其实,这种方式与上一例是一样的逻辑。同样是让延迟低的服务器代理我们去访问,以提升速率。

2.2 反向代理

反向代理就是代理服务端。

  • 而反向代理的应用场景则就是对上述的多实例的情况的处理。使用一台代理服务器(下图中的深色服务器)对底层的应用服务器(下图中的浅色服务器)进行代理。将他们的地址信息对客户端屏蔽,客户端只需要访问代理服务器即可,代理服务器会将请求转发给底层的正真起作用的应用服务器。但在客户端眼里,服务器只有唯一的一台,就是代理服务器。

3.Nginx的配置使用

首先,需要安装Nginx,此处博主就不进行讲解了,大家可以去查阅相关教程。
博主使用的是Linux,Windows的路径存在差异,请大家进行变更

  1. 首先,要使用Nginx,就需要进行配置,于是,我们进入其配置文件
vim /etc/nginx/nginx.conf
  1. 如下就是博主的配置文件的内容:
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
	
	upstream myserver {
	    server 192.168.240.110:8080 max_fails=3 fail_timeout=30s weight=1;
	    server 192.168.240.111:8080 max_fails=3 fail_timeout=30s weight=1;
	}
	
	server {
	    listen 80;
	    server_name 192.168.240.240;
	    location / {
	        proxy_pass http://myserver;
	    }
	}

}

  1. 大家最应该关注的应该就是下图所示的内容:


下面进行讲解:

1.首先,对于upstream,里面配置的是应用服务器的信息,其中包括了应用服务器的地址。
2.而max_fails是设置Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试使用。等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。
3.weight值表示权重,权重越大,被分配到请求的可能性也越大。

1.server中则是对代理服务器进行配置。listen是其监听的端口号,而HTTP的默认端口号就是80,所以,当监听端口号为80的时候,就不需要在请求路径中加上端口号。
2.而后则是代理服务器的地址,以及接受请求的路径(“/”则表示根路径)。
3.proxy_pass表示将请求代理到后面的“http://myserver”代表的路径

4.Nginx有什么作用

4.1 反向代理

  • 即本文所讲述的功能,Nginx可以作为应用服务器的代理服务器。

4.2 负载均衡

  • 实则在上述的配置文件中也有所体现,即所配置的权重,权重会影响请求被分发到该服务器的概率,权重越大,被分发请求的概率越大。

4.3 HTTP服务器(动静分离)

  • 我们的项目中是存在很多静态资源的,它们不会因项目运行而发送变化,所以可以缓存在Nginx本地,加快访问速度。

其实还有例如:虚拟主机等功能。但上述功能是最为常用的功能,所以仅对上述功能进行简单阐述。

以上是关于Nginx保姆级入门——什么是反向代理?Nginx能实现哪些功能?的主要内容,如果未能解决你的问题,请参考以下文章

Nginx保姆级教程-手把手教你安装Nginx

Windows安装Nginx服务-保姆级教程

nginx入门简介

nginx入门简介

nginx入门简介

Nginx 11入门--应用场景