Nginx的安装以及反向代理和负载均衡的配置

环境说明

由于我使用的是windows系统,所以我用虚拟机虚拟出来了3台linux系统

  • 虚拟机一:192.168.1.20 (Nginx反向代理和负载均衡服务器,系统kali linux)
  • 虚拟机二:192.168.1.19 (node服务器一,系统ubuntu 17.10)
  • 虚拟机三:192.168.1.22(node服务器二,系统ubuntu 17.10)

环境需要的程序

  • git
  • Node
  • Nginx
  • pm2

首先环境的搭建,由于这三台电脑都是我刚刚虚拟出来的,所以什么环境都没有!

虚拟机一的环境搭建

由于我们的虚拟机一主要是用来做Nginx的反向代理和负载均衡的,那么我们只需要安装Nginx就可以

$ sudo apt-get install nginx -y

ok我们访问下Nginx反向代理服务器是否正常启动

虚拟机二和虚拟机三的环境搭建

我比较喜欢使用nvm去安装node,因为nvm能让我自由的去切换node的版本(两台node服务器环境必须一致哦!)

//安装git工具
$ sudo apt-get install git

//从github网站把nvm的源码下载下来放到当前登录用户的.nvm目录下(以后方便我们找)
$ git clone https://github.com/creationix/nvm.git ~/.nvm

//让nvm命令在每次打开shell窗口的时候生效
$ echo "source ~/.nvm/nvm.sh" >> ~/.bashrc

//让nvm的命令立即生效(关闭shell窗口重新打开也可以生效)
$ source ~/.nvm/nvm.sh

//查看nvm是否安装成功和查看当前的node版本信息
$ nvm ls

我们安装下node,此处直接安装stable最新的稳定版本

//这个时间会比较长,稍微有点耐心
$ nvm install stable

安装pm2

$ npm install pm2 -g

编写我们的项目代码

初始化项目创建package.json

$ mkdir nodeapp && cd $_
$ npm init
$ npm install koa --save

创建我们的node主程序入口文件app.js(由于我们只关注与上线发布和负载均衡所以node项目只是一个Hello Koa)

const Koa = require(‘koa‘);
const app = new Koa();

app.use(ctx => {
  ctx.body = ‘Hello Koa‘;
});

app.listen(3000);

编写pm2的配置文件pm2.json

pm2 是一个带有负载均衡功能的Node应用的进程管理器.

当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载。pm2官网

pm2重用的命令

  • pm2 start app.js : 启动服务,入口文件是app.js。
  • pm2 start app.js -i [n] --name [name] : 启动n个进程,名字命名为name。
  • npm stop [name or id] : 停止服务。
  • npm stop all : 停止所有服务。
  • npm delete [name or id] : 删除服务。
  • npm delete all : 删除所有服务。
  • npm restart [name or id] : 重启服务。
  • npm reload [name or id] : 和rastart功能相同,但是可以实现0s的无缝衔接;如果有nginx的使用经验,可以对比nginx reload指令。
  • pm2 monit : 对服务进行监控。
  • pm2 start **.json : 启动制定配置文件的服务

ok知道pm2怎么用了,我们采用配置文件的方式启动,接下来编写我们的pm2.json配置文件

{
    "name"      : "nodeApp",
    //max_memory_restart: "300M",//设置node单个进程可占用最大的内存,如果内存使用率超过300M,pm2自动重启该进程
    "script"    : "app.js",//node主入口文件
    "out_file" : "logs/out.log",
    "error_file" : "logs/error.log",
    "instances"  : "max",//让node程序占满你的cpu,发挥cpu最大的功效
    "exec_mode"  : "cluster",//以主进程的方式启动
    "watch":true
}

那pm2的配置文件和node程序写好了我们在本地测试下pm2和node程序能不能正常的启动(有点小尴尬,自己本机I7的6700K的CPU居然被这个小程序给占满了~~~)

