ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Nginx详细介绍、安装与部署

2021-07-20 17:34:10  阅读:143  来源: 互联网

标签:nginx 部署 访问 代理 代理服务器 用户 Nginx 服务器 安装


https://www.nginx.cn/doc/ Nginx中文问文档

https://www.nginx.cn/nginx-how-to Nginx 中文手册

https://blog.csdn.net/qq_29677867/article/details/90112120 Nginx 入门参考

Nginx是C语言开发的一款轻量级的Web服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。

  特点:占用内存少,资源消耗低,并发能力强。(官方测试nginx能够支撑5万并发链接)

  为什么使用Nginx?(实现负载均衡)

  互联网飞速发展的今天,大用户量高并发已经成为互联网的主体。怎样能让一个网站能够承载几万个或几十万个用户的持续访问呢?这是一些中小网站急需解决的问题。用单机tomcat搭建的网站,在比较理想的状态下能够承受的并发访问量在150到200左右。对于一个为全国范围提供服务的网站显然是不够用的,为了解决这个问题引入了负载均衡方法。负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。

  负载均衡服务器分为两种:
  一种是通过硬件实现的负载均衡服务器,简称硬负载。例如:f5。
  另一种是通过软件来实现的负载均衡,简称软负载。例如:apache和nginx。
  硬负载和软负载相比,前者作用的网络层次比较多,可以作用到socket接口的数据链路层对发出的请求进行分组转发,但是价格成本比较贵;而软负载作用的层次在http协议层之上可以对http请求进行分组转发,并且因为是开源的所以几乎是零成本,并且占用内存少,资源消耗低,并发能力强。

