上一篇文章(http://www.cnblogs.com/chenxizhang/p/4684260.html),我做了一个实验,就是利用Visual Studio,基于Nancy框架,开发了一个自托管(Self-hosting)的应用程序,然后将其部署到了一台Ubuntu的虚拟机上面,通过mono将其顺利地运行了起来,这样也就实现了.NET应用程序在Liunx系统上面的移植。

这一篇要讲解的是进一步的实验,我们都知道Nginx这款服务器,它可以用来做反向代理服务器,也可以做负载均衡。

关于nginx(要读成 engine x),有兴趣的朋友可以多看一下官方网站:http://nginx.org/

通过Nginx做反向代理

首先,需要安装nginx

sudo apt-get install nginx
然后,需要对Nginx进行配置
cd /etc/nginx/sites-available/
这个目录下面默认会有一个default的配置文件,内容如下
它是在80端口进行监听。你可以直接修改这个文件,例如我上图中其实已经设置了将所有请求转发(proxy_pass)到之前我们启动的那个网站(8888端口)。
我们也可以自己创建一个独立的配置文件,另外指定一个端口

cat > nancydemo

然后输入如下的内容

server {
    listen       81;
    server_name  yourdomainname.com;
    root /var/www/nancydemo;

location /Content/ {
        alias /var/www/nancydemo/Content/;
        location ~*  \.(jpg|jpeg|png|gif|ico|css|js|ttf)$ {
            expires 365d;
        }
    }

location / {
            proxy_pass http://127.0.0.1:8888;
    }
}

按下CTRL +D保存这个文件,然后重新加载一下配置信息,就可以在81端口访问到原先8888端口的内容了

sudo /etc/init.d/nginx reload

有童鞋可能会问了,为什么要这么麻烦呢?用户直接访问8888端口不就好了吗?通过访问81然后再访问8888端口,这样会不会有性能下降呢?

其实呢,这个问题的关键在于你要理解什么叫反向代理。反向代理一方面隐藏了真正的服务器信息(例如地址),另外,还可能带来更加快的访问速度。

直接访问(端口8888)以及通过代理(端口81)访问的压力测试结果

启用两台Web服务器,通过nginx做负载均衡

nginx不仅仅可以作为反向代理服务器,而且也是一款很出色的负载均衡服务器。为了做这个实验,我在服务器端分别用之前写好的程序,启动了两个网站,端口分别为8888和9999。

接下来介绍一下,如何配置nginx使其可以实现负载均衡。方法很简单,我们需要编辑nancydemo这个配置文件(请注意红色标出的部分)

upstream xizhang{
        server 127.0.0.1:8888;
        server 127.0.0.1:9999;

}
server {
    listen       81;
    server_name  yourdomainname.com;
    root /var/www/nancydemo;

location /Content/ {
        alias /var/www/nancydemo/Content/;
        location ~*  \.(jpg|jpeg|png|gif|ico|css|js|ttf)$ {
            expires 365d;
        }
    }

location / {
            proxy_pass http://xizhang;
    }
}

配置完成之后,我们需要重新加载一下配置信息

sudo /etc/init.d/nginx reload

测试结果表明每秒请求数明显上升

我们可以在服务器中看到有两个nginx进程,以及mono的进程。

关于使用nginx实现负载均衡,还有一些细节,有兴趣可以参考 http://nginx.org/en/docs/http/load_balancing.html

nginx还可以作为静态资源服务器,实现动静分离(并且可以缓存起来),进一步提高Web服务器的性能和吞吐量。这个话题就不过多展开了,有兴趣的朋友们可以参考官方的文档

在ubuntu上面配置nginx实现反向代理和负载均衡的更多相关文章

  1. nginx简单反向代理和负载均衡(ubuntu)

    nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机    均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...

  2. nginx的反向代理和负载均衡的一个总结

    之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...

  3. nginx(三)反向代理和负载均衡

    nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...

  4. nginx实现反向代理和负载均衡

    利用nginx做反向代理和负载均衡是减轻服务器压力的有效方式.nginx代理服务器接收多个客户端请求, 根据配置的参数均衡到每个tomcat服务器上,tomcat处理请求,返回响应结果给nginx,n ...

  5. nginx的反向代理和负载均衡的区别是什么 - 开源中国社区

    nginx的反向代理和负载均衡的区别是什么 - 开源中国社区   nginx的反向代理和负载均衡的区别是什么 #user  nobody;worker_processes  1;#error_log  ...

  6. 七、CentOS 6.5 下 Nginx的反向代理和负载均衡的实现

    CentOS 6.5 下 Nginx的反向代理和负载均衡的实现 * 修复上面文章的问题: 复制出一个tomcat2之后,修改service.xml文件时,要修改三个端口: 1. <!-- 800 ...

  7. Nginx使用反向代理实现负载均衡

    Nginx使用反向代理实现负载均衡 yls 2019-9-20 简介 基于docker容器以及docker-compose,所以需要自学docker在linux环境的基本使用 使用两个tomcat作为 ...

  8. 转载:Nginx做反向代理和负载均衡时“X-Forwarded-For”信息头的处理

    转载自:https://blog.51cto.com/wjw7702/1150225 一.概述 如今利用nginx做反向代理和负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的地方,本文 ...

  9. nginx 作为反向代理实现负载均衡的例子

    以下我们就来举例说明如何使用 nginx 实现负载均衡.因为nginx在处理并发方面的优势,现在这个应用非常常见.nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作 ...

随机推荐

  1. 浅谈SQL Transaction在请求中断后的行锁表锁

    最近在维护Web Service接口时,由于数据数据量达到千万级别,接口调用不时出现错误让人不胜烦恼,经过性能测试查出瓶颈在数据库数据处理上,可着实忙了一番.相信众多程序猿和DBA都会头痛性能的问题, ...

  2. 深入浅出HTTP协议(WEB开发和面试必备)

    1. 基础概念篇   a.简介 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和 ...

  3. codeforces 360 E - The Values You Can Make

    E - The Values You Can Make Description Pari wants to buy an expensive chocolate from Arya. She has  ...

  4. bootstrap按钮样式

    <a class='btn' href='javascript:;'>常规按钮</a> <a class='btn btn-small' href='javascript ...

  5. spring mvc + ehcache 利用注解实现缓存功能

    我的spring是3.1的,因为项目需求,需要在查询时候加上缓存,小白一个,完全没有用过缓存(ehcache),摸索了一天终于会了一点通过注解来使用ehcache进行缓存,立刻给记录下来. 首先 我的 ...

  6. offsetTop、clientTop、scrollTop、offsetTop属性

    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对 ...

  7. php面向对象中的几个基本定义

    面向对象: 面向对象是现代编程中的一种重要设计方法,其基本思想是使用对象,类,封装,继承等来进行程序设计. 对象: 一只猪,一只羊,一辆汽车. 类: 类的主要作用就是创建对象. 封装: 类的特点是将对 ...

  8. ormlite的使用方法

    ormlite是什么? 简单来说,就是我们定义一个实体类,利用这个框架,它可以帮我们吧这个实体映射到我们的数据库中,在Android中是SQLite,数据中的字段就是我们定义实体的成员变量. 官网地址 ...

  9. PYTHON之全局变量

    应该尽量避免使用全局变量.不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性.对全局变量,如果程序员甲修改了_a的值,程序员乙同时也要使用_a,这时可能导致程序中的错误.这种错误是很难 ...

  10. java基本数据类型

    基本数据类型概念 java是一种强类型语言,意味着必须为每一个变量声明一种数据类型. java拥有8中基本数据类型,主要包含如下:4中整形类型(long.int.short.byte)表示整形数值:两 ...