上线部署到我们的两台node服务器中

其实说到上线部署呢,我们应该有自己的git服务器,所有的代码都应该从git服务器上去拉取,部署呢?应该有一个统一部署的方式通常使用的是jenkins,编写好我们统一部署的shell脚本(在这里体现出来为什么所有的服务器环境必须一致了,方便管理啊),用jenkins一键部署,但是.....本次只是做个小实验,没必要这么大动干戈,所以呢,我们还是手动的上传下代码手动起下服务吧!(下次介绍如何搭建自己的git服务器和jenkins的使用)

我们把项目中的node_moudles文件夹删除然后给项目打个包准备上传服务器,项目结构应该是这样的

我们使用scp命令用于将一个文件从本地上传至服务器,或者从服务器上把一个文件下载至本地

郑重说明:由于我本地用的windows系统,为了演示我把项目文件拽进了另一个linux虚拟机中进行的上传

//scp 本地文件 远程服务器用户名@远程服务器地址:/home/shuoer

//把项目文件上传至虚拟机一
scp nodeapp.zip [email protected]/home/shuoer

//把项目文件上传至虚拟机二
scp nodeapp.zip [email protected]/home/shuoer

额.....报错了!

额...好像ssh服务没起来,好像也没有安装

//安装ssh
$ sudo apt-get install ssh -y

//不管ssh启动没有直接重启ssh
$ sudo service ssh restart

ok,好不容易上传成功了,我们分别进入这两台服务器进行项目解压和安装依赖最后启动服务

为了明显我们在两台服务器上分别让页面输出自己的ip地址

重头戏来了,Nginx的反向代理和负载均衡

进入我们的虚拟机一,配置nginx.conf

温馨提示:

  • nginx的配置文件默认在/etc/nginx/nginx.conf
  • 网站根目录默认在/var/www/html

upstream模块

负载均衡模块用于从”upstream”指令定义的后端主机列表中选取一台主机。nginx先使用负载均衡模块找到一台主机,再使用upstream模块实现与这台主机的交互。

nginx 的两种负载均衡方式

  • 轮训加权(也可以不加权,就是1:1负载)

    我们可以根据两台服务器的性能进行分配权重,比如192.168.1.19服务器比较牛逼,另外一个比较差我们可以这么配置,按照4:1分配,比如5次访问有4次访问的是192.168.1.19服务器

    shell upstream test { server 192.168.1.19:3000 weight=4; server 192.168.1.22:3000 weight=1; }

  • ip_hash(同一ip会被分配给固定的后端服务器,解决session问题)

    shell #”ip_hash”只能在upstream {}中使用。这条指令用于通知nginx使用ip hash负载均衡算法。 #如果没加这条指令,nginx会使用默认的round robin负载均衡模块。 upstream test { ip_hash; server 192.168.1.19:3000; server 192.168.1.22:3000; }

打开nginx.conf我的可能和你们的都不一样(我把所有的注释都删除了,是不是整洁了很多?)

填入如下代码,这里我没有采用负载均衡的任何算法

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    gzip on;
    #include /etc/nginx/conf.d/*.conf;
    #include /etc/nginx/sites-enabled/*;
    #用于设置负载的服务器列表
    upstream test {
        #虚拟机二
        server 192.168.1.19:3000;
        #虚拟机三
        server 192.168.1.22:3000;
    }
    server {
        #监听80端口
        listen 80;
        location / {
            #转发的地址,此处为upstream模块
            proxy_pass http://test;
        }
    }
}

ok,将配置文件保存好之后重启我们的nginx

$ sudo service nginx restart

打开浏览器检验下我们的成果

原文地址:https://www.cnblogs.com/shuoer/p/9471672.html

时间: 2024-11-10 08:13:20

Nginx的安装以及反向代理和负载均衡的配置的相关文章

Debian/Ubuntu下Nginx的安装、反向代理和负载均衡的基本配置

