一、准备

1.1 环境准备

CentOS7软件环境

1.2 tomcat多实例

把/etc/profile.d/tomcat.sh中的变量注释了

#export TOMCAT_HOME=/usr/local/tomcat
#export CATALINA_HOME=/usr/local/tomcat
#export CATALINA_BASE=/usr/local/tomcat
#export CATALINA_TMPDIR=/usr/local/tomcat/temp
#export TOMCAT_USER=tomcat unset TOMCAT_HOME
unset CATALINA_HOME
unset CATALINA_BASE
unset CATALINA_TMPDIR

复制tomcat目录

cd /opt/tomcat
cp -a apache-tomcat-8.5.16 tomcat8180
cp -a apache-tomcat-8.5.16 tomcat8280
cp -a apache-tomcat-8.5.16 tomcat8380

修改配置

# 创建部署目录
mkdir -p /data/webapps
chown -R tomcat:tomcat /data/webapps # 修改配置,通过脚本修改如下内容
# 行号 替换前 替换后
# 22 8005 => 8105
# 69 8080 => 8180
# 116 8009 => 8109
# 148 appBase="webapps" => appBase="/data/webapps" # 执行脚本a.sh
sh a.sh # 查看修改后的不同
diff /opt/tomcat/apache-tomcat-8.5.16/conf/server.xml /opt/tomcat/tomcat8180/conf/server.xml

a.sh

#!/bin/sh

for i in {1..3}
do
file=/opt/tomcat/tomcat8"$i"80/conf/server.xml
sed -i '22s/8005/8'"$i"'05/' $file
sed -i '69s/8080/8'"$i"'80/' $file
sed -i '116s/8009/8'"$i"'09/' $file
#sed -i '148s#appBase=".*"#appBase="/data/webapps"#' $file
done

启动多实例

# 以普通用户运行tomcat
# for i in {1..3};do /opt/tomcat/tomcat8"$i"80/bin/daemon.sh start;done
for i in {1..3};do /opt/tomcat/tomcat8"$i"80/bin/startup.sh;done
netstat -tunlp | grep 80 # 关闭
for i in {1..3};do /opt/tomcat/tomcat8"$i"80/bin/shutdown.sh;done

1.3 配置hosts

# 查看服务器ip
ifconfig # 修改hosts
C:\Windows\System32\drivers\etc
192.168.5.210 test.com
192.168.5.210 beijing.test.com
192.168.5.210 shanghai.test.com

二、负载均衡

2.2 流程

2.2 nginx配置

http://nginx.org/en/docs/http/ngx_http_upstream_module.html

/etc/nginx.conf

/usr/local/nginx/conf/nginx.conf

worker_processes  1;
events {
worker_connections 1024;
} # http最外层模块
http {
# 全局变量参数
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; upstream web_pool {
server 127.0.0.1:8180 weight=1;
server 127.0.0.1:8280 weight=1;
server 127.0.0.1:8380 weight=2;
} # server相当于虚拟站点
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web_pool;
index index.html index.htm;
}
}
}

解析

http:根元素
upstream:反向代理的域
server:虚拟站点 location # 请求的一个节点

location参数

root                         # 站点根路径
index # 首页
proxy_pass # 代理服务
proxy_redirect off; # 是否允许重写向
proxy_set_header Host $host; # 传header参数至后台端服务
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 90; # 连接代理服务超时时间
proxy_send_timeout 90; # 请求改善最大时间
proxy_read_timeout 90; # 读取最大时间

upstream参数

service         # 反向服务地址加端口
weight # 权重
max_fails # 失败多少次后认为主机已经挂掉,踢出
fail_timeout # 踢出后重新探测时间
backup # 备用服务
max_conns # 允许最大连接数
slow_start # 当节点恢复,不立即加入 max_fails注重用户体验好就要配置低 server 127.0.0.1:8180 fail_timeout=5s slow_start=10s;

2.3 负载算法

ll+weight:根据权重轮询

ip_hash:hash(client_ip)%2=index,解决session一致性

url_hash:hash(url)%2=index,资源缓存服务

least_conn:最少连接

least_time:请求时间越少,权重越高

三、应用实战

在修改nginx.conf配置文件后

# 验证配置是否正确
nginx -t # 平滑启动
nginx -s reload

3.1 动静分离

nginx.conf

worker_processes  1;
events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; upstream web_pool {
server 127.0.0.1:8180 weight=1;
server 127.0.0.1:8280 weight=1;
} upstream static_resource {
server 127.0.0.1:8380;
} server {
listen 80;
server_name localhost;
# 动态服务
location / {
proxy_pass http://web_pool;
index index.html index.htm;
}
# 静态服务
location ~* \.(gif|css|png|jpg|js|swf)(.*) {
proxy_pass http://static_resource;
}
}
}

tomcat内容

基中index.html

cat /opt/tomcat/tomcat8180/webapps/ROOT/index.html
<html>
<head>
<title>index</title>
</head>
<body>
<h1>Hello 8180</h1>
<img src="one-piece.png"/>
</body>
</html> cat /opt/tomcat/tomcat8280/webapps/ROOT/index.html
<html>
<head>
<title>index</title>
</head>
<body>
<h1>Hello 8280</h1>
<img src="one-piece.png"/>
</body>
</html>

浏览器访问test.com, Hello 8180与Hello 8280循环出现