二、代理概述

 2.1 正向代理(Forward Proxy)

    一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。

    客户端必须要进行一些特别的设置才能使用正向代理,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

  •  关于正向代理的概念如下:正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。简单点说,正向代理就是代理服务器Z替代用户A去访问服务器B。

    那为什么要用代理服务器去代替访问方【用户A】去访问服务器B呢?这就要从代理服务器使用的作用说起。

    1. 访问本无法访问的服务器B

  我们抛除复杂的网络路由情节来看上图,假设图中路由器从左到右命名为R1,R2,假设最初用户A要访问服务器B需要经过R1和R2路由器这样一个路由节点,如果路由器R1或者路由器R2发生故障,那么就无法访问服务器B了。但是如果用户A让代理服务器Z去代替自己访问服务器B,由于代理服务器Z没有在路由器R1或R2节点中,而是通过其它的路由节点访问服务器B,那么用户A就可以得到服务器B的数据。
  现实中的例子就是“FQ”。不过自从VPN技术被广泛应用,“FQ”不但使用了传统的正向代理技术,有的还使用了VPN技术。

    2. 加速访问服务器B

  这种说法目前不像以前那么流行了,主要是带宽流量的飞速发展。早期的正向代理中,很多人使用正向代理就是提速。
  还是如上图 假设用户A到服务器B,经过R1路由器和R2路由器,而R1到R2路由器的链路是一个低带宽链路。而用户A到代理服务器Z,从代理服务器Z到服务器B都是高带宽链路。那么很显然从代理服务器Z的访问方式就可以加速访问服务器B了。

    3. Cache(缓存)作用

  Cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了Cache(缓存)技术。
  还如上图所示,如果在用户A访问服务器B某数据J之前,已经有人通过代理服务器Z访问过服务器B上得数据J,那么代理服务器Z会把数据J保存一段时间,如果有人正好取该数据J,那么代理服务器Z不再访问服务器B,而把缓存的数据J直接发给用户A。这一技术在Cache中术语就叫Cache命中。如果有更多的像用户A的用户来访问代理服务器Z,那么这些用户都可以直接从代理服务器Z中取得数据J,而不用千里迢迢的去服务器B获取数据了。

    4. 客户端访问授权

  这方面的内容现今使用的还是比较多的,例如一些公司采用ISA SERVER做为正向代理服务器来授权用户是否有权限访问互联网。
  上图防火墙作为网关,用来过滤外网对其的访问。
  假设用户A和用户B都设置了代理服务器,用户A允许访问互联网,而用户B不允许访问互联网(这个在代理服务器Z上做限制)。这样用户A因为授权,可以通过代理服务器Z访问到服务器B,而用户B因为没有被代理服务器Z授权,所以访问服务器B时,数据包会被直接丢弃。

    5. 隐藏访问者的行踪

  如图,我们可以看出服务器B并不知道访问自己的实际是用户A,因为代理服务器Z代替用户A去直接与服务器B进行交互。如果代理服务器Z被用户A完全控制(或不完全控制),会惯以“肉鸡”术语称呼。

 2.2 反向代理(reverse proxy)

    反向代理正好与正向代理相反,对于客户端而言,代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置

  •  客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

    使用反向代理服务器的作用:

    1. 保护和隐藏原始资源服务器

  用户A始终认为它访问的是原始服务器B而不是代理服务器Z,但实用际上反向代理服务器接受用户A的应答,从原始资源服务器B中取得用户A的需求资源,然后发送给用户A。
  由于防火墙的作用,只允许代理服务器Z访问原始资源服务器B。尽管在这个虚拟的环境下,防火墙和反向代理的共同作用保护了原始资源服务器B,但用户A并不知情。

    2. 负载均衡

  当反向代理服务器不止一个的时候,我们甚至可以把它们做成集群,当更多的用户访问资源服务器B的时候,让不同的代理服务器Z(x)去应答不同的用户,然后发送不同用户需要的资源。
  当然反向代理服务器像正向代理服务器一样拥有Cache(缓存)的作用,它可以缓存原始资源服务器B的资源,而不是每次都要向原始资源服务器B请求数据,特别是一些静态的数据,比如图片和文件。
  如果这些反向代理服务器能够做到和用户X来自同一个网络,那么用户X访问反向代理服务器X,就会得到很高质量的速度。这正是CDN技术的核心。(了解)

  综上:

    基本上,网上做正反向代理的程序很多,能做正向代理的软件大部分也可以做反向代理。
    开源软件中最流行的就是squid,既可以做正向代理,也有很多人用来做反向代理的前端服务器。
    另外MS ISA也可以用来在WINDOWS平台下做正向代理。反向代理中最主要的实践就是WEB服务,近些年来最火的就是Nginx了。网上有人说NGINX不能做正向代理,其实是不对的。NGINX也可以做正向代理,不过用的人比较少了。

 2.3 透明代理

    如果把正向代理、反向代理和透明代理按照人类血缘关系来划分的话。那么正向代理和透明代理是很明显堂亲关系,而正向代理和反向代理就是表亲关系了 。
    透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。
    注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。透明代理实践的例子就是时下很多公司使用的行为管理软件。

  用户A和用户B并不知道行为管理设备充当透明代理行为,当用户A或用户B向服务器A或服务器B提交请求的时候,透明代理设备根据自身策略拦截并修改用户A或B的报文,并作为实际的请求方,向服务器A或B发送请求,当接收信息回传,透明代理再根据自身的设置把允许的报文发回至用户A或B,如上图,如果透明代理设置不允许访问服务器B,那么用户A或者用户B就不会得到服务器B的数据。

一、下载Nginx安装包

  官方网站:http://nginx.org/

  有两个版本windows版本和linux版本。生产环境都是使用linux版本。

二、Nginx的安装与部署

 2.1 在Windows上安装部署

   2.1.1 解压安装

    将安装包解压到某个盘符下,比如:D:\nginx

    目录结构:

   2.1.2 启动运行

    双击 nginx.exe 即可运行,登陆 http://localhost:80(默认端口80,输入网址时80可省略)访问,显示如下界面表示安装成功。

  小贴士:此页面其实就是安装包下html文件夹中的index.html。等同于根路径下的初始化界面。后续我们可以通过nginx.conf文件修改它的默认首页等配置信息。

   2.1.3 关闭停止

    • 手动关闭:结束 nginx 的进程;
    • 命令行关闭:nginx -s stop

   2.1.4 重新加载配置文件

    • 命令行加载:nginx -s reload  // 可以在不关闭 nginx 的情况下进行更新

 2.2 在Linux上安装部署

   2.2.1 安装

    1)安装环境

    • 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-devel

    • openssl

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

    2)编译与安装

      ① 把nginx的源码包上传至linux服务器
      ② 解压源码包。 如:tar -zxf nginx-1.8.0.tar.gz
      ③ 进入nginx-1.8.0文件夹。使用configure命令创建makefile
      ④ 参数设置如下:(可根据实际情况进行修改,也可不修改)
        ./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目录
      ⑤ make
      ⑥ make install

   2.2.2 启动与关闭

  在nginx目录下有一个sbin目录,sbin目录下有一个nginx可执行程序。

  命令行启动:./nginx
  命令行关闭:./nginx -s stop
  命令行退出:./nginx -s quit  // 等程序执行完毕后关闭,建议使用此命令。

   2.2.3 重新加载配置文件

  命令行加载:./nginx -s reload  // 可以在不关闭 nginx 的情况下进行更新