源码安装 去Nginx官网下载最新稳定版,这里用的是nginx-1.6.3版. 下载完成后解压缩,进入该目录执行: ./configure 如果你的机器上没有安装PCER库.zlib库等,这一步会出错. sudo apt-get install libpcre3-dev zlibc zlib-bin 然后执行: sudo make sudo make install 完成后,nginx会默认安装在/usr/local/nginx目录下. 反向代理的基本配置 nginx默认使用的配置文件在/use

nginx和tomcat实现反向代理、负载均衡和session共享

这类的文章非常多,nginx和tomcat实现反向代理.负载均衡实现非常easy,能够參照http://blog.csdn.net/liuzhigang1237/article/details/8880752 但tomcat借助memcache实现session共享非常麻烦(和jar的版本号有关),这里做个记录. 我的tomcat的版本号是7.0.53,须要加入的jar是: couchbase-client-1.2.0 javolution-5.4.3.1 Memcached-Java-Clie

Linux 下面安装 nginx 以及进行TCP反向代理、负载均衡的过程

1. 下载安装nginx 注意 因为stream 并不是 nginx自带的module  所以需要 在安装是 通过 --with 的方式增加上. 下载必要的程序包 # openssl wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz #zilib wget http://www.zlib.net/zlib-1.2.11.tar.gz #pcre wget https://netix.dl.sourceforge.net/proje

nginx 一二事(3) - 反向代理以及负载均衡

先来说说正向代理 就是普通的代理,记得高中年代偷跑去网吧是要办卡的 题外话: 就是这货...相信很多80同龄人都有吧...    回到正题,那正向代理就不让你直接访问网络,而需要登录一下网吧的某个系统,那个就是代理服务器,这样你才能上网 那反向代理其实就是这样的: 当你访问淘宝的时候,其实也有很多人在访问,那你不知道访问的是后台的那个IP,其实淘宝通过反向代理配置好了,不同的人访问就是不同的IP,只是域名不变而已 当然,这样也能实现负载均衡 配置如下,hosts配置自己的一个域名,本地的随便配

Nginx入门简介和反向代理、负载均衡、动静分离理解

场景 Nginx简介 Nginx ("engine x")是一个高性能的 HTTP 和反向代理服务器 特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx网站用户有:百度.京东.新浪.网易.腾讯.淘宝等. Nginx可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl . php等.但是不支持 java . Java 程序只能通过与 tomcat 配合完成. Nginx 专为性能优化而

Nginx实现反向代理和负载均衡的配置及优化

http://wenku.baidu.com/link?url=SEgK7aCzFwYffg8jwxLVh-k-QKmvAKEEnCtagZe_lJKnG8r1HCuQ_cBZUSpn5PtamXg_-QTrB-mCx3D0li3YpAbrw2mVIwUOibLOX0AukDy

CentOS 6.4部署Nginx反向代理、负载均衡

一:前言 Nginx是一个支持反向代理.负载均衡.页面缓存.URL重写以及读写分离的高性能Web服务器. 二:环境准备 1.操作系统 CentOS 6.4 X86_64 [[email protected] logs]# cat /proc/version Linux version 2.6.32-358.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Fri

Nginx反向代理与负载均衡

一.简介 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的. 二.常见使用场景 1. 反向代理:(如图2-3所示) a. Web浏览器向前端Nginx发送HTTP请求 b.

Nginx安装、性能测试、反向代理、负载均衡实例

一.nginx安装 我使用的环境是64位 Ubuntu 14.04.nginx依赖以下模块: l gzip模块需要 zlib 库 l rewrite模块需要 pcre 库 l ssl 功能需要openssl库 1.1.安装pcre l 获取pcre编译安装包,在http://www.pcre.org/上可以获取当前最新的版本 l 解压缩pcre-xx.tar.gz包. l 进入解压缩目录,执行./configure. l make & make install 1.2.安装openssl l 获