Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

时间:2022-09-09 16:57:14

一、反向代理

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文件夹

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

此时访问http://192.168.189.132:8080/发现首页样式没了
Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

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

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

4、./nginx -s reload  nginx重新加载,此时访问http://192.168.189.131/可以看到当请求转发到192.168.189.132:8080上时,首页样式能够显示
Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

缓存

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

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

设置expires 1d;后浏览器多了Expires
Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

压缩

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;

压缩前:

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

压缩后:

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

四、防盗链

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;
} }

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

“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)

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

2、132服务添加demo.json

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

{
"hello":"world"
}

3、No 'Access-Control-Allow-Origin' header is present on the requested resource.

Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问

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反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问的更多相关文章

  1. Nginx 反向代理 负载均衡 虚拟主机配置

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  2. Nginx 反向代理 负载均衡 虚拟主机

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  3. 十.nginx反向代理负载均衡服务实践部署

    期中集群架构-第十章-nginx反向代理负载均衡章节章节====================================================================== 0 ...

  4. 【转】Nginx 反向代理 负载均衡 虚拟主机配置

    原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...

  5. Centos7.4 Nginx反向代理+负载均衡配置

    Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65 ...

  6. 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现

    实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...

  7. 项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现

    总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备 ...

  8. 项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现

    目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:ng ...

  9. 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器

    Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...

  10. Centos 7.6配置nginx反向代理负载均衡集群

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

随机推荐

  1. 20145334赵文豪 《Java程序设计》第4周学习总结

    20145334赵文豪 <Java程序设计>第4周学习总结 教材学习内容总结 第六章知识点总结 1-继承共同行为:如果在程序设计上存在着重复,那就需要修改,可以吧相同的程序代码提升(pul ...

  2. redmine 出口中国的乱码

    pdf 这是redmine的bug.必须在个人账户更改将设立中国语文,足够的人才来解决. 顺便说一下,提示.以下更改文件的方法是无效的 /home/redmine/redmine-2.5.1/lib/ ...

  3. 约瑟夫问题的java实现

    约瑟夫问题,又称丢手帕问题.试着实现了一下,实现逻辑简单,没有复杂的算法,适合新手参考. //参数step指步进值,步进到几则出列 //参数count指共有几个人 public static int ...

  4. 【实验室笔记】C&num;的Socket客户端接收和发送数据

    采用socket发送和接收数据的实验中,服务器采用的是网络助手作为模拟服务器端. 客户端程序流程: 应用的命名空间: using System.Net; using System.Net.Socket ...

  5. &lbrack;转载&rsqb; HDFS简介

    转载自http://www.csdn.net/article/2010-11-26/282582 http://subject.csdn.net/hadoop/ 一.HDFS的基本概念 1.1.数据块 ...

  6. 在Raspbian Stretch系统上设置Home Assistant开机启动

    较新的Linux发行版趋向于用systemd管理守护进程,如果您不确定系统是否正在使用systemd,您可以使用以下命令进行检查: -o comm= 如果上述命令返回字符串systemd,说明系统正在 ...

  7. c&num; 域名转换成ip地址

    tcp协议发送到某个地址端口号是,地址是域名3322.net类型,转换成ip地址.亲测两种方法都可以. 1.参考https://blog.csdn.net/szsbell/article/detail ...

  8. February 26th&comma; 2018 Week 9th Monday

    A good beginning is half done. 良好的开端是成功的一半. We can't finish anything if we don't start, sometimes ge ...

  9. selenium之调用Javascript

    selenium调用Javascript使用方法: driver.execute_script(js) 使用JS获取元素文本值,代码片段如下: ...... js = "return $(' ...

  10. 转载:HTuple数据和VC数据的相互赋值

    转载来自:http://blog.csdn.net/taily_duan/article/details/51026260 HTuple和VC数据的相互赋值 // HTuple→VC 数据类型转换 H ...