Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问
一、反向代理
1、在192.168.189.130机器启动tomcat服务,http://192.168.189.130:8080/ 访问服务正常
2、在192.168.189.131机器配置nginx
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://192.168.189.130:8080;
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
3、启动nginx服务,http://192.168.189.131/ 能够访问,这就完成了一个最简单的反向代理
二、负载均衡
1、负载均衡使用的是nginx的http upstream模块,语法:server address;
2、负载均衡策略或算法:默认使用轮询算法,可以使用ip_hash 或者 权重轮询
3、为了配置清晰,在nginx配置文件中http模块引入额外配置
http {
include mime.types;
include extra/*.conf;
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;
# server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
目录:
/root/data/program/nginx/conf/extra
配置文件proxy_demo.conf
#负载均衡模块
upstream tomcat {
#最大失败2次,失败后在60秒内不再转发到该机器
server 192.168.189.130:8080 max_fails=2 fail_timeout=60s;
server 192.168.189.132:8080 max_fails=2 fail_timeout=60s;
}
server {
listen 80;
server_name localhost;
location / { proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#性能优化相关
#例:130机器 error、超时、500、503的时候请求转到132
proxy_next_upstream error timeout http_500 http_503;
#连接超时时间
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s; }
}
4、分别在192.168.189.130,192.168.189.132机器上启动tomcat,
然后在/root/data/program/apache-tomcat-8.5.34/webapps/ROOT 下index.jsp页面添加一些标识区分,启动tomcat服务
访问http://192.168.189.131/,可以看到130、132两个服务轮询处理请求
三、动静分离
1、132机器/root/data/program/apache-tomcat-8.5.34/webapps/ROOT目录新建文件夹bak,把除index.jsp外的其他文件(静态资源)移动到bak文件夹

此时访问http://192.168.189.132:8080/发现首页样式没了
2、配置nginx,使用正则表达式,当请求静态资源时从static-resource获取
#负载均衡模块
upstream tomcat {
#最大失败2次,失败后在60秒内不再转发到该机器
#server 192.168.189.130:8080 max_fails=2 fail_timeout=60s;
server 192.168.189.132:8080 max_fails=2 fail_timeout=60s;
}
server {
listen 80;
server_name localhost;
location / { proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#性能优化相关
#例:130机器 error、超时、500、503的时候请求转到132
proxy_next_upstream error timeout http_500 http_503;
#连接超时时间
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s; } location ~ .*\.(js|css|png|svg|ico|jpg)$ {
root static-resource;
}
3、在nginx根目录下创建文件夹static-resource,把tomcat目录下的静态资源文件拷贝到此目录(静态资源文件,不包含jsp)
tomcat静态资源文件地址:/root/data/program/apache-tomcat-8.5.34/webapps/ROOT

4、./nginx -s reload nginx重新加载,此时访问http://192.168.189.131/可以看到当请求转发到192.168.189.132:8080上时,首页样式能够显示
缓存
nginx可以通过expires设置缓存,比如我们可以针对图片做缓存。
在location中设置expires
格式: expires 30s|m|h|d
#负载均衡模块
upstream tomcat {
#最大失败2次,失败后在60秒内不再转发到该机器
# server 192.168.189.130:8080 max_fails=2 fail_timeout=60s;
server 192.168.189.132:8080 max_fails=2 fail_timeout=60s;
}
server {
listen 80;
server_name localhost;
location / { proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#性能优化相关
#例:130机器 error、超时、500、503的时候请求转到132
proxy_next_upstream error timeout http_500 http_503;
#连接超时时间
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s; } location ~ .*\.(js|css|png|svg|ico|jpg)$ {
root static-resource;
expires 1d;
} }
对比设置缓存前,浏览器请求静态资源Response Headers

设置expires 1d;后浏览器多了Expires
压缩
Nginx中提供了一种Gzip的压缩优化手段,可以对后端的文件进行压缩传输,压缩以后的好处在于能够降低文件的大小来提高传输效率
配置信息
Gzip on|off 是否开启gzip压缩
Gzip_buffers 4 16k #设置gzip申请内存的大小,作用是按指定大小的倍数申请内存空间。4 16k代表按照原始数据大小以16k为单位的4倍申请内存。
Gzip_comp_level[1-9] 压缩级别, 级别越高,压缩越小,但是会占用CPU资源
Gzip_disable #正则匹配UA 表示什么样的浏览器不进行gzip
Gzip_min_length #开始压缩的最小长度(小于多少就不做压缩),可以指定单位,比如 1k
Gzip_http_version 1.0|1.1 表示开始压缩的http协议版本
Gzip_proxied (nginx 做前端代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩)
Gzip_type text/pliain,application/xml 对那些类型的文件做压缩 (conf/mime.conf)
Gzip_vary on|off 是否传输gzip压缩标识; 启用应答头"Vary: Accept-Encoding";给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
user root;
#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; include extra/*.conf; default_type application/octet-stream; #配置nginx压缩
gzip on;
gzip_min_length 5k;
gzip_comp_level 3;
gzip_types application/javascript image/jpeg image/svg+xml;
gzip_buffers 4 32k;
gzip_vary on;
压缩前:

压缩后:


四、防盗链
1、设置静态资源只能192.168.189.132访问,其他ip访问返回404
#负载均衡模块
upstream tomcat {
#最大失败2次,失败后在60秒内不再转发到该机器
# server 192.168.189.130:8080 max_fails=2 fail_timeout=60s;
server 192.168.189.132:8080 max_fails=2 fail_timeout=60s;
}
server {
listen 80;
server_name localhost;
location / { proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#性能优化相关
#例:130机器 error、超时、500、503的时候请求转到132
proxy_next_upstream error timeout http_500 http_503;
#连接超时时间
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s; } location ~ .*\.(js|css|png|svg|ico|jpg)$ {
#防盗链
#设置静态资源只能192.168.189.132访问,其他ip访问返回404
valid_referers none blocked 192.168.189.132;
if ($invalid_referer) {
return 404;
}
root static-resource;
expires 1d;
} }

“Referer”请求头为指定值时,内嵌变量$invalid_referer被设置为空字符串,否则这个变量会被置成“1”。
查找匹配时不区分大小写,其中none表示缺少referer请求头、blocked表示请求头存在,但是它的值被防火墙或者代理服务器删除、server_names表示referer请求头包含指定的虚拟主机名
五、跨域请求
环境说明:两台tomcat服务130,132;一台nginx服务131,131nginx代理132tomcat服务,130tomcat服务器请求131上一个json
1、130tomcat index.jsp页面请求json(注意添加jquery.js)


2、132服务添加demo.json

{
"hello":"world"
}
3、No 'Access-Control-Allow-Origin' header is present on the requested resource.

4、nginx配置
upstream tomcat {
#最大失败2次,失败后在60秒内不再转发到该机器
#server 192.168.189.130:8080 max_fails=2 fail_timeout=60s;
server 192.168.189.132:8080 max_fails=2 fail_timeout=60s;
}
server {
listen 80;
server_name localhost;
location / {
# 注释最原始的代理,使用负载均衡
# proxy_pass http://192.168.189.132:8080;
proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#性能优化相关
#例:130机器 error、超时、500、503的时候请求转到132
proxy_next_upstream error timeout http_500 http_503;
#连接超时时间
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
#跨域请求,注释掉130,只代理132
add_header 'Access-Control-Allow-Origin' '*'; #允许来自所有的访问地址
add_header 'Access-Control-Allow-Methods' 'GET,PUT,POST,DELETE,OPTIONS'; #支持的请求方式
add_header 'Access-Control-Allow-Header' 'Content-Type,*'; #支持的媒体类型
}
location ~ .*\.(js|css|png|svg|ico|jpg)$ {
#防盗链
#设置静态资源只能192.168.189.132访问,其他ip访问返回404
valid_referers none blocked 192.168.189.132;
if ($invalid_referer) {
return 404;
}
#130、132两台机器ROOT下静态资源改到bak下,创建static-resource存静态资源
root static-resource;
#nginx缓存配置,Response Headers多了一个Expires
expires 1d;
}
}
5、效果

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问的更多相关文章
- Nginx 反向代理 负载均衡 虚拟主机配置
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- Nginx 反向代理 负载均衡 虚拟主机
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- 十.nginx反向代理负载均衡服务实践部署
期中集群架构-第十章-nginx反向代理负载均衡章节章节====================================================================== 0 ...
- 【转】Nginx 反向代理 负载均衡 虚拟主机配置
原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...
- Centos7.4 Nginx反向代理+负载均衡配置
Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65 ...
- 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现
实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...
- 项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现
总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备 ...
- 项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现
目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:ng ...
- 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...
- Centos 7.6配置nginx反向代理负载均衡集群
一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76 nginx负载均衡器 192.168.2.82 web ...
随机推荐
- Redis数据库云端最佳技术实践
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 邹鹏,腾讯高级工程师,腾讯云数据库Redis负责人,多年数据库.网络安全研发经验. ...
- Python生成器、推导式之前襟后裾
生成器 函数体内有yield选项的就是生成器,生成器的本质是迭代器,由于函数结构和生成器结构类似,可以通过调用来判断是函数还是生成器,如下: def fun(): yield "我是生成器& ...
- 我的第一个python web开发框架(24)——系统重构与ORM
小白弄完代码版本管理和接口文档后,兴奋的找到老菜. 小白:老大,我已经按你讲的要求,将代码版本管理和接口文档都搞好了.从项目开始到现在,除了代码编写,感觉学会好多东西啊. 老菜:嗯嗯,实战确实需要掌握 ...
- SystemTap Beginners Guide
SystemTap 3.0 SystemTap Beginners Guide Introduction to SystemTap Edition 3.0 Red Hat, Inc. Don Do ...
- 网络流问题 P2763 试题库问题
题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...
- SQL LCASE() 函数
LCASE() 函数 LCASE 函数把字段的值转换为小写. SQL LCASE() 语法 SELECT LCASE(column_name) FROM table_name SQL LCASE() ...
- java获取类加载路径和项目根路径的5种方法
// 第一种:获取类加载的根路径 D:\IDEAWorkspace\hs-bluetooth-lock\src\applications\bluetooth-api\target\classes Fi ...
- 深入研究EF Core AddDbContext 引起的内存泄露的原因
前两天逛园子,看到 @Jeffcky 发的这篇文章<EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下>. 一开始只是粗略的扫了一遍没仔细看,只是觉得是多次 ...
- 【Beta阶段】展示博客
Beta阶段展示博客 blog software buaa 1.团队成员简介 Email:qianlxc@126.com Free time:8:00 7:00 a.m ~ 11:00 12:00p. ...
- 如何搭建SVN的客户端和使用
1.下载安装TortoiseSVN 首先我们需要从官方网站下载TortoiseSVN客户端工具 可以选择32位和64位.也可以直接使用搜索引擎搜索TortoiseSVN 也会出现直接的下载方式.这里不 ...