目录
2、nginx做负载均衡的时候,nginx挂掉了怎么办?如果nginx做集群,nginx集群的负载均衡器挂掉了又怎么办?
一、什么是nginx?
nginx是一款高性能的HTTP和反向代理Web服务器,同时也支持IMAP/POP3/SMTP邮件服务。它由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发,并于2004年10月4日发布了首个公开版本0.1.0。Nginx采用类BSD许可证发布源代码,以其稳定性、丰富的功能集、简洁的配置和低系统资源消耗而著称。2011年6月1日,nginx 1.0.4版本发布。
nginx作为一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占用内存少,并发能力强,实际上在同类型网页服务器中,Nginx的并发能力表现尤为出色。中国大陆使用Nginx的网站包括百度、京东、新浪、网易、腾讯和淘宝等。
nginx以其处理高并发的强大能力而闻名,能够经受住高负载的考验,有报告表明它能支持高达5万个并发连接数。此外,Nginx支持热部署,启动简单,可以实现7*24不间断运行,几个月都不需要重新启动。
二、nginx能干什么?
1、反向代理
提到反向代理时,我们往往会联想到正向代理。实际上,正向和反向的区分是基于客户端的视角来判断的。如果代理操作是由客户端发起的,那么这种代理被称为正向代理;而如果代理操作是由目标服务器端发起的,则称为反向代理。这个分类并不是指代理服务器一定要部署在客户端或目标服务器上,而是看代理动作是由哪一方来执行。正向代理通常用于解决客户端访问限制的问题,而反向代理则主要用于负载均衡、安全防护等目的。以下是nginx配置反向代理的配置:
user root;
worker_processes auto;
error_log /usr/local/nginx/logs/error.log; #错误日志路径
pid /usr/local/nginx/logs/nginx.pid;include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
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 /usr/local/nginx/logs/access.log main; #访问日志路径,可以关掉
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 20M;
server {
#如果根据 listen server_name 没有匹配到的话,默认使用第一个server
#可以在listen后面加添加default_server来设置匹配不成功的默认使用的server
listen 8888;
server_name 101.31.7.23; #多个的话可以用空格分隔#以下配置是开启gzip压缩的,不需要开启的话,可以去掉,一般建议开启
gzip on; #是否开启gzip模块 on表示开启 off表示关闭
gzip_buffers 4 16k; #设置压缩所需要的缓冲区大小
gzip_comp_level 6; #压缩级别1-9,数字越大压缩的越好,也越占用CPU时间
gzip_min_length 100k; #设置允许压缩的最小字节
gzip_http_version 1.1; #设置压缩http协议的版本,默认是1.1
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; #设置压缩的文件类型
gzip_vary on; #加上http头信息Vary: Accept-Encoding给后端代理服务器识别是否启用 gzip 压缩
location /api {
# proxy_pass 端口后面加路径,该路径就会替换location中的路径,有/也会替换
#没加路径就只替换访问路径的ip和端口
proxy_pass http://101.31.7.23:8180/;
}
}
}
2、动静分离
通常来说,动态资源指的是那些由后台生成或处理的资源,而静态资源则包括HTML、JavaScript、CSS和图片等文件。简单来说,动态资源可以理解为后端接口,而静态资源则是前端所需的各类文件。在使用前后端分离部署的项目中,Nginx的动静分离特性得到了充分利用,使得项目的性能和可维护性得到了显著提升。动静分离的配置如下:
server {
#如果根据 listen server_name 没有匹配到的话,默认使用第一个server
#可以在listen后面加添加default_server来设置匹配不成功的默认使用的server
listen 8888;
server_name 101.31.7.23; #多个的话可以用空格分隔
location /api {
# proxy_pass 端口后面加路径,该路径就会替换location中的路径,有/也会替换
#没加路径就只替换访问路径的ip和端口
proxy_pass http://101.31.7.23:8180/;
}
location / {
root /home/zcloud/applications/iomp-web; #前端部署目录
index index.html index.htm;
}location /images/ {
alias /home/zcloud/file/; #静态文件存放目录
autoindex off; #关闭自动索引,开启后用户可以访问目录下的文件,一般建议关闭
}
}
这里细心的同学会发现我们在配置前端文件路径的时候使用的是root 指令,而配置图片的静态文件的路径的时候使用的是alias。
那么,alias和root在使用上有什么区别呢?
alias:将请求的URI替换为alias指定的路径。例如,如果请求为/images/logo.png,则nginx会查找/home/zcloud/file/logo.png。
root :将请求的URI直接附加到root指定的路径后面。例如,如果请求为/images/logo.png,则nginx会查找/home/zcloud/file/images/logo.png。
需要注意的是:如果使用alias的时候location的路径是以/结尾的话,alias配置的路径也必须以/结尾。
3、负载均衡
负载均衡,就是说如果一组计算机节点(或者一组进程)提供相同的(同质的)服务,那么对服务的请求就应该均匀的分摊到这些节点上。
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 /usr/local/nginx/logs/access.log main; #访问日志路径,可以关掉
#轮询的方式
upstream server_group {
server 101.31.7.24:8080; #node1
server 101.31.7.25:8081; #node2
server 101.31.7.26:8082; #node3
}
#加权轮询的方式
# upstream server_group {
# server 101.31.7.24:8080 weight=3; #node1
# server 101.31.7.25:8081 weight=5; #node2
# server 101.31.7.26:8082 weight=2; #node3
# }
#ip_hash的方式,基于客户端IP的分配方式
# upstream server_group {
# ip_hash;
# server 101.31.7.24:8080; #node1
# server 101.31.7.25:8081; #node2
# server 101.31.7.26:8082; #node3
# }
#最少连接的方式,把请求分发给连接请求较少的那台服务器
# upstream server_group {
# least_conn;
# server 101.31.7.24:8080; #node1
# server 101.31.7.25:8081; #node1
# server 101.31.7.26:8082; #node1
# }
server {
#如果根据 listen server_name 没有匹配到的话,默认使用第一个server
#可以在listen后面加添加default_server来设置匹配不成功的默认使用的server
listen 8888;
server_name 101.31.7.23; #多个的话可以用空格分隔
location /api {
# proxy_pass 端口后面加路径,该路径就会替换location中的路径,有/也会替换
#没加路径就只替换访问路径的ip和端口
proxy_pass http://server_group/;
}
}
三、常用命令
#检查配置文件是否正确
./nginx -t#每次修改完配置文件先检查配置文件是否正确
#配置文件正确的话,就可以使用该命令重新加载配置文件,无需重启nginx
./nginx -s reload
#启动nginx
./nginx
# 快速停止nginx
./nginx -s stop
# 完整有序的停止nginx,这个命令会等待所有请求结束后再关闭nginx
./nginx -s quit
以上命令均需要进入到nginx的安装目录下的sbin目录下执行,nginx的安装目录一般是/usr/local/nginx。如果不在默认安装目录下面可以使用命令find / -name nginx.conf去找nginx的配置文件 nginx.conf即可。
四、延申问题
1、nginx和nacos的负载均衡有什么区别?
2、nginx做负载均衡的时候,nginx挂掉了怎么办?如果nginx做集群,nginx集群的负载均衡器挂掉了又怎么办?
欢迎大家在评论区就这个问题分享各自的见解和观点,我会综合大家的意见,在接下来的两篇博文中详细探讨这个话题。期待大家的积极参与和精彩评论!