前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx服务实现动静分离

Nginx服务实现动静分离

作者头像
lyb-geek
发布2018-07-26 10:09:21
5310
发布2018-07-26 10:09:21
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路
  • 1 Nginx实现动静分离
    • 1.1 http_proxy_module
    • 1.2 动静分离原理及环境准备
    • 1.3 详细配置
    • 1.3 访问测试
  • 2 根据客户端的不同进行转发
    • 2.1 基本配置
    • 2.2 测试访问

1 Nginx实现动静分离

1.1 http_proxy_module

Proxypass指令属于ngxhttpproxymodule模块,此模块可以将请求转发到另一台服务器,在实际的反向代理工作中,会通过location功能匹配指定的URI,然后把接收到的服务匹配URI的请求通过proxy_pass抛给定义好的upstream节点池。

官方地址:

http://nginx.org/en/docs/http/ngxhttpproxymodule.html#proxypass

http proxy模块相关参数

说明

proxy_set_header

设置http请求header项传给后端服务器节点,例如:可实现让代理后端的服务器节点获取访问客户端用户的真实IP地址

client_body_buffer_size

用于指定客户端请求主体缓冲区大小

proxy_connect_timeout

表示反向代理与后端节点服务器连接的超时时间,即发起握手等候响应的超时时间

proxy_send_timeout

表示代理后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接

proxy_read_timeout

设置Nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是Nginx已经进入后端的排队之中等候处理的时间

proxy_buffer_size

设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置的大小

proxy_buffers

设置缓冲区的数量和大小。nginx从代理的后端服务器获取的响应信息,会放置到缓冲区

proxy_busy_buffers_size

用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐的大小为proxy_buffers*2

proxy_temp_file_write_size

指定proxy缓存临时文件的大小

1.2 动静分离原理及环境准备

通过Nginx实现动静分离,即通过Nginx反向代理配置规则实现让动态资源和静态资源及其他业务分别由不同的服务器解析,以解决网站性能、安全、用户体验等重要问题。

环境准备

Hostname

IP

说明

lb01

10.0.0.5

Nginx主负载均衡器

lb02

10.0.0.6

Nginx辅负载均衡器

web01

10.0.0.8

web01服务器

web02

10.0.0.7

web02服务器

VIP(虚拟IP):10.0.0.3

若进行以下测试,需要准备好Nginx环境

LNMP之Nginx服务搭建及三种类型虚拟主机 keepalived+nginx反向代理负载均衡配置

1.3 详细配置

代码语言:javascript
复制
# 写一个proxy的配置文件,然后可以直接在nginx.conf中include调用
[root@lb01 ~]# vim /application/nginx/conf/proxy.conf
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

# 修改配置文件如下,可直接复制
[root@lb01 ~]# vim /application/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream static_pools{
        server 10.0.0.7:80 weight=1;
    }
    upstream upload_pools{
        server 10.0.0.7:8080 weight=1;
    }
    upstream default_pools{
        server 10.0.0.8:80 weight=1;
    }

    server {
        listen 80;
        server_name www.rsq.com;
        location / {
            proxy_pass http://default_pools;
            include proxy.conf;
        }
        location /static/ {
            proxy_pass http://static_pools;
            include proxy.conf;
        }
        location /upload/ {
            proxy_pass http://upload_pools;
            include proxy.conf;
        }
    }
}

# 修改web02的www配置文件,使其监听8080端口,修改完记得重载服务
# 这里的www.conf是被调用的配置文件,也可以直接写入到nginx.conf
[root@web02 ~]# cat /application/nginx/conf/extra/www.conf
    server {
        listen       80;
        server_name  www.rsq.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    }

    server {
        listen       8080;
        server_name  www.rsq.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    }

# 创建测试文件
[root@web02 ~]# mkdir /application/nginx/html/www/{static,upload}
[root@web02 ~]# echo "static page" >/application/nginx/html/www/static/index.html
[root@web02 ~]# echo "upload page" >/application/nginx/html/www/upload/index.html
[root@web01 ~]# cat /application/nginx/html/www/index.html
web01_www

1.3 访问测试

测试访问之前需要在Client中做hosts解析

代码语言:javascript
复制
# 这里的10.0.0.3为keepalived生成的虚拟IP(VIP)
cat >>/etc/hosts<<EOF
10.0.0.3 www.rsq.com bbs.rsq.com blog.rsq.com
EOF

2 根据客户端的不同进行转发

2.1 基本配置

代码语言:javascript
复制
保持以上环境,可把配置文件备份并进行新测试
# 修改配置文件如下,可直接复制
[root@lb01 ~]# vim /application/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream android_pools {
        server 10.0.0.7:80 weight=1;
    }
    upstream iphone_pools {
        server 10.0.0.7:8080 weight=1;
    }
    upstream pc_pools {
        server 10.0.0.8:80 weight=1;
    }

    server {
        listen 80;
        server_name www.rsq.com;
        location / {
            if ($http_user_agent ~* "android")
            {
                proxy_pass http://android_pools;
            }
            if ($http_user_agent ~* "iphone")
            {
                proxy_pass http://iphone_pools;
            }
                proxy_pass http://pc_pools;
                include proxy.conf
        }
    }
}

2.2 测试访问

此次测试由于环境问题,没有测试,大家可以在Windows VMware workstation上做NAT映射,或者电脑开热点使手机连接,虚拟机网卡选择桥接模式上网,保证手机可以访问到虚拟机web服务。测试流程和动静分离测试保持类似。

curl -A 可自定义User-Agent,实例如下 [root@lb01 ~]# curl -A android www.rsq.com [root@lb01 ~]# curl -A iphone www.rsq.com

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Nginx实现动静分离
    • 1.1 http_proxy_module
      • 1.2 动静分离原理及环境准备
        • 1.3 详细配置
          • 1.3 访问测试
          • 2 根据客户端的不同进行转发
            • 2.1 基本配置
              • 2.2 测试访问
              相关产品与服务
              负载均衡
              负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档