三、Nginx搭建Tomcat集群

 3.1 tomcat集群配置

  • 首先安装部署多个tomcat服务器,在没有条件的情况下,可以在本地安装多个tomcat后,分别对tomcat重命名并修改配置文件server.xml中的端口号(为了避免端口冲突);

  • 再将项目分别发布到相应的tomcat中。

设置Linux的防火墙:(在linux上搭建集群)

  * /sbin/iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT
  * /etc/rc.d/init.d/iptables save (永久保存上面修改后的设置)

 3.2 Nginx负载均衡配置

  • 修改安装目录下conf文件夹下的nginx.conf配置文件 (nginx/conf/nginx.conf)

 

  • 重新加载配置文件

  // 可以在不关闭 nginx 的情况下进行更新
  windows命令行加载:nginx -s reload
  liunx命令行加载:./nginx -s reload

 3.3 Tomcat集群的session共享

   在上述的配置中,我们可以通过http://localhost:801访问到不同的tomcat来分担服务端的压力。

   需要注意的是,请求负载过程中的会话信息不能丢失,那么就需要在多个tomcat中进行session的共享。

  • 配置tomcat的session共享问题可以有三种解决方案
  • ① 以负载均衡器本身提供的session共享策略。在Nginx的nginx.conf配置文件中配置ip_hash,让一个用户的请求只在一个tomcat服务器上进行操作。

  • ② 利用web容器本身的session共享策略来配置共享。针对于weblogic这种方式还是靠普的,但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播机制来实现的session复制,互相复制会浪费很多带宽导致整个网络反映缓慢。官网也建议这种方式最好不要超过4台tomcat。(不推荐)

  * 使用tomcat的广播机制完成session的共享。

步骤:

  • 修改tomcat配置文件server.xml,只需要将引擎节点中注释掉的下面这句取消注释即可:
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    使用这样方法配置的集群会将Session同步到所在网段上的所有配置了集群属性的实例上(此处讲所在网段可能不准确,是使用Membership 的address和port来区分的。tomcat集群的实例如果在Membership配置中有相同的address和port值的tomcat被分到同一个集群里边。他们的session是相互共享的,同一个session的集群被称为一个cluster。可以配置多个cluster,但是cluster和cluster之间的session是不共享的)。也就是说如果该广播地址下的所有Tomcat实例都会共享Session,那么假如有几个互不相关的集群,就可能造成Session复制浪费,所以为了避免浪费就需要对节点多做点设置了,如下:
    Xml代码:
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">    
            <Channel className="org.apache.catalina.tribes.group.GroupChannel">    
                <Membership className="org.apache.catalina.tribes.membership.McastService"    
                    address="228.0.0.4"    
                    port="45564"    
                    frequency="500"    
                    dropTime="3000"/>    
            </Channel>    
        </Cluster>  
    加了一个Channel,里面包了个Membership,咱们要关注的就是membership的port属性和address属性,不同的集群设置不同的port值或address值,从目前的使用来看,基本上是隔离开了。

  • 修改项目的web.xml文件,只需要在web-app节点中添加这个节点<distributable/>就可以了。

  • 重启服务器
  • ③ 使用redis服务器的方式完成session的共享。(推荐)

标签:nginx,部署,访问,代理,代理服务器,用户,Nginx,服务器,安装
来源: https://blog.csdn.net/gxflh/article/details/118940238

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有