您的位置:首页 > 运维架构 > 反向代理

在ubuntu上面配置nginx实现反向代理和负载均衡

2015-07-29 20:50 826 查看
上一篇文章(/article/4660166.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 href="http://;" target=_blank>;
}
}

按下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服务器的性能和吞吐量。这个话题就不过多展开了,有兴趣的朋友们可以参考官方的文档



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: