Nginx功能DEMO

〇,环境准备

    * 一台Nginx服务器

    * 三台虚拟机,此处以Tomcat页面演示

    * 在nginx.conf配置文件的http模块,include自定义配置模块进行处理

http {
    include       mime.types;
    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;

    # 引入自定义配置块
    include /usr/develop/nginx/selfconf/self_nginx_conf
}

    * 配置需要引入的配置模块

 

    * 启动nginx,访问主页

一,反向代理

    * 在server.location标签下配置如下信息

// 代理到host:port链接
location / {
	proxy_pass http://192.168.91.129:8080;
}

    * 配置完成后重启nginx

./sbin/nginx -s reload

    * 访问首页

    * 通过添加请求头信息,显示正确IP地址

        -- nginx配置请求头信息

server {
    listen      80;
    server_name localhost;
    location / {
        proxy_pass http://192.168.91.129:8080;
         # 填充请求头信息
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 在指定情况下进行请求转发
        proxy_next_upstream error timeout http_500 http_503;
        # 请求超时时间
        proxy_connect_timeout 60s;
        # 发送/读取数据超时时间
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

        * jsp页面通过request获取请求头信息

<h2><%=request.getRemoteAddr()%></h2>
<h2><%=request.getHeader("X-Real-IP")%></h2>
<h2>192.168.91.129</h2>

        * 页面显示

二,负载均衡

    * 配置upstream信息,配置内容为需要负载的全部后台服务器

// tomcat表示该upstream名称,作为server.location引用标识
// max_fail : 最大失败次数
// fail_timeout : 最大失败次数后, 时间内 不再请求
// weight : 权重
upstream tomcat {
    server 192.168.91.128:8080 max_fail=3 fail_timeout=60s weight=3;
    server 192.168.91.129:8080;
    server 192.168.91.130:8080;
}

    * server.location引用upstream标签信息,修改proxy_pass请求路径

proxy_pass http://tomcat;

    * 启动对应三台服务器上的Tomcat服务

    * 重新加载配置服务查看负载情况

    * nginx默认负载算法为轮询算法,可以对负载均衡算法进行配置,比如根据IP的HASH值取模处理

upstream tomcat {
    ip_hash;
    server 192.168.91.128:8080 max_fails=3 fail_timeout=60s weight=3;
    server 192.168.91.129:8080;
    server 192.168.91.130:8080;
}

    * 服务请求发送到130服务器上

三,动静分离

    * 静态资源类型查看

vim ./conf/mime.types

    * 动静分离配置,增加location模块,根据正则匹配静态资源信息。静态资源块配置后,正则匹配到的静态资源,不在从对应服务器获取静态资源信息,而直接从配置的静态资源存储位置获取信息。首先,不移动静态资源,进行页面查看

location ~ .*\.(js|css|png|svg|ico|jpg)$ {
	# 动静分离后, 静态资源存储位置
	root /usr/develop/nginx/static;
}

    * 页面信息,从下图可以看到,js、css、png,jpg等配置的拦截信息全部丢失

    * 添加配置信息配置的文件位置,并复制Tomcat所需的静态资源

// 创建文件夹
[root@localhost nginx]# mkdir static
// 进入到Tomcat静态资源存在的路径
[root@localhost nginx]# cd /usr/develop/apache-tomcat-7.0.91/webapps/ROOT/
// 复制文件
[root@localhost ROOT]# cp *.png *.ico *.svg *.js *.css *.jpg /usr/develop/nginx/static/

    * 重新刷新页面

    * 静态资源缓存:静态资源存为变更比较少的资源,可以进行资源缓存

location ~ .*\.(js|css|png|svg|ico|jpg)$ {
	# 动静分离后, 静态资源存储位置
	root /usr/develop/nginx/static;
	# 静态资源缓存处理
	expires 1d;
}

四,静态压缩

    * 部分静态资源文件较大,通过压缩传输可以减少网络传输

    * 静态压缩在http模块进行配置,此处不在自定义模块进行处理,直接在nginx.conf进行

# 打开文件压缩功能
gzip on;
# 最小压缩长度
gzip_min_length 5k;
# 压缩等级
gzip_comp_level 3;
# 要压缩的文件类型
gzip_types application/javascript image/jpeg image/svg+xml;
# 压缩缓冲区, 按照原数据32位的4倍申请缓冲区
gzip_buffers 4 32k;
# 开启浏览器是否支持压缩判断
gzip_vary on;

    * 上述配置信息对svg文件有压缩处理,可以看到刚才打开的页面,存在svg文件,文件大小位26.9kb

    * 配置压缩信息重新加载后,刷新页面,文件只有9.2kb

五,防盗链

    * 互联网是一个公开的环境,存在部分资源的互相引用,比如图片或者文件信息,但是要保证服务请求是自己服务器发送的请求,就需要添加防盗链进行处理

    * 防盗链信息配置与动静分离配置位置一致

location ~ .*\.(js|css|png|svg|ico|jpg)$ {
	# 防盗链
    valid_referers none blocked 192.168.91.129;
	# 防盗链拦截后返回提示信息
    if ($invalid_referer) {
        return 404;
    }
	# 动静分离后, 静态资源存储位置
	root /usr/develop/nginx/static;
	# 静态资源缓存处理
	expires 1d;
}

    * 如配置信息所示,会对所有非129主机的服务进行静态资源拦截,并返回404;因为本机在129环境进行测试,所以修改主机为128,查看触发防盗链后的执行结果,可以看到下图中页面访问已经没有配置的拦截信息,且控制台css和png的访问已经报404错误码

六,跨域访问

    * 取消Nginx反向代理的服务器,只保留130一台

upstream tomcat {
    ip_hash;
#    server 192.168.91.128:8080 max_fails=3 fail_timeout=60s weight=3;
#    server 192.168.91.129:8080;
    server 192.168.91.130:8080;
}

    * 在130的tomcat根目录下创建test.txt文件(刚才未对txt文件进行拦截)

    * 从页面直接通过130路径访问该文件

    * 修改129的index.jsp,让其直接访问130下的test.txt文件

<head>
	<title><%=request.getServletContext().getServerInfo() %></title>
	<script src="jquery.js"></script>
	<link href="favicon.ico" rel="icon" type="image/x-icon" />
	<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
	<link href="tomcat.css" rel="stylesheet" type="text/css" />
	<script>
		$(function(){
			$.get("http://192.168.91.129/test.txt", {}, function(result){
				alert(result);
			});
		});
	</script>
</head>

    * 通过F12查看Console信息,可以看到,涉及跨域,请求失败

    * 配置Nginx跨域请求信息,实现Nginx跨域访问;在自定义配置模块servce.location内配置

# Nginx解决跨域问题
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE';
add_header 'Aceess-Control-Allow-Header' 'Content-Type,*';

    * 配合完成后重新刷新界面

七,附完整配置信息

    *nginx.conf

http {
    include       mime.types;
    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;

    include /usr/develop/nginx/selfconf/self_conf.conf;

    # 打开文件压缩功能
    gzip on;
    # 最小压缩长度
    gzip_min_length 5k;
    # 压缩等级
    gzip_comp_level 3;
    # 要压缩的文件类型
    gzip_types application/javascript image/jpeg image/svg+xml;
    # 压缩缓冲区, 按照原数据32位的4倍申请缓冲区
    gzip_buffers 4 32k;
    # 开启浏览器是否支持压缩判断
    gzip_vary on;
}

    * self_conf.conf

upstream tomcat {
    ip_hash;
#    server 192.168.91.128:8080 max_fails=3 fail_timeout=60s weight=3;
#    server 192.168.91.129:8080;
    server 192.168.91.130:8080;
}

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;
        # 在指定情况下进行请求转发
        proxy_next_upstream error timeout http_500 http_503;
        # 请求超时时间
        proxy_connect_timeout 60s;
        # 发送/读取数据超时时间
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        # Nginx解决跨域问题
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE';
        add_header 'Aceess-Control-Allow-Header' 'Content-Type,*';
    }

    location ~ .*\.(js|css|png|svg|ico|jpg)$ {
        # 防盗链
        valid_referers none blocked 192.168.91.129;
        # 防盗链拦截后返回提示信息
        if ($invalid_referer) {
            return 404;
        }
        # 动静分离后, 静态资源存储位置
        root /usr/develop/nginx/static;
        # 静态资源缓存处理
        expires 1d;
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值