一、为什么要进行动静分离

分离资源,减少不必要到的请求消耗,减少请求延时。

注:我这里,是nginx处理静态资源,apache处理动态资源。

场景分析:

1、未分离之前的场景步骤

(1)客户端请求url到中间件(比如nginx,apache)

(2)中间件根据url请求相应目录,程序框架

(3)程序框架运行程序逻辑

(4)程序逻辑请求相应数据资源

(5)将数据资源返回给客户端

注:其实,静态资源是不需要经过动态请求,直接中间件返回给客户端就可以了。也就是说只要第1步和第5步就可以了

配置文件展示:

upstream php_api{
#代理请求到本地apache服务器,实现动静分离(这里我将apache默认端口更改为81)
server 127.0.0.1:81;
}
server {
listen 80;
server_name www.xiaobudiu.top;

access_log /etc/nginx/logs/access/www.xiabudiu.top.access.log main;
root /data/www;

location ~ \.php$ {
#如果网站访问的url后缀是.php,则代理使用apache进行解析
proxy_pass http://php_api;
index index.html index.htm;
}

#如果请求的是静态资源,则默认使用nginx进行处理
location ~ \.(jpg|png|gif)$ {
expires 1h;
gzip on;
}

location /{
index index.html index.htm;
}


# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 404 403 /404.html;
location = /404.html {
root /data/errorPage;
}


location ~ /\.ht {
deny all;
}
}

或者是这样:

upstream image {
server 192.168.0.3:80;
server 192.168.0.4:80;
}

upstream php {
server 192.168.0.5:80;
server 192.168.0.6:80;
}

server {
listen 80;
server_name www.xiaobudiu.top;

access_log /etc/nginx/logs/access/www.xiabudiu.top.access.log main;

location /{
#如果uri后缀不是.php或是图片后缀,就走本地服务器进行处理
root data/www;
index index.php index.html;
}

location ~* \.php$ {
#如果是.php结尾,反向代理到upstream php组里进行轮询
proxy_pass http://php;
}

location ~* "\.(.jpg|png|jpeg|gif)" {
#如果是.jpg,.png,.jpeg,.gif结尾,反向代理到upstream image组里进行轮询
proxy_pass http://image;
}

# redirect server error pages to the static page /404.html
error_page 500 502 503 504 404 403 /404.html;
location = /404.html {
root /data/errorPage;
}

location ~ /\.ht {
deny all;
}

}
注:这是在子配置文件中进行的定义,比如,上面编辑的就是/etc/nginx/conf.d/www.xiaobudiu.top.conf 文件

当然,由于nginx对代理有一定要求,所以,在nginx.conf中也要进行一定的定义,比如这样:

nginx.conf

user nginx;
worker_processes 1;
worker_rlimit_nofile 65536;

error_log /etc/nginx/logs/error/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
multi_accept on;
use epoll;
}


