nginx的作用

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成 集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,
实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾

Nginx要实现负载均衡需要用到proxy_pass代理模块配置

Nginx负载均衡与Nginx代理不同地方在于

Nginx代理仅代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池

Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。

upstream配置

在nginx.conf > http 区域中

upstream django {
server 10.0.0.10:;
server 10.0.0.11:;
}

在nginx.conf > http 区域 > server区域 > location配置中

添加proxy_pass

location / {
root html;
index index.html index.htm;
proxy_pass http://django;
}

此时初步负载均衡已经完成,upstream默认按照轮训方式负载,每个请求按时间顺序逐一分配到后端节点。

upstream分配策略

weight 权重

upstream django {
      server 10.0.0.10:8000 weight=5;
      server 10.0.0.11:9000 weight=10;#这个节点访问比率是大于8000的
}

ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器
upstream django {
    ip_hash;
      server 10.0.0.10:8000;
      server 10.0.0.11:9000;
}

backup

在非backup机器繁忙或者宕机时,请求backup机器,因此机器默认压力最小

upstream django {
      server 10.0.0.10:8000 weight=5;
      server 10.0.0.11:9000;
      server node.oldboy.com:8080 backup;
}

负载均衡实验环境规划

角色            ip                    主机名
lb01       192.168.119.10       lb01    
web01       192.168.119.11       web01
web02       192.168.119.12       web02

关闭防火墙

iptables -F
sed -i 's/enforcing/disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

一、web01服务器配置nginx,创建index.html

server {
      listen       80;
      server_name 192.168.119.11;
      location / {
      root /node;
          index index.html index.htm;
      }
}

mkdir /node
echo 'i am web01' > /node/index.html

#启动NGINX
./sbgin/nginx

二、web02服务器配置nginx,创建index.html

