一篇文章搞懂nginx的使用

什么是 nginx

  • Nginx是一个高性能的 HTTP 和反向代理服务器。特点:占有内存小,并发能力强,事实上nginx 的并发能力确实是同类网页服务器中表现较好。
  • Nginx是专门为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明支持高达 50000 个并发连接数。

nginx 安装

1.将 Nginx 安装包上传到 Linux 中
官网:http://nginx.org/en/download.html 这里安装使用的 Nginx 版本为 nginx-1.8.0.tar.gz
2 nginx 安装环境
nginx 是 C 语言开发,建议在 linux 上运行

  • gcc
    安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc环境,需要安装 gcc:yum install gcc-c++

  • PCRE
    PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。

yum install -y pcre pcre-devel

注:pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。

  • zlib

    zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip, 所以需要在 linux 上安装 zlib 库。

    yum install -y zlib zlib-developenssl

  • OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在linux 安装 openssl 库。

    yum install -y openssl openssl-devel

3.编译安装
解压:tar -zxvf nginx-1.8.0.tar.gz
进入到 nginx 的根目录 cd nginx-1.8.0

  • 3.1配置安装参数 ./configure
    参数设置如下:
    ./configure
    --prefix=/usr/local/nginx \

    --pid-path=/var/run/nginx/nginx.pid \

    --lock-path=/var/lock/nginx.lock \

    --error-log-path=/var/log/nginx/error.log \

    --http-log-path=/var/log/nginx/access.log \

    --with-http_gzip_static_module \

    --http-client-body-temp-path=/var/temp/nginx/client \

    --http-proxy-temp-path=/var/temp/nginx/proxy \

    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

    --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

    --http-scgi-temp-path=/var/temp/nginx/scgi
    注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var 下创建 temp 及 nginx 目录

    --prefix=/usr/local/nginx决定将 nginx 安装到什么位置,设置了就会自动创建

  • 3.2编译安装 编译:make

    编译安装 make install,安装完成之后在/usr/local/nginx/sbin 下有 sbin 的启动脚本

4.操作Nginx

  1. 使用 nginx 操作的常用命令:必须要进入 nginx 目录中去才行 /usr/local/nginx/sbin
  2. 查看 nginx 版本号 查看版本号 ./nginx -v
  3. 查看 nginx 启动状态 ps aux|grep nginx
  4. 启动 nginx
    cd /usr/local/nginx/sbin/
    ./nginx
    注意:执行./nginx 启动 nginx,这里可以-c 指定加载的 nginx 配置文件,如下: ./nginx -c /usr/local/nginx/conf/nginx.conf
    如果不指定-c,nginx 在启动时默认加载 conf/nginx.conf 文件,此文件的地址也可以在 编译安装 nginx 时指定./configure 的参数(--conf-path= 指向配置文件(nginx.conf))
  5. 停止 nginx
    方式 1,快速停止:
    cd /usr/local/nginx/sbin
    ./nginx -s stop
    此方式相当于先查出 nginx 进程 id 再使用 kill 命令强制杀掉进程。
    方式 2,完整停止(建议使用):
    cd /usr/local/nginx/sbin
    ./nginx -s quit
    此方式停止步骤是待 nginx 进程处理任务完毕进行停止。
  6. 重启 nginx
    方式 1,先停止再启动(建议使用):
    对 nginx 进行重启相当于先停止 nginx 再启动 nginx,即先执行停止命令再执行启动命令。 如下:
    ./nginx -s quit
    ./nginx
    方式 2,重新加载配置文件:
    当 nginx 的配置文件 nginx.conf 修改后,要想让配置生效需要重启 nginx,使用-s reload
    不用先停止 nginx 再启动 nginx 即可将配置信息在 nginx 中生效,如下:
    ./nginx -s reload
  7. 测试
    nginx 安装成功,启动 nginx,即可访问虚拟机上的 nginx Nginx 默认的是监听80 端口

正向代理

  • 在客户端(浏览器)配置代理服务器,通过代理服务器进行访问,服务端访问的是真实的服务器

反向代理

  • 我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的 ip 地址。服务端访问的是代理的服务器

负载均衡

  • 并发请求较大,使用单一服务器容易造成崩溃。单个服务器解决不了,我们增加服务器的数量,然后将请求额分发到各个服务器上,将原先请求集中到单个服务器上的情况改为分发到多个服务器上,将负载分发到不同的服务器,这就是所说的负载均衡。

动静分离

  • 为了加快网站的解析速度,可以吧动态页面和静态页面由不同服务器来解析,加快解析速度,降低单个服务器的压力。这里会使用 Nginx 处理静态页面物理分离,Tomcat 处理动态页面。提供访问效率

