nginx实现反向代理和负载均衡
Posted owen-li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx实现反向代理和负载均衡相关的知识,希望对你有一定的参考价值。
1:为什么要实现负载均衡:
当一台服务器的单位时间内访问量越大的时候,服务器压力会越大,当一台服务器压力大得超过自身的承受压力的时候,服务器会崩溃,为了避免服务器崩溃,让用户更好的体验,我们通常通过负载均衡的方式来分担服务器的压力。那么什么是负载均衡呢?我们可以建立很多个服务器,这些服务器组成一个服务器集群,然后当用户访问我们的网站的时候,先访问一个中间服务器,再让这个中间服务器在服务器群众选着一个压力较小的服务器,然后将改访问请求引入该选择的服务器。这样,用户每次的访问,都会保证服务器集群中的每个服务器的压力区域平衡,分担了服务器的压力,避免了了服务器崩溃的情况。2:nginx优势:
nginx是一款可以通过反向代理实现负载均衡的服务器,使用nginx服务器实现负载均衡的时候,用户首先会访问到nginx服务器,然后nginx服务器再从服务器群众选择压力较小的服务器,把改访问请求引入到该服务器。若服务器群中的某个服务器崩溃,那么从待选的服务器列表中将该服务器删除,也就是说如果一个服务器崩溃了,那么nginx就肯定不会把访问引入该服务器了。3:正向与反向代理:
example:如图所示:
图一:正向代理
图二:反向代理,也可理解为负载均衡
4:nginx负载均衡实现:
首先我们要有服务器群,正常的生产环境中,服务器群中存放的内容都是一样的,nginx作为中间服务器,将用户的访问根据服务器群压力大小,引入到压力较小的服务器,实现负载均衡。在此实验中我们为了能看到实现负载将请求引入到不同的服务器下,所以服务器群的内容要不一致,这样才能直观看出看出我们nginx实现了负载均衡。(如果实验所用的服务器群里面的内容都一样,不易看出是否nginx将访问请求引入到不同的服务器) 准备:假如我们有个服务器群,有三台服务器。(分别是百度,京东,本人小博客) 由于做实验,就直接修改了nginx主配置文件。http
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;
upstream myservers
server 115.159.105.94;
server 111.206.227.118;
server 61.135.169.125;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server
listen 8088 default_server;
listen [::]:8088 default_server;
server_name _;
# root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /
proxy_pass http://myservers;
error_page 404 /404.html; location = /40x.html error_page 500 502 503 504 /50x.html; location = /50x.html # Settings for a TLS enabled server.## server # listen 443 ssl http2 default_server;# listen [::]:443 ssl http2 default_server;# server_name _;# root /usr/share/nginx/html;## ssl_certificate "/etc/pki/nginx/server.crt";# ssl_certificate_key "/etc/pki/nginx/private/server.key";# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 10m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;## # Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;## location / # ## error_page 404 /404.html;# location = /40x.html # ## error_page 500 502 503 504 /50x.html;# location = /50x.html # #
注:在配置文件中:
upstream myservers#myservers为自己定义的服务器群名称,可以随意修改
server 115.159.105.99;(个人小博客)
server 111.206.227.118;(京东)
server 61.135.169.125;(百度)
是我们的服务器集群,
在server中配置:可以看到我们修改端口为监听8088.在location中将我们的访问指向我们的服务器群,也就是说当我们访问www.example.com:8088(假装域名为www.example.com)就会将我们根据服务器群的压力大小引入不同的服务器,所以在实验中可以看到我们刷新的时候一会在百度,一会在京东,一会在自己的小博客。这样既实现了负载均衡
server
listen 8088 default_server;
listen [::]:8088 default_server;
server_name _;
# root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /
proxy_pass http://myservers;
至此,nginx实现负载均衡完成。
以上是关于nginx实现反向代理和负载均衡的主要内容,如果未能解决你的问题,请参考以下文章