一、启用gzip

1     gzip  on;
2     gzip_min_length 1k;
3     gzip_buffers 4 16k;
4     gzip_http_version 1.1;
5     gzip_comp_level 2;
6     gzip_types text/plain application/x-javascript text/css application/xml application/json;
7     gzip_vary on;

将上面这段放在nginx.conf文件 http{...}之间即可

二、虚拟主机

 1     server {
 2         listen       80;
 3         server_name  www.aaa.com;
 4         access_log logs/aaa.access.log combined;
 5         location / {
 6             root   r:/www/aaa.com;
 7             index  index.html index.htm;
 8         }       
 9     }
10 
11     server {
12         listen       80;
13         server_name  www.bbb.com;
14         access_log logs/bbb.access.log combined;
15         location / {
16             root   r:/www/bbb.com;
17             index  index.html index.htm;
18         }       
19     }

这里配置了二个虚拟主机,分别绑定到域名www.aaa.com及www.bbb.com

三、请求转发

如上图,为了安全起见,通常会把真正的web 应用服务器放在内网,不允许外界直接访问,这时可利用nginx的反向代理将请求转到内部服务器

 1     server {
 2         listen       80;
 3         server_name  www.aaa.com;    
 4     location / {
 5         proxy_pass http://192.168.1.201:8080 ;
 6         proxy_set_header Host $host:8080;
 7         proxy_set_header X-Real-IP $remote_addr;
 8         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 9         proxy_set_header Via "nginx";
10     }
11     access_log off;    
12     }

这样,访问 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),可以改进一下:

 1     server {
 2         listen       80;
 3         server_name  www.aaa.com;
 4     root R:/www/aaa.com;
 5 
 6     location / {
 7         proxy_pass http://192.168.1.201:8080 ;
 8         proxy_set_header Host $host:8080;
 9         proxy_set_header X-Real-IP $remote_addr;
10         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
11         proxy_set_header Via "nginx";
12     }
13 
14     location ~ .*\.(js|css)?$ {
15         expires 1h;
16     }
17 
18     access_log off;    
19     }

这样,访问http://www.aaa.com/content/site.css 实际上读取的是R:/www/aaa.com/content/site.css 这个文件

四、负载均衡

如上图,nginx在前端利用反向代理实现软件负载均衡,nginx不仅能实现负载均衡,当某一个node失效时,还能自动故障转移,关键配置如下:

 1     proxy_connect_timeout 5; 
 2     
 3     upstream aaa_server_group{    
 4     server 172.21.129.181:9091 max_fails=1 fail_timeout=60s; 
 5     server 172.21.129.181:9092 max_fails=1 fail_timeout=60s; 
 6     server 172.21.129.57:9012 max_fails=1 fail_timeout=60s;
 7     ip_hash;
 8     }
 9 
10     server {
11         listen       80;
12         server_name  www.aaa.com;
13     root R:/www/aaa.com;
14 
15     location / {
16         proxy_next_upstream http_502 http_504 error timeout invalid_header;
17         proxy_pass http://aaa_server_group ;            
18         proxy_set_header X-Forwarded-For $remote_addr;        
19     }
20 
21     location ~ .*\.(js|css)?$ {
22         expires 1h;
23     }
24 
25     access_log off;    
26     }

解释一下:

第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-启动gzip、虚拟主机、请求转发、负载均衡的更多相关文章

  1. HAProxy详解(三):基于虚拟主机的HAProxy负载均衡系统配置实例【转】

    一.基于虚拟主机的HAProxy负载均衡系统配置实例 1.通过HAProxy的ACL规则配置虚拟主机: 下面将通过HAProxy的ACL功能配置一套基于虚拟主机的负载均衡系统.这里操作系统环境为:Ce ...

  2. nginx 虚拟主机+反向代理+负载均衡

    nginx是一款免费.开源的http服务器,它是由俄罗斯程序设计师开发的,官方测试,nginx能支撑5万的并发量,主要功能有虚拟主机.反向代理和负载均衡等. nginx配置 # 全局块 ... # e ...

  3. 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置

    第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本  uwsgi- ...

  4. Nginx多站点虚拟主机实现单独启动停止php-fpm、单独控制权限设置

    Nginx多站点虚拟主机实现单独启动停止php-fpm.单独控制权限设置 来源:osyunwei.com 作者:qihang01 发表于:2012-08-19 21:26 点击: 说明: 站点1:bb ...

  5. Nginx(二):虚拟主机配置

    什么是虚拟主机? 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功 ...

  6. linux上nginx上配置虚拟主机的相关配置

    1.配置主配置: nginx/conf/nginx.conf 2.虚拟主机配置:nginx/conf/extra/learn.weixin.com.conf 配置完后,重启服务器!

  7. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  8. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言   Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...

  9. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  10. keepalived+nginx实现HA高可用的web负载均衡

    Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用.Keepalived ...

随机推荐

  1. [COGS2554][SYZOJ247][福利]可持久化线段树

    思路: 主席树模板. 注意内存的分配,原始的线段树有$2n$个结点,每次更新时最多增加$log(n)$个结点,总共有$q$次询问,所以存储结点的数组大小为$2N+q log(n)$. #include ...

  2. C++ 引用 & 的详解

    转载来自:CSDNinsistGoGo  (http://blog.csdn.net/insistgogo/article/details/6655077) 引用的应用: 常引用: 语法: const ...

  3. 2D Tookit简单教程

    1. 在Project Window中点击Create > tk2d > Sprite Collection”点击Sprite Collection,创建一个Sprite Collecti ...

  4. Vs2017 控制台 中文输出是乱码的问题解决

    下午直接用vs写的控制台的东西,然后发现控制台输出的中文是乱码,于是就百度了下.同样的是,百度上很多的答案.我就说下我解决的过程.先上图 第一种方案:有可能是控制台的问题.若是控制台的问题,则与VS无 ...

  5. css 类选择器结合元素选择器和多类选择器

    1.结合元素选择器 <p class="important">css</p> p.important {color: red} 匹配class属性包含imp ...

  6. 使用 IntraWeb (30) - TIWAppInfo、TIWMimeTypes、TIWAppCache

    TIWAppInfo //IntraWeb 12.2.15 开始使用 TIWAppInfo 来获取应用的相关信息, 和 IWServerController.WebApplication 的某些属性有 ...

  7. [转]delphi 有授权许可的字符串拷贝函数源码

    一段看上去“貌不惊人”的Delphi插入汇编代码,却需要授权许可,但是与经典的同类型函数比较,确实“身手不凡”. 研究代码的目的在于借鉴,本文通过分析,并用C++重写代码进行比较,再次证明这段代码效率 ...

  8. 发布库到仓库 maven jcenter JitPack MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. linux 切分文件

    linux经常需要处理文件,如果文件比较大,那么需要切分成为若干的小文件再处理. 命令:split 比如有一个文件: ll -h 1431531915758 -rw-r--r-- 1 ticketde ...

  10. 【java】求两个字符串的最长公共子串

    这个是华为OJ上的一道题目.首先,如果我们用java写代码,华为OJ有以下三条规则需遵守,否则编译无法通过或者用例无法通过,规则如下: (1)一定不可以有包名: (2)主类名只能为Main: (3)不 ...