3.2 防盗链

原理就是根据Referer防盗链

nginx.conf

worker_processes  1;
events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; upstream web_pool {
server 127.0.0.1:8180 weight=1;
server 127.0.0.1:8280 weight=1;
} upstream static_resource {
server 127.0.0.1:8380;
} server {
listen 80;
server_name localhost;
# 动态服务
location / {
proxy_pass http://web_pool;
index index.html index.htm;
}
# 静态服务
location ~* \.(gif|css|png|jpg|js|swf)(.*) {
# 防盗链设置
valid_referers none blocked *.test.com;
if ($invalid_referer) {
rewrite ^/ http://7xkmkl.com1.z0.glb.clouddn.com/404.jpg;
}
proxy_pass http://static_resource;
}
}
}

用IP访问:重新打开浏览器或Chrome用隐身模式打开

3.3 城市静态站点实现

server {
listen 80;
server_name *.test.com;
root /data/www/$host;
access_log logs/$host.access.log;
location / {
index index.html;
}
}

静态站点目录如下

index.html

cat /data/www/beijing.test.com/index.html
beijing cat /data/www/shanghai.test.com/index.html
shanghai

流量器访问beijing.test.com shanghai.test.com

Nginx基本配置与应用的更多相关文章

  1. 如何在Nginx下配置PHP程序环境

    1.nginx与PHP的关系 首先来看nginx与php的关系, FastCGI的关系(而不是像apache那样安装成nginx的模块) FastCGI的意思是, 快速的通用网关接口:CGI Comm ...

  2. 从零开始学 Java - CentOS 下 Nginx + Tomcat 配置负载均衡

    为什么现在有非常多的聪明人都在致力于互联网? 最近在读埃隆·马斯克传记,他说「我认为现在有非常多的聪明人都在致力于互联网」. 仔细一想,好像真的是这样的. 我问了自己一个问题:如果你不敲代码了,你能做 ...

  3. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  4. nginx + tomcat配置负载均衡

    目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...

  5. spring4+websocket+nginx详细配置

    实现的版本jdk1.7.0_25, tomcat7.0.47.0, Tengine/2.1.1 (nginx/1.6.2), servlet3.0, spring4.2.2 使用maven导入版本3. ...

  6. Nginx Location配置总结

    Nginx Location配置总结 语法规则: location [=|~|~*|^~] /uri/ { - }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即 ...

  7. 理解nginx的配置

    Nginx配置文件主要分成四部分:main(全局设置).server(主机设置).upstream(上游服务器设置,主要为反向代理.负载均衡相关配置)和 location(URL匹配特定位置后的设置) ...

  8. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  9. 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解

    看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you d ...

  10. Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持

    前面有关于lnmp环境的搭建,在此就不在赘述.下面就简述thinkPHP如何在nginx下开启url_rewrite和pathinfo模式支持 主要有两个步骤: 一.更改php.ini将;cgi.fi ...

随机推荐

  1. 顺利通过EMC实验(3)

  2. Codepen 每日精选(2018-3-24)

    按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以打开原始页面. 纯 css 画的抽象小鸟https://codepen.io/gregoryb/f... 纯 css 制作 ...

  3. 将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件

    本内容转载出处:http://my.oschina.net/BearCatYN/blog/299192 并对以下内容做了一处说明. ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMa ...

  4. FastAPI(七十三)实战开发《在线课程学习系统》接口开发-- 回复留言

    之前文章分享FastAPI(七十二)实战开发<在线课程学习系统>接口开发-- 留言列表开发,这次我们分享如何回复留言 按照惯例,我们还是去分析这里面的逻辑. 1.判断用户是否登录 2.用户 ...

  5. VUE3 之 使用 Mixin 实现代码的复用 - 这个系列的教程通俗易懂,适合新手

    1. 概述 老话说的好:舍得舍得,先舍才能后得. 言归正传,今天我们来聊聊 VUE 中使用 Mixin 实现代码的复用. 2. Mixin 的使用 2.1 不使用 Mixin 的写法 <body ...

  6. Qt QPropertyAnimation+QTimer实现自制悬浮窗

    目录 Qt下的悬浮窗 QPropertyAnimation QTimer 事件过滤 图标变换 自适应窗口大小 使用方法 Qt下的悬浮窗 最近项目需要一个类似于360悬浮球类似的悬浮窗,当鼠标放入停留一 ...

  7. oracle查看当前用户表结构、主键、索引

    1.查询表的所有列及其属性 select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = ...

  8. String_StringBuilder_StringBuffer 区别

    1.String: String类是final修饰的,属于不可变(immutable)类,每次对原对象操作都会产生新的String对象. 源码中String类的定义:private final cha ...

  9. 如何使用 python 爬取酷我在线音乐

    前言 写这篇博客的初衷是加深自己对网络请求发送和响应的理解,仅供学习使用,请勿用于非法用途!文明爬虫,从我做起.下面进入正题. 获取歌曲信息列表 在酷我的搜索框中输入关键词 aiko,回车之后可以看到 ...

  10. .NET 7 预览版2 中的 ASP.NET Core 更新

    .NET 7 预览版2 现已推出,其中包括对ASP.NET Core 的许多重大改进. 以下是此预览版中新增内容的摘要: 推断来自服务的API 控制器操作参数 SignalR 集线器方法的依赖注入 为 ...