nginx学习(2):启动gzip、虚拟主机、请求转发、负载均衡
一、启用gzip
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml application/json;
gzip_vary on;
将上面这段放在nginx.conf文件 http{...}之间即可
二、虚拟主机
server {
listen 80;
server_name www.aaa.com;
access_log logs/aaa.access.log combined;
location / {
root r:/www/aaa.com;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.bbb.com;
access_log logs/bbb.access.log combined;
location / {
root r:/www/bbb.com;
index index.html index.htm;
}
}
这里配置了二个虚拟主机,分别绑定到域名www.aaa.com及www.bbb.com
三、请求转发

如上图,为了安全起见,通常会把真正的web 应用服务器放在内网,不允许外界直接访问,这时可利用nginx的反向代理将请求转到内部服务器
server {
listen 80;
server_name www.aaa.com;
location / {
proxy_pass http://192.168.1.201:8080 ;
proxy_set_header Host $host:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
access_log off;
}
这样,访问 http://www.aaa.com/home/index.aspx 就相当于访问http://192.168.1.201:8080/home/index.aspx
有些时候,我们希望将共用的静态资源(比如:jquery,共用css),直接放在nginx下,背后的web app server,只处理动态资源(比如:.aspx/.do/.jsp),可以改进一下:
server {
listen 80;
server_name www.aaa.com;
root R:/www/aaa.com;
location / {
proxy_pass http://192.168.1.201:8080 ;
proxy_set_header Host $host:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
location ~ .*\.(js|css)?$ {
expires 1h;
}
access_log off;
}
这样,访问http://www.aaa.com/content/site.css 实际上读取的是R:/www/aaa.com/content/site.css 这个文件
四、负载均衡

如上图,nginx在前端利用反向代理实现软件负载均衡,nginx不仅能实现负载均衡,当某一个node失效时,还能自动故障转移,关键配置如下:
proxy_connect_timeout 5;
upstream aaa_server_group{
server 172.21.129.181:9091 max_fails=1 fail_timeout=60s;
server 172.21.129.181:9092 max_fails=1 fail_timeout=60s;
server 172.21.129.57:9012 max_fails=1 fail_timeout=60s;
ip_hash;
}
server {
listen 80;
server_name www.aaa.com;
root R:/www/aaa.com;
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://aaa_server_group ;
proxy_set_header X-Forwarded-For $remote_addr;
}
location ~ .*\.(js|css)?$ {
expires 1h;
}
access_log off;
}
解释一下:
第1行, proxy_connect_timeout 5;表示nginx连接后端服务器时,如果超过5秒没反应,则认为超时
第3行,这里定义了一组服务器aaa_server_group,其中max_fails=1 fail_timeout=60s 表示如果该节点转发失败1次,接下来的60秒内,将不再转发到这台服务器
第6行,表示如果后端服务器返回502,504,超时等错误时,即认为节点失效,自动将请求转发到其它节点
nginx负载均衡的方案有好几种,这里我们配置为ip_hash;表示会根据客户端的IP生成hash,固定转发到某一台node,这样可解决集群环境中session丢失的问题。如果web应用中没有使用session,去掉ip_hash;即变成轮讯方案。此外,4-6行上,还可以加weight=N来指定权重,按权重转发,如果服务器配置不均衡,比如某一台服务器配置特别强,可以考虑将这台服务器的weight值加大。
如果某台服务器暂时不想加入负载均衡,在最后加 down即可。
最后附送一个小技巧:nginx -t 可以检查配置文件是否正确
nginx学习(2):启动gzip、虚拟主机、请求转发、负载均衡的更多相关文章
- HAProxy详解(三):基于虚拟主机的HAProxy负载均衡系统配置实例【转】
一.基于虚拟主机的HAProxy负载均衡系统配置实例 1.通过HAProxy的ACL规则配置虚拟主机: 下面将通过HAProxy的ACL功能配置一套基于虚拟主机的负载均衡系统.这里操作系统环境为:Ce ...
- nginx 虚拟主机+反向代理+负载均衡
nginx是一款免费.开源的http服务器,它是由俄罗斯程序设计师开发的,官方测试,nginx能支撑5万的并发量,主要功能有虚拟主机.反向代理和负载均衡等. nginx配置 # 全局块 ... # e ...
- nginx笔记 安装nginx 配置 反向代理 多虚拟主机
1,检测linux上是否 通过yum安装了nginxrpm -qi nginx 2.安装nginx之前的依赖包yum install gcc patch libffi-devel python- ...
- nginx之安装、多虚拟主机、反向代理和负载均衡
一.web服务器与web框架 1.web服务器简介 Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过 HTTP(超文 ...
- Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)
Nginx 简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开 ...
- spring cloud 通过 ribbon 实现客户端请求的负载均衡(入门级)
项目结构 环境: idea:2020.1 版 jdk:8 maven:3.6.2 1. 搭建项目 ( 1 )父工程:spring_cloud_demo_parent pom 文件 <?xml v ...
- 并发测试 java.lang.OutOfMemoryError: GC overhead limit exceeded Xms Xmx 阻塞请求 单节点 请求分发 负载均衡
at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) at javax.servlet.http.HttpServlet.se ...
- CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装
CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 http://www.cnblogs.com/ppoo24/p/4918288.ht ...
- 【nginx运维基础(2)】Nginx的配置文件说明及虚拟主机配置示例
配置文件说明 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为当前主机的CPU总核心数. worker_processes 8; #全局错误日志定义类型, ...
- Nginx三种模式的虚拟主机(附Apache基于域名的虚拟主机)
1.安装nginx # pcre中文"perl兼容正则表达式",安装pcre库是为了让nginx支持具备URL重写功能 # 的Rewrite模块,rewrite可以实现动态页面转成 ...
随机推荐
- C#操作符??和?:
C#操作符??和?: 先看如下代码: string strParam = Request.Params["param"]; if ( strParam== null ) { ...
- Blocks的实现
相关结构体与函数 __block_impl 存储block对应类型信息(属于哪个Block大类,以及对应的回调函数指针FuncPtr struct __block_impl { void *isa; ...
- 从本地向 Github 上传项目步骤攻略(快速上手版)
最近想把之前自己做的一些好玩的项目共享到Github,网上找了一圈上传教程,都感觉写的太深奥.复杂,云里雾里,特把自己的方法纪录如下: PS:这种方式一般适用于:开始做项目时,没有直接在github上 ...
- android java数组应用与说明
如果定义类或结构数据则需每个都进行创建才可以使用,不然都为null 如: PointF pts[] = new PointF[5] ;//pts[0].x =CSSliderSize / 2;//这样 ...
- 002.ICMP--拼接ICMP包,实现简单Ping程序(原始套接字)
一.大致流程: 将ICMP头和时间数据设置好后,通过创建好的原始套接字socket发出去.目的主机计算效验和后会将数据原样返回,用当前时间和返回的数据结算时间差,计算出rtt. 二.数据结构: ICM ...
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
一.选择排序 1.基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 3.算法 ...
- 一:Go编程语言规范--块、声明、作用域
1.块 块为一对大括号括住的声明和语句.块 = "{" { 语句 ";" } "}" . 除显式源码块外,还有隐式块: 全域块 包含所有的G ...
- html5新增及删除标签
一.新增标签 有一种划分为,功能性标签[html5新增,如canvas,旧浏览器没有]和语义性标签[如header等只是增强语义,没有新功能].下面按照分几个小类来说. 1.结构标签 新增的结构标签, ...
- JAVA bio nio aio
[转自]http://qindongliang.iteye.com/blog/2018539 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? ...
- Hibernate一对一关系映射
Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...