upstream

Nginx使用upstream实现动静分离

旧时模样 提交于 2020-01-10 17:51:13
一、为什么要进行动静分离 分离资源,减少不必要到的请求消耗,减少请求延时。 注:我这里,是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负载均衡策略有几种

穿精又带淫゛_ 提交于 2020-01-04 01:05:23
1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2、指定权重 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 upstream backserver { server 192.168.0.14 weight=8; server 192.168.0.15 weight=10; } 3、IP绑定 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; } 4、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 upstream backserver { server server1; server server2; fair; } 5、url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 upstream backserver { server

Linux 问题故障定位

。_饼干妹妹 提交于 2020-01-01 12:41:46
1. 背景 有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力。如果我们有一套好的分析工具,那将是事半功倍,能够帮助大家快速定位问题,节省大家很多时间做更深入的事情。 2. 说明 本篇文章主要介绍各种问题定位的工具以及会结合案例分析问题。 3. 分析问题的方法论 套用5W2H方法,可以提出性能分析的几个问题 What-现象是什么样的 When-什么时候发生 Why-为什么会发生 Where-哪个地方发生的问题 How much-耗费了多少资源 How to do-怎么解决问题 4. cpu 4.1 说明 针对应用程序,我们通常关注的是内核CPU调度器功能和性能。 线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类一般分为: a. on-CPU:执行中,执行中的时间通常又分为用户态时间user和系统态时间sys。 b. off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。 如果大量时间花在CPU上,对CPU的剖析能够迅速解释原因;如果系统时间大量处于off-cpu状态,定位问题就会费时很多

Nginx反向代理的基本配置

匆匆过客 提交于 2019-12-27 01:14:39
(1)proxy_pass 语法:proxy_pass URL; 配置块:location、if 此配置项将当前请求反向代理到URL参数指定的服务器上,URL可以是主机名或IP地址加端口的形式,例如: proxy_pass http://localhost:8000/uri/; 也可以是UNIX句柄: proxy_pass http://unix:/path/to/backend.socket:/uri/; 还可以如上节负载均衡中所示,直接使用upstream块,例如: upstream backend { … } server { location / { proxy_pass http://backend; } } 用户可以把HTTP转换成更安全的HTTPS,例如: proxy_pass https://192.168.0.1; 默认情况下反向代理是不会转发请求中的Host头部的。如果需要转发,那么必须加上配置: proxy_set_header Host $host; (2)proxy_method 语法:proxy_method method; 配置块:http、server、location 此配置项表示转发时的协议方法名。例如设置为: proxy_method POST; 那么客户端发来的GET请求在转发时方法名也会改为POST。 (3)proxy_hide

nginx反向代理配置及常见指令

旧街凉风 提交于 2019-12-25 16:53:37
nginx.conf默认的server配置: server{ listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; } 配置location时,优先配置子目录,最后是默认根目录。比如下面,先配置/ent-boot/,这样,如果用户的请求地址是/ent-boot/这个路径,nginx当扫描到这个/ent-boot/后,就直接做转发不再继续扫描配置了。 其中,proxy_pass:表示代理转发,将请求转发到指定的url上。 server { listen 9999; server_name localhost; location /ent-boot/ { proxy_pass http://192.168.40.84:8802/ent-boot/; } location / { root /www/back/; index index.html index.htm; } } proxy_pass指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。 例如如下配置: server { listen 80; server_name buguge.com www.buguge

Nginx与F5会话保持介绍

喜夏-厌秋 提交于 2019-12-25 01:00:19
Nginx是一个很高效稳定的软负载均衡器,最新的版本可以负载均衡HTTP(s),TCP,UDP等多种协议的链接。一般访问量比较大一点的Web站点都会用NGINX做HTTP协议的Web负载均衡,其后端一般是多个PHP或者JAVA中间件。另外NGINX还可以和Keepalived配合防止均衡器的单点故障,这一点要强于F5,A10这一类的硬件负载均衡设备。 但是F5,A10等硬件负载均衡器虽然价格昂贵但是仍然很有市场,其中原因之一就是硬件负载均衡器比Nginx配置简单,具备图形化界面,有图形化的实时监测界面(收费版的Nginx Plux也有这个功能,但是价格更加昂贵)。但是最重要的一点,就是硬件负载均衡器有成熟的会话保持措施,这一点是Nginx的弱点。 Session会话保持机制? 一般来说,我们在java中都通过如下代码进行用户登录后的服务端注册,并且在用户下次请求时无需再登陆一遍,这就是Servlet的Session。 HttpSession session = request.getSession(false); session.setAttribute("data", data); session.getAttribute("data"); 使用了这种Session策略,那么Web容器比如tomcat就为当前用户生成一个SessionID,并且以这个SessionID为索引

gitlab仓库的克隆和提交

你说的曾经没有我的故事 提交于 2019-12-24 21:48:26
最近开始学习java,学习的过程中总结了从gitlab克隆代码到本地及修改代码够推送到个人库,在由个人库请求合并到主库的整个流程,再此仅是个人笔记。打开自己想要克隆代码的工作文件夹,右键git bash here。 一、gitlab克隆代码到本地(此处为HTTP克隆) 1、克隆个人库代码到本地 #克隆代码到本地 $ git clone http://XXX个人库XXX.git 2、cd进入项目文件夹 $ cd XXXXXX 3、查看本地和远程主机的全部分支(可不执行) $ git branch -a 4、将该Gitlab版本仓库添加到本机的远程列表中,upstream是主库名称可自定义 $ git remote add upstream http://XXX主库XXX.git 5、更新主库代码:pull更新,以防在开发过程中,远程被别人更新过新版本代码,upstream与上一步自己填写的主库名称保持一致 $ git pull upstream master 6、查看当前远程仓库 git remote -v 二、本地提交修改代码到个人库 1、右键git bash here,cd到或者打开XXXX盘目录,右键git bash here $ cd XXXXXX 2、用于显示工作目录和暂存区的状态,红色部分为自己本地修改的代码文件路径 $ git status 3、需要先更新主库代码

nginx修改upstream不重启的方法(ngx_http_dyups_module模块)

雨燕双飞 提交于 2019-12-23 17:50:54
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> nginx很强大,第三方模块也不少,淘宝在nginx上很活跃,特别是章亦春,他参与的模块至少10+, 好了今天主角不是他,是一款动态配置upstream的模块,这个模块使用rest接口. 简单,方便,并且可以不需要重启nginx。但是有个问题比较明显,nginx重启之后,什么都没了. 1. 安装 首先安装nginx动态upstream配置模块,如果你已经安装了nginx,那么轻参考ttlsa上的如何安装nginx第三方模块,会安装的请跳过. # cd /usr/local/src/ # wget https://github.com/yzprofile/ngx_http_dyups_module/archive/master.zip \ -O ngx_http_dyups_module-master.zip # unzip ngx_http_dyups_module-master.zip # wget http://nginx.org/download/nginx-1.4.2.tar.gz # tar -xzvf nginx-1.4.2.tar.gz # cd nginx-1.4.2 # ./configure --prefix=/usr/local/nginx-1.4.2 --with-http_stub

Nginx 反向代理配置

懵懂的女人 提交于 2019-12-22 23:09:48
在实现一个搜索下拉框的效果,因为需要通过AJAX来请求自己的一个webservice,但是JS是不允许访问不同源的资源的,所以需要配置一个代理服务器来实现数据的返回,找了好多文章试过都不行,下面记录下这篇文章的内容已备以后查看 Nginx为Tomcat服务器作反向代理的配置教程 这篇文章主要介绍了Nginx为Tomcat服务器作反向代理的配置教程,文中以Windows系统为环境来演示驱动JSP程序的示例,需要的朋友可以参考下 web上的server都叫web server,但是大家分工也有不同的。 nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西。 但是事无绝对,nginx也可以通过模块开发来提供应用功能,tomcat也可以直接提供http服务,通常用在内网和不需要流控等小型服务的场景。 apache用的越来越少了,大体上和nginx功能重合的更多。 严格的来说,Apache/Nginx 应该叫做「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python

用了 10 多年的 Tomcat 居然有bug !

馋奶兔 提交于 2019-12-22 22:17:46
为了解决分布式链路追踪的问题,我们引入了实现OpenTracing的Jaeger来实现。然后我们为SpringBoot框架写了一个starter以让用户实现近零改造接入全链路。 由于公司有一个封装了SpringBoot的内部框架,然后我们的starter就以最新框架所使用的SpringBoot版本为基础进行开发。所以业务系统在接入的时候需要先升级框架,然后再引入我们的starter才行无缝接入全链路。 故障描述 然后有一个业务系统就按照步骤,升级框架,引入starter就接入了全链路系统,并且功能测试压力测试都已经通过了。结果我们满怀信心地就上线了。结果,线上nginx报大量http 400错误。 故障排查 出现故障后,业务系统的研发人员查了所有的日志,包括elk以及机器上的日志,都没有发现明显的错误日志。这个就。。。 几番挣扎后还是没有在线上的日志中找到任何蛛丝马迹。这个就比较绝望了。更奇怪的是在测试环境中是正常的,这个就比较诡异了。 然后我们猜想是不是之前压力测试做得不够啊,我们还是在压测环境中再压测一下看看会不会复现。然后正好之前这个业务系统做过压测,那就赶紧找运维搭建一个压测环境。结果刚搭建完就非常给面子地复现了400错误。 然后运维同学就各种折腾,然后神奇般地在nginx中的location下加了一行配置后就好了. proxy_set_header HOST $host