程序员

Nginx的反向代理与负载均衡--配置Nginx

2018-01-31  本文已影响220人  神秘者007

<pre>

前言

参考链接:nginx_百度百科

概述

主要结构

1. 什么是反向代理与负载均衡

  1. 反向代理
image.png

反向代理的用途

image.png
  1. 负载均衡
image.png
image.png

2. Nginx 负载均衡的实现

image.png

3. HTTP UPstream 模块

  1. 什么是 HTTP UPstream 模块
image.png
  1. ip_hash 指令
image.png
  1. server 指令
image.png
  1. UPstream 指令
image.png

4. 其他负载均衡的方法

image.png

上面的主要是理论下面是实战操作

macOS 部署 Nginx

image.png
  1. 第一步的网址是 MAC 系统下的一个神器,它是一个 macOS 缺失的软件包管理器 https://brew.sh/index_zh-cn.html

  2. 接着就是打开命令行终端依次输入命令

//安装 Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

//查看是否有 nginx 的包
brew search nginx

命令行输出如下:打了一个对勾就证明是有的,接下来就可以安装了

image.png
//安装 nginx 
brew install nginx
//装过之后可以查看 nginx 对应的一些版本的信息
brew info nginx
//查看 nginx 版本信息
nginx -v
//启动 nginx ,这个默认的端口号是 8080
nginx
//可以暂停 nginx 
nginx -s stop
//再次启动 nginx 
nginx

  1. 这个是时候在浏览器中输入 localhost:8080 就可以打开 nginx 首页了
image.png
//停掉 jenkins 
sudo launchctl unload/Library/LaunchDaemons/org.jenkins-ci.plist
//停掉之后如果想启动 jenkins 
systemctl start jenkins

  1. 想要进行上面的 反向代理和负载均衡 还需要对 nginx 进行配置
//停止 nginx 服务
nginx -s stop
//重新加载 nginx 配置文件
nginx -s reload

  1. 打开 nginx 具体安装目录 查看配置文件
//先进入 nginx 目录的上一级目录
cd /usr/local/etc/
//查看该目录下的所有文件,可以在下图看到 nginx 目录
ls

image.png
//再进入 nginx 目录
cd nginx
//查看该目录下的所有文件,可以在下图看到 nginx 目录下的所有文件
ls

image.png
//查看配置文件的内容,下图是内容的一部分,这个里面的内容就是 nginx 默认的配置内容
cat nginx.conf

image.png
  1. 接下来就是我们要给运维做什么
//这个就是我们前端需要给运维做的东西,这个是从复杂的 nginx 里去抽出来的
worker_processes 4;//这个是你的一个工作的进程,其实实际上指的就是 CPU 的核数
events{
    worker_connections 1024;//这个就是整个的连接数,就是说你一下子往你的这个上面压多少
}
//上面两个其实你不给运维的话也是可以的,他都不要,你写了也没用,关键的就是下面的 http 
http{
    //这个是负载均衡的所有的 server ,这里的 IP 地址需要写成你需要用到的真实有效的才行
    upstream firsttest{
        server 192.168.230.128;
        server 192.168.230.129;
    }

    server{
        //通过 server 监听的是 8080
        listen 8080;
        //当你访问 / 这个路由地址的时候 通过下面的  proxy_pass 代理去访问 firsttest 然后就可以了
        location / {
            proxy_pass http://firsttest;
        }
    }
}

worker_processes 4;
events{
    worker_connections 1024;
}
http{
    upstream firsttest{
        server 192.168.230.128;
        server 192.168.230.129;
    }

    server{
        listen 8080;
        location / {
            proxy_pass http://firsttest;
        }
    }
  }

image.png
*   修改 nginx.conf 文件,将下面的代码片段里面的设置相应的复制按照规则复制进这个文件中,之后保存即可

