Loading

一篇文章搞懂nginx的使用

一篇文章搞懂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 端口

正向代理

  • 在客户端(浏览器)配置代理服务器,通过代理服务器进行访问,服务端访问的是真实的服务器截屏2020-12-31 下午3.57.00

反向代理

  • 我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的 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 机器。所以这台机器压力会最轻。
posted @ 2021-01-05 23:32  笑忘舒  阅读(380)  评论(0编辑  收藏  举报