nginx 使用

搭建虚拟主机

虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主 机,每个虚拟主机可以独立对外提供 www 服务,这样就可以实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。
虚拟主机技术是互联网服务器采用的节省服务器硬件成本的技术,虚拟主机技术主要应 用于 HTTP(Hypertext Transfer Protocol,超文本传输协议)服务,将一台服务器的某项或 者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬 件资源。主要就是节省硬件成本

Nginx 的虚拟主机配置方式

Nginx 支持三种类型的虚拟主机配置

  1. 基于 IP 的虚拟主机

    这里使用一台 liunx 搭建 2 个 ip,不同 ip 访问不同的 html 页面(这里就是 nginx 的访问首页)

    • 第一步,一台 linux 配置多 ip 方式,将动态 ip 改成静态 ip 进入 cd /etc/sysconfig/network-scripts ,进入配置 ,需将配置文件中BOOTPRPTP=static,其次添加另一个 ip 配置内容:保存重启服务即可配置成功。

    IPADDR=192.168.10.144

    NETMASK=255.255.255.0

    GATEWAY=192.168.10.2

    DNS1=114.114.114.114

    • 第二步修改 nginx 的配置文件,我这里是在/usr/local/nginx/conf 目录下

      Nginx 的配置文件 nginx.conf
      如上述配置文件所示,主要由 6 个部分组成:

      main:用于进行 nginx 全局信息的配置

      events:用于 nginx 工作模式的配置

      http:用于进行 http 协议信息的一些配置

      server:用于进行服务器访问信息的配置 ,一个 server 就是一个虚拟机

      location:用于进行访问路由的配置

      upstream:用于进行负载均衡的配置

      主要是对 http 下 server 和 location 进行修改配置即可

      #一个 Server 就是一个虚拟主机
      server {
      listen 80;
      #为虚拟机指定 IP 或者是域名
      server_name 192.168.70.144;
      #主要配置路由访问信息
      location / {
      #用于指定访问根目录时,访问虚拟主机的 web 目录 就是这个主页的目录
      root html144;
      #在不指定访问具体资源时,默认的展示资源的列表
      index index.html index.htm;
      }
      error_page 500 502 503 504 /50x.html;
      location = /50x.html {
      root html; }
      }
      
  2. 基于端口的虚拟主机

    • 基于端口和 ip 配置都差不多这里主要修改 listen 即可

      #一个 Server 就是一个虚拟主机 基于端口
      server {
      listen 8080;
      #为虚拟机指定 IP 或者是域名
      server_name 192.168.70.188;
      #主要配置路由访问信息
      location / {
      #用于指定访问根目录时,访问虚拟主机的 web 目录
      root html8080;
      #在不指定访问具体资源时,默认的展示资源的列表
      index index.html index.htm;
      }
      error_page 500 502 503 504 /50x.html; location = /50x.html {
      root html; }
      }
      
  3. 基于域名的虚拟主机(以 mac 配置)

    • 修改hosts 下面的映射关系 命令:sudo vi /etc/hosts,进入之后进行映射

      192.168.70.188 www.123.com

    • 修改 Nginx 的配置文件完成基于域名的虚拟主机配置

      server {
      listen 80;
      #为虚拟机指定 IP 或者是域名,这里使用域名
      server_name  www.123.com;
      #主要配置路由访问信息
      location / {
      #用于指定访问根目录时,访问虚拟主机的 web 目录
      root html-123;
      #在不指定访问具体资源时,默认的展示资源的列表
      index index.html index.htm; }
      error_page 500 502 503 504 /50x.html; location = /50x.html {
      root html; }
      }
      

    这三种配置方式其实都比较类似主要是修改 配置文件中的 listen,server_name,以及 location 既可以完成

反向代理

这里需要先对 虚拟机ip(nginx 默认端口就是80可省略) 和域名做一个映射,前面已经使用过不在赘述,其次就是修改 nginx.conf配置文件,完成配置

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
## 增加这个属性完成虚拟机代理,表示代理那个服务器
upstream tomcat_server1{
server 192.168.70.143:8080;
}
server {
listen 80;
#为虚拟机指定 IP 或者是域名
server_name com.123.com;
#主要配置路由访问信息 location / {
#用于指定访问根目录时,访问虚拟主机的 web 目录 这里删除 root,root 是去找虚拟机中的目录
proxy_pass http://tomcat_server1;
#在不指定访问具体资源时,默认的展示资源的列表

通过以上配置,重启 nginx 既可以完成代理,通过访问 www.123.com,就可以访问 tomcat 首页

负载均衡

什么是负载均衡

  • 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展 网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务 服务器等,从而共同完成工作任务。

负载均衡的策略

  • 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

  • 指定权重
    指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。性能高的多处理
    upstream backserver {
    server 192.168.0.14 weight=10;
    server 192.168.0.15 weight=10;
    }

  • IP 绑定 ip_hash
    每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访 问一个后端服务器,可以解决 session 的问题。
    upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
    }

