Nginx使用upstream实现动静分离

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

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

注:我这里,是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.htmlerror_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HMAC

HMAC 的用途 HMAC 算法主要应用于身份验证,用法如下: 1.客户端发出登录请求2.服务器返回一个随机值,在会话记录中保存这个随机值3.客户端将该随机值作为密钥,用户密码进行 hmac 运算,递交给服务器4.服务器读取数据库中…

JS的原型链和继承

原型和原型链 原型prototype,在创建新函数的时候,会自动生成,而prototype中也会有一个constructor,回指创建该prototype的函数对象。 __proto__是对象或者实例中内置的[[prototype]],其指向的是产生该对象的对象的prot…

Android 的滑动分析以及各种实现

一、滑动效果的产生滑动一个View,本质区别就是移动一个View。改变当前View所在的坐标,原理和动画相似不断改变坐标位置实现。实现View的滑动就必须监听滑动的事件,并且根据事件传入的坐标,动态且不断改变View的坐标,从…

微软产品 .NET 6 迁移之旅

“.NET性能不行!”“.NET有什么像样的产品吗!?”“升级到.NET 6有什么好处!?”……听人扯淡还不如看看微软自己是怎么做的。本文将汇总一下微软的开发博客——这些博客均涉及微软将产品和服务迁移到.NET 6的成果。博客…

Navicat 连接 RDS数据库

场景介绍: 随着业务量的逐渐增加,公司的数据库压力也会逐渐增大,使用自己购买的esc创建的mysql的话,还得考虑相应的dba维护,也比较繁琐,说不定还做的并不完美,这时,RDS就派上用场了&…

bzoj1045 糖果传递

Description 有n个小朋友坐成一圈&#xff0c;每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。 Input 第一行一个正整数nn<1000000&#xff0c;表示小朋友的个数&#xff0e;接下来n行&#xff0c;每行一个整数ai&#xff0c;表示第i个小朋友得…

BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型API范围...

BEGINNING SHAREPOINT 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型API范围 本章之前提到过。client对象模型应用中一个不足就是缺乏对SP APIs和訪问功能的支持不足。转载于:https://www.cnblogs.com/yutingliuyl/p/6748382.html

为.NET应用添加截图功能

本文介绍了 .NET 实现截图功能的思路和过程&#xff0c;如果你仅想了解最后的解决方案&#xff0c;可以直接查看文章末尾。截图的功能我们应该都经常使用&#xff0c;在开发软件时&#xff0c;我们有时也或多或少需要提供这方面的功能&#xff0c;无论是为用户更方便提供远程诊…

K8S集群Master高可用实践

本文将在前文基础上介绍k8s集群的高可用实践&#xff0c;一般来讲&#xff0c;k8s集群高可用主要包含以下几个内容&#xff1a;1、etcd集群高可用2、集群dns服务高可用3、kube-apiserver、kube-controller-manager、kube-scheduler等master组件的高可用 其中etcd实现的办法较为…

[转载]智能科普:VR、AR、MR的区别

智能科普&#xff1a;VR、AR、MR的区别 http://news.zol.com.cn/553/5534833.html news.zol.com.cn 2015-11-23 16:00近日&#xff0c; 获得谷歌5亿美元融资的技术公司Magic Leap在WSJD展会中放出了一段实录视频&#xff0c;引起不小骚动。如今&#xff0c;也有媒体称他们为MR公…

PHP项目中,记录错误日志

一、场景介绍&#xff1a; 环境&#xff1a;LNMP 我们通常是通过nginx的错误日志来分析分错的&#xff0c;也就是我们在各个server中定义的error_log。 比如下面这样&#xff0c;就是将错误日志定义在/etc/nginx/logs/error/www.xiaobudiu.top.log&#xff0c;发生错误&#xf…

持续集成指南:GitLab 的 CI/CD 工具配置与使用

1前言写代码这项工作&#xff0c;本质就是将工作自动化&#xff0c;减少手工操作提供效率&#xff0c;因为人的本质都是懒狗&#xff0c;程序员也不能例外&#xff0c;为了各种意义的效率提升&#xff08;懒&#xff09;&#xff0c;我们需要持续集成工具&#xff0c;将代码测试…

php 错误日志 redis' already loaded in Unknown on line 0

环境介绍&#xff1a;LNMP 报错信息&#xff1a;注&#xff1a;这个php_errors.log 是我在php.ini 中定义的错误日志路径 问题原因&#xff1a; 报错信息给出的意思是&#xff1a;redis和memcache 模块已经加载过问题解决&#xff1a; php加载模块有两种方式&#xff0c;一种是…

第一周作业

我的Git账号&#xff1a;AI1452349541 和代码图 这是我在电脑和手机上下的网易有道词典 &#xff0c; C也下了。 ***学习内容总结*** 感觉任务并不是很难&#xff0c;有些任务没完成是 因为还没买电脑不好弄&#xff0c;下周电脑一定到位。 ***遇到的问题…

升级MariaDB为10.1版本

2019独角兽企业重金招聘Python工程师标准>>> CentOS中升级mariadb为10.1GA版本。 1、如果有&#xff0c;停止服务 systemctl stop mariadb 2、卸载原来的数据库服务 yum -y remove mari* 3、删除数据库文件 rm -rf /var/lib/mysql/* 4.创建/etc/yum.repos.d/MariaDB…

第一篇文章

第一次写博客。欢迎各位大牛捧场转载于:https://www.cnblogs.com/clnchanpin/p/6753665.html

羊了个羊的Ignite大会又来啦

据说最近羊了个羊非常火啊&#xff5e;可惜没有时间精力研究。不过&#xff0c;薅微软羊毛的机会我是一定不会错过的&#xff0c;这不&#xff0c;薅羊毛的机会来了&#xff0c;哈哈哈。作为经常薅微软羊毛的老司机&#xff0c;今天收到了微软的邮件&#xff0c;告知有新的羊毛…

清除谷歌浏览器的dns缓存

谷歌地址栏输入&#xff1a; chrome://net-internals/#dns出现下面界面&#xff1a;找到DNS选项&#xff0c;选择clear host cache即可效果&#xff1a;这样&#xff0c;谷歌浏览器上的dns缓存就清理掉了。应用场景&#xff1a; 本地环境和线上环境用的是一个host&#xff0c;这…

生产YUM源搭建

企业内部YUM源搭建转载于:https://www.cnblogs.com/xiangtanglaojing/p/7603581.html

什么样的代码称得上是好代码?

“软件自有其美感所在” --《重构》图片&#xff1a;崇礼瀚海梁的山花 拍摄于2022年8月13日 摄影师&#xff1a;刘先生这篇内容写作于4年前&#xff08;2018年&#xff09;&#xff0c;是自己多年软件开发工作的一点感悟&#xff0c;现在看来虽有偏颇&#xff0c;但总体思想方…