Nginx服务实现动静分离

  • 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 详细配置

# 写一个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解析

# 这里的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 基本配置

保持以上环境,可把配置文件备份并进行新测试
# 修改配置文件如下,可直接复制
[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

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-06-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏耕耘实录

Linux环境下NFS服务的安装与配置

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

30130
来自专栏云计算教程系列

在服务器上安装维护你的MongoDB数据库

MongoDB是一个免费的开源NoSQL文档数据库,在Web应用程序中经常使用。在本教程中,您将安装MongoDB,学习如何管理其服务并启用远程访问。

20320
来自专栏空帆船w

如何快速上传开源项目至 Jcenter

前几天上传了个项目至 Jcenter,看了网上很多教程,基本都是以 gradle-bintray-plugin 这个插件做上传,教程看着都好费劲,对于新手来说真...

22420
来自专栏我是攻城师

关于elaticsearch中更新数据的几种方式

40050
来自专栏Java学习123

配置IBM WEBSPHERE MQ触发器

43080
来自专栏hrscy

记录网站诞生过程-使用hexo+github pages

此博客记录了搭建网站的详细过程,以及建站过程中遇到的一些坑。博客介绍了安装homebrew,nodejs,hexo,域名注册,github设置,DNS解析等过程...

11830
来自专栏大数据和云计算技术

MongoDB系列11:Munin监控MongoDB

Munin是一个网络资源监控工具,可以帮助分析资源趋势。默认提供了大量的分析图形。以下讲述如何设置MongoDB的Munin监控插件。

23030
来自专栏云计算教程系列

如何在CVM上安装Nginx

Nginx是世界上最受欢迎的网络服务器之一,负责托管互联网上一些规模最大,流量最高的网站。在大多数情况下,它比Apache更具资源友好,可以用作Web服务器或反...

43020
来自专栏上善若水

S005SELinux(SEAndroid)的实际文件组成无标题文章

SEAndroid 是将SELinux 移植到Android 上的产物,可以看成SELinux 辅以一套适用于Android 的策略。

23250
来自专栏三木的博客

Linux权限管理

Linux权限管理是其一大特色,优秀的权限管理机制为Linux安全性提供了可靠的保障。 ###一、用户权限管理: root用户是系统的超级用户,是Linux系统...

27160

扫码关注云+社区

领取腾讯云代金券