Nginx负载均衡实践之一:基本实现
由于现在的网站架构越来越大,基于互联网的用户也是日渐增长,所以传统的单机版服务器已经渐渐不能适应时代发展的需要。最近在和其他企业接触的过程中,发现对于互联网的经验尤为看重,所谓的互联网经验,其实就是指对于高并发,大数据量的处理能力。说到高并发这块,那么负载均衡是肯定不能少的。下面我将会在自己的机器上通过搭建一套单机版的负载均衡实现,来描述这个过程。
安装Nginx
首先,我们从官网http://nginx.org/download/nginx-1.9.9.zip中下载最新版本,然后解压到文件夹中,我这里为了方便,路径我就定为:E:\nginx。解压之后,在CMD窗口中,我们通过以下命令来开启Nginx服务:
start nginx --开启nginx nginx -s stop --关闭nginx nginx -s reload --修改配置文件后,重新加载nginx
需要特别注意的是,如果先运行了 nginx –s stop命令后,再运行nginx –s reload命令,会抛出错误信息的,所以在任何时候运行stop命令后,都要再运行以下 start nginx命令,然后再进行其他命令操作。
启动nginx服务之后,我们就可以在任务管理器中看到有两个进程存在:

然后我们可以通过在浏览器中打开 http://127.0.0.1访问地址,就可以看到nginx成功访问的信息了。这就表示我们的nginx安装正常,正确。

配置Nginx
接下来,我们就开始通过实例来演示如何进行单机负载均衡的。
首先,我们打开VS2013,创建两个WebApplication,名称分别为WebApplication1,WebApplication2. 这两个WebApplication的正文部分会有不同的标志信息用来表示当前访问的页面是属于二者中的哪一个的。
然后,我们发布网站,打开IIS,分别创建两个网站实例,然后进行指向,绑定地址分别设置为: 127.0.0.1:8100 和 127.0.0.1:8200
最后,我们进入nginx安装目录,打开conf文件夹下的nginx.conf文件,进行如下的配置:
1.添加一个upstream节点,用于标记数据库集群:
upstream test.var{
server 127.0.0.1:8100 weight=1;
server 127.0.0.1:8200 weight=1;
}
2.在server节点下,修改location节点,访问方式:
#对aspx后缀的进行负载均衡请求
location / {
root /wwwroot;#定义服务器的默认网站根目录位置
index index.aspx index.html index.htm;#定义首页索引文件的名称
proxy_pass http://test.var;
proxy_redirect default;
proxy_set_header X-Real-IP $remote_addr;
}
这样配置之后,基本就完成了,我附上所有的配置:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream test.var{
server 127.0.0.1:8100 weight=1;
server 127.0.0.1:8200 weight=1;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root html;
# index default.aspx index.html index.htm;
#}
#对aspx后缀的进行负载均衡请求
location / {
root /wwwroot; #定义服务器的默认网站根目录位置
index index.aspx index.html index.htm; #定义首页索引文件的名称
proxy_pass http://test.var;
proxy_redirect default;
proxy_set_header X-Real-IP $remote_addr;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
访问测试
上面配置完毕之后,我们就可以通过访问 127.0.0.1 来访问了:

我们可以看到,第一次访问的时候,我们访问的是WebApplication2,然后我们刷新页面:

刷新页面之后,我们看到,访问的是WebApplication1.
这样,当不同用户来访问我们的服务器的时候,由于nginx的负载均衡,使得不同用户访问的服务器是不同的,这也从一定程度上大大缓解了服务器的压力。
接下来,我会讲解对静态资源的缓存,session共享等等,敬请期待。
参考资源
【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
Nginx负载均衡实践之一:基本实现的更多相关文章
- Nginx 负载均衡和反向代理实践
nginx 以哪个配置文件启动 Nginx 负载均衡和反向代理实践 环境介绍 192.168.1.50 在这台主机上配置Nginx 的反向代理,负载均衡,和web1,web1使用的81号端口 1 ...
- 搞懂分布式技术9:Nginx负载均衡原理与实践
搞懂分布式技术9:Nginx负载均衡原理与实践 本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容, ...
- Nginx负载均衡 后端服务器怎么共享Session 问题
Nginx负载均衡 Nginx负载均衡一些基础知识: nginx 的 upstream目前支持 4 种方式的分配 1).轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端 ...
- Nginx负载均衡深入浅出
nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均 ...
- Nginx负载均衡介绍
Nginx真心牛逼 nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式 ...
- nginx负载均衡 - session失效
最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大.. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以 ...
- 利用Docker快速创建Nginx负载均衡节点
本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.Self-Host Kestrel 1. 在vs2017中新建dotnet core2. ...
- Nginx负载均衡配置简单配置方法
http://www.jb51.net/article/121235.htm Nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至不同的Web服务器.下面通过 ...
- 使用Docker快速创建.Net Core2.0 Nginx负载均衡节点
本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.Self-Host Kestrel 1. 在vs2017中新建dotnet core2. ...
随机推荐
- Idea开发环境中搭建Maven并且使用Maven打包部署程序
1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path中 备注:必须要有JAVA_HOM ...
- sharePoint 2016 弃用和删除的功能
前言 sharepoint 2016版本正式发布,但是相比较2013版本,还是删除或者准备删除一些功能,我们需要了解一下哪些功能已经被删除掉或者在下一个版本中移除,因为这些可能影响我们现有系统是否能够 ...
- Android Studio添加aar
1.把aar复制到项目中的 libs 里面 2.在module 里面的build.gradle 的根目录添加 repositories{ flatDir { dirs 'libs' } } 3.在mo ...
- Android Fragment生命周期
Fragment与Activity的生命周期关系: 刚打开Activity:Fragment onAttach > Fragment onCreate > Fragment onCreat ...
- 全新的membership框架Asp.net Identity(2)——绕不过的Claims
本来想直接就开始介绍Identity的部分,奈何自己挖坑太深,高举高打的方法不行.只能自己默默下载了Katana的源代码研究了好一段时间.发现要想能够理解好用好Identity, Claims是一个绕 ...
- AjaxHelper简介
在Asp.Net MVC中提供了AjaxHelper类: Ajax.ActionLink 创建一个超链接,点击时,使用Ajax提交数据到一个指定的控制器 Ajax.RouteLink 和ActionL ...
- Reporting Service 服务启动时报错The service did not respond to the start or control request in a timely fashion
案例环境: 启动一台数据库服务器(Windows Server 2003)的Reporting Service(SQL Server 2008 R2)服务时,出现如下错误信息: System.Inva ...
- git 命令使用总结
聊下 git rebase -i 聊下git merge --squash 聊下git pull --rebase 聊下 git remote prune origin 聊下 git 使用前的一些注意 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- SQL报表(Report Builder)里面的几个常见问题(持续更新)
一 SQL报表常常会遇到在表格中的相除,如果分母为零,一般会显示错误号,我们可以这么处理:(加上是A/B) ,, B) 但是我们不能这么写: ,,A/B) //我们不能这么写,会产生BUG,至于什么B ...