这里通过同一个 liunx 上使用两个 tomcat 模拟

如何在一个虚拟机配置多个 tomcat?

这里和使用一个 tomcat 的时候是一致的,只需要修改配置文件中的标签即可,进入 tomcat 目录修改

如下标签,主要是为了区分端口号:只要不要和第一个 tomcat 相同即可,默认端口是 8080

配置 nginx 的集群 还是在 nginx.conf 中进行配置,直接在之前反向代理的配置中进行增加即可,即可配置成集群

## 增加这个属性完成虚拟机代理
upstream tomcat_server1{
server 192.168.70.143:8080; ## 直接在后面加权重即可
server 192.168.70.143:9090;
}
节点说明:
在 http 节点里添加:
定义负载均衡设备的 Ip 及设备状态
upstream myServer {
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载的 Server 节点下添加 proxy_pass http://myServer;
upstream 每个设备的状态:
down 表示单前的 server 暂时不参与负载
weight 默认为 1.weight 越大,负载的权重就越大
fail_timeout:次失败后,暂停的时间 默认 10s
max_fails :允许请求失败的次数默认为 1.当超过最大次数时,返回
backup: 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。
(0)

相关推荐

  • Centos7上配置nginx的负载均衡

    前言 在配置nginx负载均衡前.我们需要明白几个名词的概念 注: 如果不小心忘了tomcat和nginx的启动,关闭命令,可参考写在文章最后的命令 一 重要的概念理解 1 什么是nginx呢? Ng ...

  • 一篇文章搞懂高级程序员、架构师、技术总监、CTO从薪资到技能的区别

    "我希望用一篇文章完全让大家正确的理解从程序员到架构师.技术经理.技术总监.CTO的完整区别以及进阶要领. 只有客观去认识,才会更加合理的找到自己的擅长点,从而更好的发展自己. 上图是典型的 ...

  • 一篇文章搞懂 Spring Cloud 是什么

    概念定义 提起微服务,不得不提 Spring Cloud 全家桶系列,Spring Cloud 是一个服务治理平台,是若干个框架的集合,提供了全套的分布式系统解决方案.包含了:服务注册与发现.配置中心 ...

  • 干货!一篇文章搞懂英语全部句法知识

    干货!一篇文章搞懂英语全部句法知识

  • 一篇文章搞懂时间管理,高效人生

    赵铁夫 <铁夫破词>节目主讲人 优质教育领域创作者2021/01/27 18:58:21 很久很久以前 我因浪费时间而悔恨 后来,我偶遇时间管理 它让我记录我的一天 看看我到底浪费多少时间 ...

  • 一篇文章搞懂甲维盐和阿维菌素的关系!

    京博农业 种植业全程解决方案提供商 甲维盐可以说是农业生产中使用量最大的一类杀虫剂,很多人经常使用甲维盐,但是说起他的全称,估计又有很多人见过但是却叫不上来,甲维盐全称甲氨基阿维菌素苯甲酸盐,它的名字 ...

  • 一篇文章搞懂养龟器材

    刚开始只要是养个啥,都能分为两种门派,一种是追求不同品种的"品种流",一种是追求于饲养器材的"器材流".你细琢磨,花鸟鱼虫都是如此,无非是盆里的和盆外的,笼里的 ...

  • 万字干货!一篇文章搞懂交互设计工作流程

    来源:语雀   作者:张宇铭 蔡丹雷 交互设计工作流程 交互设计师的工作,不仅仅是输出设计方案,还需要参与前期的需求讨论.后期开发.测试验收等等产品设计与实现的多个环节.拿到一个新的项目需求后,从设计 ...

  • 接地和接零是一个概念吗?一篇文章搞懂!

    接地和接零的基本目的有两条,一是按电路的工作要求需要接地:二是为了保障人身和设备安全的需要接地或接零.按其作用可分为四种. A.工作接地:b.保护接地:c.保护接零:d.重复接地. 1.工作接地 在采 ...

  • 一篇文章搞懂中医五运六气

    引子 中医五运六气内容,占据了<素问>大篇幅内容,然而对待运气内容,历代医家观点不同,有人认为是鸡肋,可有可无,有人认为这是中医精髓所在,不可丢弃! 直到如今,依然是这两种声音,那么运气内 ...