美文网首页
[JavaEE] 狒狒都能懂的Nginx教程 for Mac

[JavaEE] 狒狒都能懂的Nginx教程 for Mac

作者: objcat | 来源:发表于2018-11-21 17:40 被阅读59次

    前文链接

    [JavaEE] 搭建SpringCloud环境 进入微服务时代
    https://www.jianshu.com/p/a0365a635975
    温馨提示:本文是基于前文的扩展 没有基础的新手可以先去学习上文

    一.简介

    最近玩了玩Nginx感觉体验还不错 只是网上的文章有些让我迷惑 所以我来写一篇比较简洁的文章记录一下

    Nginx (engine x) 是一个高性能的HTTP反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

    通俗的讲 就是一个服务器 我们在开发中主要用于做反向代理负载均衡功能 下面就跟着我们的镜头一起来看吧!

    二.安装

    Nginx官网: http://nginx.org/en/

    本文基于的环境是macOS 10.13.6

    所以这里只讲述Mac上的安装方法Windows请自行安装

    1.安装Homebrew

    Homebrew是一套非常好用的包管理工具 我们可以直接使用它来安装Nginx

    首先在终端执行

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

    一行代码完事 安装好之后 输入brew查看是否安装正确

    2.安装Nginx

    很简单 在终端中输入命令

    brew install Nginx
    

    但是在安装过程中有可能遇到一个错误


    问题出在了文件夹访问权限上 我们使用chmod命令来给文件夹授权

    sudo chmod 777 /usr/local/sbin
    

    授权之后再次执行安装即可

    brew install Nginx
    

    我们看到下图的提示就说明安装成功了


    二.开始使用

    1.让我们跑起来

    经过上述步骤 我们的Nginx已经安装完毕了 之后我们来启动一下吧 直接在终端中输入:

    nginx
    

    如果没有任何错误提示 证明已经启动成功了...
    我们打开localhost:8080来访问一下

    看到如上图的样子说明Nginx已经启动成功了 好了下课 - - (开玩笑的)

    接下来你有可能会有疑问 接下来我们用它做啥子呢?

    我在文章开头已经说过了Nginx主要实现两个功能反向代理负载均衡

    2.反向代理

    什么是反向代理呢? 其实很好理解 就是通过Nginx转发请求到你其他的接口 以达到隐藏服务器真实地址的功能

    下面我们就来配置一下 首先定位到配置文件路径

    /usr/local/etc/nginx/nginx.conf 
    

    command + shift + g 直接追过去

    之后我们会看到一个nginx.conf


    先别急 首先我们把这个文件复制一份 防止改坏了(程序员必备思想 - -)

    之后用文本编辑器打开 可以看到一大坨代码 我把注释的地方都删了

    
    #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;
    
        server {
            listen       8080;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    
        include servers/*;
    }
    
    

    我们可以看见有一个叫server的字段 我们在这里面就可以配置服务器相关的东西了

    localhost 服务器监听端口号

    好的我们接下来就来配置一下反向代理 我们只需要在server里面的location中添加一个proxy_pass [空格] 你的服务器地址即可

    server {
            listen       8080;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                proxy_pass http://localhost:8082;
                root   html;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    

    我这里在本地开了个8082端口的微服务 你们自行开启 如果不会 请学习我的springcloud文章5分钟搭建出微服务
    https://www.jianshu.com/p/a0365a635975

    我们修改完配置之后需要重新启动Nginx
    首先结束进程

    nginx -s stop
    

    然后重新启动

    nginx
    

    好的 我们来试验一下效果吧 这里不要忘了 修改完配置文件必须重启Nginx才能生效

    我们可以看到 我访问的是Nginx8080端口 而我的服务是在8082上面的 这时Nginx会把请求转发到8082让我可以访问到服务 可以看到网页上写着8082这是我在服务内部打印的端口

    我们成功访问了接口 但是并没有暴露出服务器的地址 这就是所谓的反向代理 你请求给Nginx它帮你转发到你的本地服务上去

    3.负载均衡

    负载均衡就是把用户的请求 分摊到功能相同的不同服务器上去 来减轻单个服务器的压力 我想有些人到这里应该不太明白 我举个例子解释一下

    百度这个网站每天有几亿人进行访问 这么庞大的访问量往往用一个服务器是不可能完成快速响应的 所以百度使用了集群策略 买了100台服务器 每个服务器都能提供搜索服务 用户访问百度的时候 会按照一定逻辑 随机访问其中一个 这样就不至于造成单个压力过大而宕机了 反过来说 即使单个服务器宕机后 还有99个服务器可以服务 所以搜索功能是不受影响的

    这篇文章我用本地来模拟一下负载均衡 我从本地开两个服务:8082和:8083做集群

    之后我们来简单配置一下nginx.conf文件

        upstream jiqun {
            server localhost:8082;
            server localhost:8083;
        }
    
        server {
            listen       8080;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                proxy_pass http://jiqun;
                root   html;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    
    

    配置中可以看到 首先声明两个服务 起个别名为jiqun之后我们修改proxy_passhttp://jiqun就可以了 这样我们访问接口的时候 就会随机转发到这两个相同的服务上去 实现负载均衡了

    图1

    我们可以看到 访问同一个网址 会在两个不同端口的微服务之间来回切换 说明我们已经实现了负载均衡

    好的 接下来 我们来引入一个概念权重

    假如我们有两个服务器
    一个处理能力强
    一个处理能力弱

    我们希望让处理能力强的服务器 多接收一些用户请求 所以我们就要给nginx配置权重

    upstream jiqun {
            server localhost:8082 weight=2;
            server localhost:8083 weight=1;
    }
    

    weight就是权重 配置为2的权重要比1高 我们来实际看一下效果 好的重启Nginx 我们来看看效果

    图2

    我看一下图2
    1.访问4次8082
    2.访问2次8083
    3.循环

    而没有配置的权重的图1
    1.访问2次8082
    2.访问2次8083
    3.循环

    所以没有配置过权重 默认就是同样的权重 好了 这就是Nginx最基本的配置实现了

    finally enjoy it.

    by objcat 2018.11.21

    相关文章

      网友评论

          本文标题:[JavaEE] 狒狒都能懂的Nginx教程 for Mac

          本文链接:https://www.haomeiwen.com/subject/eoycqqtx.html