http {
include /etc/nginx/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 /etc/nginx/logs/access/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;
client_max_body_size 20m;

gzip on;
gzip_proxied any;
gzip_comp_level 3;
gzip_min_length 1k;
gzip_buffers 16 32k;
gzip_http_version 1.0;
gzip_types text/plain text/css application/json application/xml+rss text/javascript image/jpeg image/gif image/png;

fastcgi_buffers 256 16k;
fastcgi_buffer_size 128k;
fastcgi_connect_timeout 3s;
fastcgi_send_timeout 120s;
fastcgi_read_timeout 120s;
reset_timedout_connection on;
server_names_hash_bucket_size 100;

include /etc/nginx/conf.d/*.conf;

}

最后,需要说明的是,上述配置文件只是为了说明反向代理和负载均衡是如何实现的,并没有结合实际项目。

注:nginx 官方proxy模块文档 http://nginx.org/en/docs/http/ngx_http_proxy_module.html

注:负载均衡中多态服务器间的数据同步这里采用rsync,当然,还有其他方式。可参考:

https://www.cnblogs.com/miclesvic/p/6189540.html
————————————————
版权声明:本文为CSDN博主「m_nanle_xiaobudiu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80862272

Nginx使用upstream实现动静分离的更多相关文章

  1. Nginx 和 IIS 实现动静分离

    前段时间,搞Nginx+IIS的负载均衡,想了解的朋友,可以看这篇文章:<nginx 和 IIS 实现负载均衡>,然后也就顺便研究了Nginx + IIS 实现动静分离.所以,一起总结出来 ...

  2. Nginx 和 IIS 实现动静分离【转载】

    前段时间,搞Nginx+IIS的负载均衡,想了解的朋友,可以看这篇文章:<nginx 和 IIS 实现负载均衡>,然后也就顺便研究了Nginx + IIS 实现动静分离.所以,一起总结出来 ...

  3. Nginx 和 IIS 实现动静分离(转)

    转载地址:https://www.cnblogs.com/paul8339/p/5825201.html 动静分离,说白了,就是将网站静态资源(HTML,JavaScript,CSS,img等文件)与 ...

  4. Nginx 反向代理功能-动静分离

    Nginx 反向代理功能-动静分离 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  5. Nginx 配置实例-配置动静分离

    Nginx 配置实例-配置动静分离 1. 静态资源的创建 2. nginx 动静分离的配置 3. 验证 1. 静态资源的创建 这里使用的静态资源主要为 HTML 静态文件和图片. mkdir -vp ...

  6. nginx反向代理、动静分离

    环境:根据http://www.cnblogs.com/zzzhfo/p/6032095.html配置 方法一:根据目录实现动静分离 在web01创建image并上传一张图片作为静态页面 [root@ ...

  7. nginx+tomcat负载均衡+动静分离+redis集中管理session

    1.服务器A安装ng,服务器B.C安装tomcat: 2.服务器A建立/data/www目录,用于发布静态文件: 3.ng无动静分离配置: user root root; worker_process ...

  8. [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享

    反向代理概念 先说正向代理,比如要访问youtube,但是不能直接访问,只能先找个FQ软件,通过FQ软件才能访问youtube. FQ软件就叫做正向代理.所谓的反向代理,指的是用户要访问youtube ...

  9. Nginx的应用之动静分离

    Nginx 的动静分离 我们通过中间件将动态请求和静态请求进行分离,减少了不必要的请求消耗和延时. 动静分离后,即使动态服务不可用,但静态资源不会受到影响. 应用实例 1.准备环境 系统 角色 主机名 ...

  10. nginx四层负载及动静分离

    阿里云实验10.0.0.132 LB10.0.0.133 web0110.0.0.134 web02 步骤:1.安装nginx1.14 获取官网repo文件 yum install -y nginx ...

随机推荐

  1. EDP .Net开发框架--自动化日志

    平台下载地址:https://gitee.com/alwaysinsist/edp 自动化日志不需要额外调用日志相关功能即可无感实现程序集方法调用的日志记录. 创建业务逻辑处理类 public cla ...

  2. 基于 ESP8266_RTOS_SDK 驱动 HC-SR04

    平台 芯片 ESP8266EX 模组 ESP-12F 开发板 NodeMCU SDK ESP8266_RTOS_SDK branch master commit 83517ba1f5e26b9413f ...

  3. 用友u8 使用 api资源管理器新增单据的一些方法

    一般都使用传xml对象的方式.这种方式方便在只需传入正确的视图就行了.但是如果字段不全,或者字段的数据类型与api要求的不服,会报些莫名其妙的错误,比如这些: 项目大类0不存在项目大类0不存在货位不合 ...

  4. Python爬取数据并保存到csv文件中

    1.数据源 2.Python代码 import requests from lxml import etree import csv url = 'http://211.103.175.222:508 ...

  5. EndNote里参考文献的期刊名显示错误怎么办?

      本文介绍EndNote文献管理软件导入文献引用时,期刊名称带有%J前缀从而不能正常显示的解决方法.   前期的文章中,我们多次介绍了文献管理软件EndNote的具体使用方法与技巧.而在使用EndN ...

  6. 基于centos7的企业级ceph集群搭建[nautilus14.22版]

    集群规划 本案例通过ceph-deploy方式部署 主机名 配置 外网IP / 内网IP 角色 系统版本 ceph-node01 磁盘x3 50G 192.168.3.101/24 172.16.1. ...

  7. H264 H265 分析小工具

    1.在调试 H264 H265 编码的流数据的时候,有时候需要打印没有nalu的类型和数量,自己写了一个小工具 使用方式: p.p1 { margin: 0; font: 22px Menlo; co ...

  8. (JAVA)设计模式-适配器模式

    模式的定义和特点: 适配器模式(Adapter)是一种将一个类的接口转换成客户希望的另外一个接口的设计模式,可以提高代码的复用性和灵活性. 结构与实现: 定义一个适配器类来实现业务接口,再继承现有组件 ...

  9. Java常用的三个方法 `wait ` `notify` `notifyAll`

    常用的三个方法 wait notify notifyAll wait();方法使当前线程进入等待状态,直到另一个线程调用该对象的notify()或notifyAll()方法来唤醒它 notify(); ...

  10. (编程语言界的丐帮 C#).NET Framework 读取Excel到DataTable

    (编程语言界的丐帮 C#).NET Framework 读取Excel到DataTable 生成DataTable到Excel,支持 2007 .xlsx,2003 .xls. nuget 引用 NP ...