server {
  listen       80;
  server_name 192.168.119.12;
  location / {
      root /node;
      index index.html index.htm;
}

mkdir /node
echo 'i am web02...' > /node/index.html
#启动nginx
./sbing/nginx

三、配置lb01服务器的nginx负载均衡

1.检查lb01的 nginx.conf

http {
  include       mime.types;
  default_type application/octet-stream;
  sendfile       on;
  keepalive_timeout 65;
  upstream node {
    server 192.168.119.11:80;
    server 192.168.119.12:80;
}
  server {
      listen       80;
      server_name 192.168.119.10;
      location / {
        proxy_pass http://node;
        include proxy_params; #需要手动创建
      }
  }
}

2.手动创建proxy_params文件,文件中存放代理的请求头相关参数

[root@lb01 conf]# cat /opt/nginx/conf/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

四、访问lb01节点nginx,反复刷新

nginx负载均衡调度算法

调度算法    概述
轮询     按时间顺序逐一分配到不同的后端服务器(默认)
weight    加权轮询,weight值越大,分配到的访问几率越高
ip_hash    每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash   按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少链接数,那个机器链接数少就分发

#1.轮询(不做配置,默认轮询)

#2.weight权重(优先级)

#3.ip_hash配置,根据客户端ip哈希分配,不能和weight一起用x

项目部署

**django如果通过python3 manage.py runserver形式运行,内部调用的是wsgiref模块,运行的socket服务端**
**性能低下,单进程,单线程**

使用nginx+ uwsgi进行项目部署

1.准备django项目 NB_crm

通过unzip,解压项目文件

2.安装虚拟环境,在虚拟环境下,安装uwsgi,进行部署

,如果安装了virtualenvwrapper工具可以直接workon + 虚拟环境名 直接激活
,如果没有,就需要进入到虚拟环境的安装目录找到,找到bin文件下的 activate 文件,使用source + activate 激活虚拟环境

3.利用uwsgi运行一个python web脚本文件(了解)

新建一个py脚本文件,写入如下内容
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
启动命令如下
uwsgi --http : --wsgi-file test.py
--http参数意思是,基于http协议运行 在 8000端口
--socket
--wsgi-file 找到wsgi.py文件

4.利用uwsgi运行django项目

(以参数形式运行项目),(还有以配置文件形式运行,把运行的参数写入到一个文件里面,基于这个文件运行)
命令如下
uwsgi --http : --module mysite.wsgi
--module 找到django项目的第二层里面的wsgi.py文件
#在django第一层里运行
#uwsgi默认不支持静态文件解析,使用nginx去解析静态文件,不能加载静态文件

5.热加载django项目,uwsig自动重启django

uwsgi --http : --module NBcrm.wsgi   --py-autoreload=
#不用手动重启服务端,就会自己检测出改动并重启

6.基于配置文件的形式,运行nbcrm(重要)

uwsgi.ini 创建在虚拟环境文件夹内

# uwsgi的配置文件  

[uwsgi]
# Django-related settings
# the base directory (full path)
#项目的绝对路径,定位到nbcrm的第一层
chdir = /opt/NBcrm
# Django's wsgi file
# 找到项目第二层的wsgi文件
module = NBcrm.wsgi
# the virtualenv (full path)
# 找到虚拟环境的绝对路径
home = /root/Envs/nbcrm
# process-related settings
# master
# 主进程
master = true
# maximum number of worker processes
# 开启uwsgi的多进程数,根据cpu核数来定义
processes =
# the socket (use the full path to be safe
# 基于socket链接运行crm,只有与nginx结合的时候,才使用socket形式
socket = 0.0.0.0:
# 当你没用nginx,调试项目的时候,使用http形式
#http = 0.0.0.0:
# ... with appropriate permissions - may be needed
# chmod-socket =
# clear environment on exit
vacuum = true #指定一个参数,日志放在哪 #如果你使用了supervisor,请注释掉这个参数
#守护进程在后台运行,且将日志信息,输出到uwsgi.log日志中
#daemonize = uwsgi.log

启动配置文件的命令

/root/Envs/nbcrm/bin/uwsgi   --ini uwsgi.ini 

7.配置nginx,结合uwsgi,以及处理静态文件的配置

nginx.conf请求转发配置如下

 server {
listen ;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:;
}
}
nginx处理crm的静态文件方式
.修改django的settings.py静态文件
添加如下参数
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_ROOT='/opt/s20static'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'statics'),
] .执行命令,收集crm的静态文件
python3 /opt/NBcrm/manage.py collectstatic .配置nginx的location路径匹配,找到crm这些静态文件
在nginx.conf中找到server{}标签,添加如下参数
#当我的请求url是 192.168.16.142:/static/xxxxxxxx
location /static {
alias /opt/s20static/;
} .启动nginx,访问nginx的80,是否可以转发到crm

8.使用supervisor进程管理工具,管理你的项目(?)

其实,supervisor就是在帮你执行命令而已 使用supervisor管理进程,这个进程不得在后台运行,

退出虚拟环境,在物理环境下安装supervisor
.安装命令
pip3 install -i https://pypi.douban.com/simple supervisor
.创建supervisor的配置文件
echo_supervisord_conf > /etc/supervisor.conf
.编辑配置文件,写入管理nbcrm的任务参数
[program:s20nbcrm]
command=/root/Envs/nbcrm/bin/uwsgi --ini uwsgi.ini
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程 .启动supervisor,去管理uwsgi supervisord -c /etc/supervisor.conf #指定配置文件,启动这个服务 .通过supervisorctl管理命令,管理uwsgi
supervisorctl -c /etc/supervisor.conf 命令如下
status all
start s20nbcrm
stop s20nbcrm
stop all

配置文件的格式

配置文件形式
nginx.conf
my.cnf
my.ini
uwsgi.ini
*.xml
*.json

