当前位置: 首页>后端>正文

nginx多层转发 magento nginx分发转向多个服务

本文适用于开发人员学习运维领域知识,主要内容为在个人理解的基础上对企业级开发中所使用的Nginx相关概念的详解,并附上了Nginx部署完成之后的相关配置的操作方式,感谢阅读。


文章目录

  • 1.为什么使用Nginx
  • 2.正向代理与反向代理的区别
  • 2.1 正向代理
  • 2.2 反向代理
  • 3.Nginx的配置使用
  • 4.Nginx有什么作用
  • 4.1 反向代理
  • 4.2 负载均衡
  • 4.3 HTTP服务器(动静分离)



1.为什么使用Nginx

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

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

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

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

nginx多层转发 magento nginx分发转向多个服务,nginx多层转发 magento nginx分发转向多个服务_分布式,第1张

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

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

2.1 正向代理

正向代理就是代理客户端,客户是可以感受到它的存在的。

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

下面进行举例:

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

nginx多层转发 magento nginx分发转向多个服务,nginx多层转发 magento nginx分发转向多个服务_nginx_02,第2张

2.2 反向代理

反向代理就是代理服务端,是客户感受不到的。

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

nginx多层转发 magento nginx分发转向多个服务,nginx多层转发 magento nginx分发转向多个服务_nginx多层转发 magento_03,第3张

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. 大家最应该关注的应该就是下图所示的内容:

nginx多层转发 magento nginx分发转向多个服务,nginx多层转发 magento nginx分发转向多个服务_linux_04,第4张

下面进行讲解:

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本地,加快访问速度。

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



https://www.xamrdz.com/backend/3v31964078.html

相关文章: