1.启动,重启,关闭

启动:/usr/local/nginx/sbin/nginx

(/usr/local/nginx/sbin/nginx -t 查看配置信息是否正确)

重启:/usr/local/nginx/sbin/nginx -s reload

关闭:ps 
-ef | grep nginx

在进程列表里 面找master进程,它的编号就是主进程号了
从容停止Nginx:
kill

-QUIT 主进程号
快速停止Nginx:
kill -TERM 主进程号

强制停止Nginx:
pkill -9 nginx

配置实例:

测试域名  :a.com

A服务器IP :192.168.5.149 (主)

B服务器IP :192.168.5.27

C服务器IP :192.168.5.126

部署思路
A服务器做为主服务器,域名直接解析到A服务器(192.168.5.149)上,由A服务器负载均衡到B服务器(192.168.5.27)与C服务器(192.168.5.126)上。

域名解析

由于不是真实环境,域名就随便使用一个a.com用作测试,所以a.com的解析只能在hosts文件设置。

打开:C:WindowsSystem32driversetchosts

在末尾添加

192.168.5.149   
a.com

保存退出,然后启动命令模式ping下看看是否已设置成功

从截图上看已成功将a.com解析到192.168.5.149IP

A服务器nginx.conf设置
打开nginx.conf,文件位置在nginx安装目录的conf目录下。

在http段加入以下代码

注:

  1. client_max_body_size 300m;             //允许客户端请求的最大的单个文件字节数
  2. client_body_buffer_size 128k;        //缓存区代理用户端文件字节数
  3. client_body_temp_path /dev/shm/client_body_temp;     //请求试图写入到缓存文件的目录路径
  4. proxy_connect_timeout600;              //和后端服务器连接的超时时间,
  5. proxy_read_timeout 600;                  //连接成功等待后端相应的时间,默认是60S
  6. proxy_send_timeout 600;             //后端服务器的回传时间,规定服务器在一定的时间内传送完。
  7. proxy_buffer_size 16k;                  //代理服务器的缓存文件头部文件大小,默认是4K
  8. proxy_buffers 4 32k;                    //后端真是服务器的数量和大小
  9. proxy_busy_buffers_size 64k;            //当系统忙事,申请更大proxy_buffer
  10. proxy_temp_file_write_size 64k;         //写入临时目录的文件大小
  11. proxy_temp_path /dev/shm/proxy_temp;    //指定一个目录来缓存比较大的代理请求
server{

listen
80;
    server_name
a.com;
    location /
{
       
proxy_pass        
http://a.com;     #指定需要代理的URl

proxy_set_header  
Host            
$host;//首先说明 proxy_set_header 指令在向反向代理的后端Web服务器发起请求时添加指定的 Header头信息,后端web服务器有多个基于域名的虚拟主机时,通过头信息Host,用于指定请求的域名,这样后端web才能识别反向代理请求哪个虚拟主机处理。

proxy_set_header  
X-Real-IP       
$remote_addr;#/允许将发送到后端的服务器请求重新定义或者增加一个字段,这个可以是变量也是文本组合。

proxy_set_header  
X-Forwarded-For 
$proxy_add_x_forwarded_for;//联系下面PS中所写,在后端web中就算加上$http_x_Forwarded_for这条,也得不到用户的IP,所以在nginx反向代理添加Header头信息 X-Forwarded-For在配合后端服务器日志文件的$http_x_Forwarded_for这条就可以获得用户的IP地址了。

}
}

保存重启nginx

B、C服务器nginx.conf设置
打开nginx.confi,在http段加入以下代码

server{
    listen
80;
    server_name
a.com;
    index
index.html;
    root
/data0/htdocs/www;
}

保存重启nginx

测试
当访问a.com的时候,为了区分是转向哪台服务器处理我分别在B、C服务器下写一个不同内容的index.html文件,以作区分。

打开浏览器访问a.com结果,刷新会发现所有的请求均分别被主服务器(192.168.5.149)分配到B服务器(192.168.5.27)与C服务器(192.168.5.126)上,实现了负载均衡效果。

B服务器处理页面

C服务器处理页面

假如其中一台服务器宕机会怎样?
当某台服务器宕机了,是否会影响访问呢?

我们先来看看实例,根据以上例子,假设C服务器192.168.5.126这台机子宕机了(由于无法模拟宕机,所以我就把C服务器关机)然后再来访问看看。

访问结果:

我们发现,虽然C服务器(192.168.5.126)宕机了,但不影响网站访问。这样,就不会担心在负载均衡模式下因为某台机子宕机而拖累整个站点了。

如果b.com也要设置负载均衡怎么办?
很简单,跟a.com设置一样。如下:

假设b.com的主服务器IP是192.168.5.149,负载均衡到192.168.5.150和192.168.5.151机器上

现将域名b.com解析到192.168.5.149IP上。

在主服务器(192.168.5.149)的nginx.conf加入以下代码:

upstream b.com {
     
server  192.168.5.150:80;
     
server  192.168.5.151:80;
}
 
server{
    listen
80;
    server_name
b.com;
    location /
{
       
proxy_pass        
http://b.com;
       
proxy_set_header  
Host            
$host;
       
proxy_set_header  
X-Real-IP       
$remote_addr;
       
proxy_set_header  
X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}
保存重启nginx

在192.168.5.150与192.168.5.151机器上设置nginx,打开nginx.conf在末尾添加以下代码:

server{
    listen
80;
    server_name
b.com;
    index
index.html;
    root
/data0/htdocs/www;
}

保存重启nginx

完成以后步骤后即可实现b.com的负载均衡配置。

主服务器不能提供服务吗?
以上例子中,我们都是应用到了主服务器负载均衡到其它服务器上,那么主服务器本身能不能也加在服务器列表中,这样就不会白白浪费拿一台服务器纯当做转发功能,而是也参与到提供服务中来。

如以上案例三台服务器:

A服务器IP :192.168.5.149 (主)

B服务器IP :192.168.5.27

C服务器IP :192.168.5.126

我们把域名解析到A服务器,然后由A服务器转发到B服务器与C服务器,那么A服务器只做一个转发功能,现在我们让A服务器也提供站点服务。

我们先来分析一下,如果添加主服务器到upstream中,那么可能会有以下两种情况发生:

1、主服务器转发到了其它IP上,其它IP服务器正常处理;

2、主服务器转发到了自己IP上,然后又进到主服务器分配IP那里,假如一直分配到本机,则会造成一个死循环。

怎么解决这个问题呢?因为80端口已经用来监听负载均衡的处理,那么本服务器上就不能再使用80端口来处理a.com的访问请求,得用一个新的。于是我们把主服务器的nginx.conf加入以下一段代码:

server{
    listen
8080;
    server_name
a.com;
    index
index.html;
    root
/data0/htdocs/www;
}
 
重启nginx,在浏览器输入a.com:8080试试看能不能访问。结果可以正常访问

既然能正常访问,那么我们就可以把主服务器添加到upstream中,但是端口要改一下,如下代码:

upstream a.com {
     
server  192.168.5.126:80;
     
server  192.168.5.27:80;
     
server  127.0.0.1:8080;
}

由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。

重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。

主服务器也能正常加入服务了。

最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。

二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。

三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。

四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上

 
 
 
 
 
 

最新文章

  1. Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》
  2. Eclipse+MinGW+Boost环境搭建
  3. 使用html2canvas实现网页截图并嵌入到PDF
  4. Mybatis 插入null值报错
  5. C#版本的历史
  6. tomcat filewatchdog but has failed to stop it原因以及解决方法
  7. IIS下打印报表到Excel
  8. 如何组建理想SOA团队
  9. 快速优化yum (for centos5.5)
  10. Dijkstra算法(迪杰斯塔拉算法)
  11. Code Forces 448C Painting Fence 贪婪的递归
  12. iOS的相对路径和绝对路径
  13. android动画介绍之 自定义Animation动画实现qq抖一抖效果
  14. Django-restframework 源码之认证组件源码分析
  15. qt+opencv 构建项目时报错——no such file or directory
  16. 今天我给你们推荐一本书《Linux就该这么学》!!!
  17. poj 2559(栈的应用)
  18. 潭州课堂25班:Ph201805201 django 项目 第二课 git 版本控制 (课堂笔记)
  19. Servlet 小知识
  20. 移动端常用的 meta设置

热门文章

  1. 仿探探卡片滑动vue封装并发布到npm
  2. ansible - playbook(剧组)
  3. Pillow 模块~Python图像处理
  4. bupt summer training for 16 #5 ——数据结构
  5. ActiveMQ学习总结(10)——ActiveMQ采用Spring注解方式发送和监听
  6. Java基础学习总结(69)——匿名内部类与Lambda表达式
  7. Dubbo学习总结(2)——Dubbo架构详解
  8. 百度地图API位置偏移的校准算法
  9. A java code
  10. 幻世(OurDream)TM 2D图形引擎开通捐赠渠道