Nginx的负载均衡和项目部署的更多相关文章

  1. Nginx+Tomcat7+Mencached负载均衡集群部署笔记

    Nginx+Tomcat+Memcached负载均衡集群服务搭建 操作系统:CentOS6.5 本文档主要解说,怎样在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群s ...

  2. 若依项目利用nginx实现负载均衡及保持会话

    记录一下若依项目利用nginx实现负载均衡及保持会话的步骤. 此次作为试验性的测试,为了方便在本地window的环境上实现. 具体步骤: 1.安装两个tomcat8,可以下载一个后,另一个复制即可,下 ...

  3. 利用nginx实现负载均衡和动静分离

    1.Nginx介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 . Nginx 是由 ...

  4. 消费者用nginx做负载均衡,提供者用zookeeper自带功能实现负载均衡

    公司的项目基于阿里的Dubbo微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业务服务器,一套是灾备服务器.准备在这两套服务器上实现Dubbo的分布式服务 ...

  5. 深入理解Nginx及使用Nginx实现负载均衡

    前言: 最近在部署项目时要求实现负载均衡,有趣的是发现网上一搜全部都是以下类似的配置文件 upstream localhost{ server 127.0.0.1:8080 weight=1; ser ...

  6. 【高可用架构】用Nginx实现负载均衡(三)

    前言 在上一篇,已经用Envoy工具统一发布了Deploy项目代码.本篇我们来看看如何用nginx实现负载均衡 负载均衡器IP 192.168.10.11 [高可用架构]系列链接:待部署的架构介绍 演 ...

  7. Nginx网络负载均衡,负载均衡,网络负载,网络均衡

    本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...

  8. 转载 深入理解Nginx及使用Nginx实现负载均衡

    转载:https://developer.51cto.com/art/202001/609322.htm 正向代理是代理客户端,也就是客户端能真正接触到的,比如访问外网时需要使用VPN软件,在这个软件 ...

  9. Nginx作为负载均衡服务器(Windows环境)

    一个最简单的负载均衡测试,不涉及到session复制,只是将请求分配到不同的服务器上去而已. 1.创建一个简单的web应用.只有一个index.jsp页面,,内容如下. <%@ page lan ...

随机推荐

  1. Educational Codeforces Round 73 (Rated for Div. 2) C. Perfect Team

    链接: https://codeforces.com/contest/1221/problem/C 题意: You may have already known that a standard ICP ...

  2. HDU 6046 - hash | 2017 Multi-University Training Contest 2

    思路来自题解和一些博客 最麻烦的是样例没啥用- - /* HDU 6046 - hash [ hash,鸽巢 ] | 2017 Multi-University Training Contest 2 ...

  3. 错误调试以及debug的使用

    /*定义 .search 搜索*/ $.fn.UiSearch=function(){ var ui=$(this); //任何地方都可以使用断点调试:debugger; //调试时,可以在控制台输入 ...

  4. 016_linuxC++之_多重继承

    (一)代码 #include <iostream> #include <string.h> #include <unistd.h> using namespace ...

  5. am335x system upgrade usb wifi rtl8188eus(十九)

    1      Scope of Document This document describes how to port rtl8188eus driver to linux 4.14.y desig ...

  6. 2018CCPC桂林站G Greatest Common Divisor

    题目描述 There is an array of length n, containing only positive numbers.Now you can add all numbers by ...

  7. 虚拟视点demo

    2019年7月16日15:55:11 感觉虚拟视点也是视觉slam里头一个重要的需求和应该实现的功能,但是好像 没看到什么资料. 百度的全景地图,或者有些公司网站上的3d装修效果图,可以用鼠标拖动查看 ...

  8. mysql delete别名

    有一个表的数据比较大,然后需要进行关联删除,删除的时候发现如下SQL报错:ELETE FROM test.test1 a WHERE EXISTS (SELECT 1 FROM test.test2 ...

  9. myeclipse使用SVN分支与合并详解

    此博文主要内容来源地址:https://blog.csdn.net/liuyifeng1920/article/details/53118183,感谢原创博主: 先介绍一下svn的两种开发和发布的规范 ...

  10. Java通过过滤器修改header

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...