```
worker_processes 4;
events{
worker_connections 1024;
}
http{
    upstream firsttest{
    server 192.168.230.128;
    server 192.168.230.129;
  }

server{
    listen 8080;
    location / {
        proxy_pass http://firsttest;
      }
  }
}

```
image.png image.png
//先暂停
nginx -s stop
//进入 html 目录修改 index.html
cd /usr/share/nginx/html
vi html
//修改之后保存并退出
ESC 键
:
wq
//重载
nginx -s reload
//启动
nginx

[图片上传中...(image.png-79fb06-1517377202839-0)]

image.png
*   这里我再次分别进入这两个目录

```
//发现只有这个目录下有个 default 文件
cd /etc/nginx/sites-enabled
ls
//查看该文件
cat default

```

*   发现里面引用的是 root 用户下的 `/var/www/html`  目录中的 html
image.png
*   这时去修改 `/var/www/html` 目录下的 html 文件

```
cd /var/www/html
//查看目录下包含的文件  发现只有    index.nginx-debian.html 文件
ls
//使用下面的命令以图形化的方式打开该目录(适合 Ubuntu 下使用的命令) 再在编辑器中 修改 index.nginx-debian.html 文件 保存并退出  
nautilus ./
//先将 nginx 运行暂停
//再重载

//最后启动
systemctl start nginx
//最后查看是否是 running 状态
systemctl status nginx

```
image.png
*   Ubuntu 下重启期间总是会出现一些莫名奇妙的问题,我的解决方法就是

```
//先找到在运行中的与 nginx 相关的所有进程
ps -eaf |grep nginx
//然后使用 kill -9 命令将他们一个一个的杀掉
kill -9 1250
//再重新启动 nginx
systemctl start nginx

```
image.png
//先暂停 nginx  
systemctl stop nginx
//进入配置文件目录
cd /etc/nginx
//以图形化的界面打开该目录
nautilus ./
//在编辑器中编辑 nginx.conf 配置文件
//在 firsttest 里面增加一个 ip_hash 属性 一定记得要加 分号
upstream firsttest{
    ip_hash;
}
//之后再重载一遍
nginx -s reload
//运行
nginx

image.png image.png image.png

下面主要是一些 在 Ubuntu 和 Centos 下与上面的 MAC 下的具体操作差异,还有就是操作时遇到的一些坑

  1. 装包,Centos 的话需要 先将Centos的yum源更换为国内的阿里云源 参考地址:将Centos的yum源更换为国内的阿里云源 再进行安装
//Centos
yum install nginx

//Ubuntu 
sudo apt-get install nginx

  1. 在修改完 nginx.conf 文件并保存后 重载时会报错

    • 下面是报错的文本

    nginx: [error] invalid PID number "" in "/run/nginx.pid"

    • 需要先执行一行命令,才能再执行重载
    //   /etc/nginx 是 ubuntu  和 centos 下的安装目录
    cd /etc/nginx
    nginx -c /etc/nginx/nginx.conf
    //然后再进行重载
    nginx -s reload
    
    
  2. 启动和暂停命令使用 systemctl

//启动 nginx 
systemctl start nginx
//暂停 nginx 
systemctl stop nginx
//重启 nginx 
systemctl restart nginx

  1. 如果在启动时遇到下面的错误,可移步至 centos7安装nginx

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

  1. Ubuntu 和 Centos nginx 的具体文件位置

    • nginx 配置文件的目录 /etc/nginx/

    • nginx 项目文件的目录 /usr/share/nginx/

  2. 有时在本机打不开的原因:防火墙未关闭、nginx 未启动

  3. 在 Ubuntu 下修改文件时先进入目录下再使用 nautilus ./ 命令以图形化的形式打开目录,再在编辑器中进行编辑并保存比较方便

  4. 这里我使用的是 Centos 和 Ubuntu 两个虚拟机来模拟的服务器

image.png
上一篇 下一篇

猜你喜欢

热点阅读