Nginx的主要作用有两个,一是“反向代理”,二是“负载均衡”。
一台tomcat的请求并发大约能支撑到500,而一台 Nginx的请求并发大约可以支撑到50000
在理解反向代理前,我们先理解一下正向代理,比如我们在公司里有N台电脑,要想访问外网,大家都可以通过同一台代理服务器授权 进行上网。
方向代理:如果外面的N个用户访问网站的域名,此时网站被分布安装在各个服务上,那么通过配置代理,反向指向不同的服务器。
像大型网站存在大量的图片,文件等,如果这些东西都装在应用服务器下,则会让应用服务器的性能压力很大,如果此时能够将这些资源文件独立出来,指向不同服务器,则性能会提升很多。
今天我在虚拟机上装了三台tomcat应用,一个nginx 服务器。配置如下
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
#charset koi8-r;
location / {
root htmltz1;
index index.html index.htm;
}
}
server {
listen 80;
#charset koi8-r;
location / {
root htmltz2;
index index.html index.htm;
}
}
server {
listen 80;
#charset koi8-r;
location / {
root htmltz3;
index index.html index.htm;
}
}
#配置反向代理
upstream tengzhuo{
server 192.168.1.106:8080;
}
server {
listen 80;
#charset koi8-r;
location / {
#root htmltz1;
#将请求转发到 upstream tengzhuo
proxy_pass http://tengzhuo;
index index.html index.htm;
}
}
#tomcat 服务器 端口号为8081
#实现应用服务器集群,提供同样的服务,负载均衡 可以通过weight=数字 ,设置权重
upstream tengzhen{
server 192.168.1.106:8081;
server 192.168.1.106:8082;
}
server {
listen 80;
#charset koi8-r;
location / {
#root htmltz1;
#将请求转发到 upstream tengzhen
proxy_pass http://tengzhen;
index index.html index.htm;
}
}
}
nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。
为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。keepalive+nginx可以做到。
领取专属 10元无门槛券
私享最新 技术干货