在ubuntu上面配置nginx实现反向代理和负载均衡
上一篇文章(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实现反向代理和负载均衡的更多相关文章
- nginx简单反向代理和负载均衡(ubuntu)
nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机 均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...
- nginx的反向代理和负载均衡的一个总结
之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...
- nginx(三)反向代理和负载均衡
nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...
- nginx实现反向代理和负载均衡
利用nginx做反向代理和负载均衡是减轻服务器压力的有效方式.nginx代理服务器接收多个客户端请求, 根据配置的参数均衡到每个tomcat服务器上,tomcat处理请求,返回响应结果给nginx,n ...
- nginx的反向代理和负载均衡的区别是什么 - 开源中国社区
nginx的反向代理和负载均衡的区别是什么 - 开源中国社区 nginx的反向代理和负载均衡的区别是什么 #user nobody;worker_processes 1;#error_log ...
- 七、CentOS 6.5 下 Nginx的反向代理和负载均衡的实现
CentOS 6.5 下 Nginx的反向代理和负载均衡的实现 * 修复上面文章的问题: 复制出一个tomcat2之后,修改service.xml文件时,要修改三个端口: 1. <!-- 800 ...
- Nginx使用反向代理实现负载均衡
Nginx使用反向代理实现负载均衡 yls 2019-9-20 简介 基于docker容器以及docker-compose,所以需要自学docker在linux环境的基本使用 使用两个tomcat作为 ...
- 转载:Nginx做反向代理和负载均衡时“X-Forwarded-For”信息头的处理
转载自:https://blog.51cto.com/wjw7702/1150225 一.概述 如今利用nginx做反向代理和负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的地方,本文 ...
- nginx 作为反向代理实现负载均衡的例子
以下我们就来举例说明如何使用 nginx 实现负载均衡.因为nginx在处理并发方面的优势,现在这个应用非常常见.nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作 ...
随机推荐
- 非交织YUV格式转换
本文为自己写的从非交织yuv420转换出yuv444,yuv422h,yuv422v和手动裁剪422h,422v图片的代码 #include <fcntl.h> #include < ...
- niginx 负载均衡
下面是Nginx安装 直接yum install nginx不行,要先处理下源,下面是安装完整流程,十分简单: 1.CentOS 6,先执行:rpm -ivh http://nginx.org/pac ...
- Ant环境变量配置
Ant环境变量配置 1.新建系统变量ANT_HOME 变量名: ANT_HOME 变量值: D:\biancheng\apache-ant-1.7.1 2.修改PATH 变量值最后面 ...
- c#List移除列表中的元素
对于一个List<T>对象来说移除其中的元素是常用的功能.自己总结了一下,列出自己所知的几种方法. class Program { static void Main(string[] ar ...
- angularjs 解决ng-repeat数组内重复对象报错的问题
ng-repeat 循环数组内元素时,如果数组内元素重复,angular会抛出异常: Error: [ngRepeat:dupes] http://errors.angularjs.org/1.4.3 ...
- 在C#中调用EXE文件
1. 如果exe文件的返回值是int类型,标识操作执行的结果是否成功,例如: class Program { static int Main(string[] args) { return args. ...
- C++风格的回调对象方法. 采用template实现
今天看了一篇文章,收藏一下代码.读一读很有激情 #include <iostream> #include <string> #include <vector> us ...
- STL之priority_queue
下面以 long long 型队列介绍: Q.empty() // 判断队列是否为空 返回ture表示空 返回false表示空 bool Q.top() // 返回顶端元素的值 元素还在队列里 lon ...
- WebP 原理和 Android 支持现状介绍(转)
本文为腾讯Bugly开发者社区 投稿,作者:soonlai,版权归原作者所有,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/582939577ef9c5b70855 ...
- C++文本处理_文件读写
QT在进行文本读写时和C++一样,是基于文本流操作的. QT在读取全部文本时,相对比较便捷.使用readAll()函数,配合split()进行分隔符的拆分(例如行结束符"\n"), ...
