本文适用于开发人员学习运维领域知识,主要内容为在个人理解的基础上对企业级开发中所使用的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,后面的事都会有相应的机制帮我们实现。
- 要实现此类效果,即无论应用有多少实例,我们只需要访问一个地址就可以得到服务。就需要在客户端与服务端之间加上一层服务器。
- 客户端只管访问这一中介服务器(中介服务器的地址是确定的),再由中介服务器将请求代理到真正部署有实例的服务器上去即可。
2.正向代理与反向代理的区别
2.1 正向代理
正向代理就是代理客户端,客户是可以感受到它的存在的。
- 其实我们平时是接触到了很多正向代理的,正向代理就是我们在没有权限访问某些服务器或者速率很慢时,通过代理服务器代表我们去访问,而代理服务器常常是有能力、有权限达到目的的。
下面进行举例:
- 我们在校外、公司外,是访问不到学校、公司的内网的,但是我们想要访问内网资源时,会用到VPN。而一般内网会存在一个VPN服务器,我们使用VPN其实就是让内网的VPN服务器代替我们去进行访问(VPN服务器位于内网是可以访问内网资源的)。这其实就是一种正向代理,通过内网VPN服务器代理客户端进行请求。
- 我们在玩一些服务器部署在国外的游戏时(如:吃鸡),延迟会很长,此时,我们会“翻墙”,以此来提升速率。其实,这种方式与上一例是一样的逻辑。同样是让延迟低的服务器代理我们去访问,以提升速率。
2.2 反向代理
反向代理就是代理服务端,是客户感受不到的。
- 而反向代理的应用场景则就是对上述的多实例的情况的处理。使用一台代理服务器(下图中的深色服务器)对底层的应用服务器(下图中的浅色服务器)进行代理。将他们的地址信息对客户端屏蔽,客户端只需要访问代理服务器即可,代理服务器会将请求转发给底层的真正起作用的应用服务器。但在客户端眼里,服务器只有唯一的一台,就是代理服务器。
3.Nginx的配置使用
首先,需要安装Nginx,此处博主就不进行讲解了,大家可以去查阅相关教程。
博主使用的是Linux,Windows的路径存在差异,请大家进行变更
- 首先,要使用Nginx,就需要进行配置,于是,我们进入其配置文件
vim /etc/nginx/nginx.conf
- 如下就是博主的配置文件的内容:
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.首先,对于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本地,加快访问速度。
其实还有例如:虚拟主机等功能。但上述功能是最为常用的功能,所以仅对上述功能进行简单阐述。