1.NGINX安装
- 解压文件
[root@node1 ~]
nginx-1.20.1.tar.gz
[root@node1 ~]
- 解压后的nginx是源码,所以需要再编译一下,但是由于nginx是使用c语言写的,所以需要下载专门的编译软件。
yum install gcc pcre-vevel zlib-devel openssl-devel -y
- 配置nginx安装路径
./configure --prefix=/opt/nginx
- 配置结束之后,开始安装nginx
make && make install
- 启动nginx
进入安装目录,“/opt/nginx”,执行./nginx
配置nginx环境变量
- 找到/etc/profile,在最后加上
export NGINX_HOME=/opt/nginx
export PATH=$NGINX_HOME/sbin:$PATH
然后source /etc/profile
nginx中文版配置文件
[root@node1 nginx]
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
1.nginx负载均衡
nginx.conf配置文件修改
- 修改根节点(base)的nginx的配置文件代码
vi /conf/nginx.conf
替换为:
worker_processes 1;
events {
worker_connections 1024;
}
http{
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 0;
upstream xxx {
server base_ip:8080;
server node1_ip:8080;
server node2_ip:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://xxx;
}
}
}
- 启动nginx
- 重载nginx -s reload
tomcat配置信息修改
修改两台扩展机器的tomcat,修改其tomcat的前端页面
vim tomcat安装目录/webapps/ROOT/index.jsp
<%@ page pageEncoding="utf-8" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<title>xxxx</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
</head>
<body>
<h1>welcome to <%=request.getLocalAddr() %></h1>
<h2>Server:<%=request.getLocalAddr() %></h2>
<h2>Port:<%=request.getLocalPort() %></h2>
<h2>Client:<%=request.getRemoteAddr() %></h2>
<h2>Session:<%=session.getId() %><h2>
</body>
</html>
修改完之后将这个index.jsp文件传给另外两台机器
scp /opt/apache-tomcat-8.5.55/webapps/ROOT/index.jsp ip/opt/apache-tomcat-8.5.55/webapps/ROOT/
启动tomcat startup.sh
测试
这时候就大功告成了,我们访问下nginx,从根节点的ip进
结果:
我们输入的ip和网页中显示的ip是不一样的
3. 负载策略
请求轮询
- 依次转发给配置的服务器,如果后端服务器down掉,能自动剔除
增加权重
- 使用服务器权重,可以影响nginx负载均衡算法,谁的权重大,谁被分发的请求就越多,用于后端服务器性能不均的情况.如下例,分别是70%,20%,10%。
upstream xxx {
server 10.4.17.99:8080 weight=7;
server 10.4.17.98:8080 weight=2;
server 10.4.17.100:8080 weight=1;
}
最少连接(least_conn)
这个策略是把请求转发给连接数较少的后端服务器。前面的轮询策略是把请求平均地转发给集群中的每个后台服务器,使得它们的负载大致相同,但是有些请求可能占用的时间会很长,可能导致所在的后端负载过高。这种情况下选用least_conn策略就能达到更好的负载均衡效果。
upstream xxx {
least_conn;
server 10.4.17.99:8080;
server 10.4.17.98:8080 ;
server 10.4.17.100:8080 ;
}
IP分配
这种策略是按照客户端的IP去分配服务器,使同一个客户端的请求都转发到同一个后台服务器,保证了Session的统一性,可以用来解决Session的跨域问题。
upstream xxx {
ip_hash;
server 10.4.17.99:8080;
server 10.4.17.98:8080 ;
server 10.4.17.100:8080 ;
}
资源静态化
图床
配置静态资源
- 在Nginx的/opt/nginx/html/目录下创建一个static文件夹,用来从存放图片,上传图片’sy.png’
mkdir -p /opt/nginx/html/static
- 修改nginx的配置文件.
vi /opt/nginx/conf/nginx.conf
模板如下:
worker_processes 1;
events {
worker_connections 1024;
}
http{
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 0;
upstream xxx {
server 10.4.17.99:8080 ;
server 10.4.17.98:8080;
server 10.4.17.100:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://xxx;
}
location ^~ /static/ {
root html;
}
}
}
- 修改所有虚拟机的tomcat的/index.jsp文件
/opt/apache-tomcat-8.5.55/webapps/ROOT/index.jsp
模板如下:
<%@ page pageEncoding="utf-8" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<title>xxxx</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
</head>
<body>
<h1>welcome to <%=request.getLocalAddr() %></h1>
<h2>Server:<%=request.getLocalAddr() %></h2>
<h2>Port:<%=request.getLocalPort() %></h2>
<h2>Client:<%=request.getRemoteAddr() %></h2>
<h2>Session:<%=session.getId() %><h2>
<img src="/static/guide.png" />
</body>
</html>
结果:成功访问到储存在base主机里的图片。
PS:配置参数和匹配规则
参考此位大佬,膜拜脸:https://blog.csdn.net/zzq900503/article/details/72821081
语法规则: location [=|||^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。 ~ 开头表示区分大小写的正则匹配 ~ 开头表示不区分大小写的正则匹配 !和!*分别为区分大小写不匹配及不区分大小写不匹配 的正则 / 通用匹配,任何请求都会匹配到。 多个location配置的情况下匹配顺序为: 首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
location = / {
}
location = /login {
}
location ^~ /static/ {
}
location ~ \.(gif|jpg|png|js|css)$ {
}
location ~* \.png$ {
}
location !~ \.xhtml$ {
}
location !~* \.xhtml$ {
}
location / {
}
访问根目录/,比如http://locahost/ 将匹配规则A
访问 http://localhost/login 将匹配规则B
访问http://localhost/static/ 将匹配规则C
访问http://localhost/a.gif,http://localhost/b.jpg 将匹配规则D和E,但是规则D顺序优先,规则E不起作用。而http://localhost/static/c.png 则优先匹配规则C
访问http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写
访问http://localhost/a.xhtml 不会匹配规则F和规则G, http://localhost/a.XHTML 不会匹配规则G。因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但不会匹配到
访问http://localhost/category/id/1111 则最终匹配到规则H。这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx最为方向代理服务器存在
访问http://localhost/register 匹配规则H
|