Nginx学习


  

1 Nginx简介

  1、Nginx 是一个高性能的web服务器和反向代理服务器;(服务器)
  2、Nginx 是由俄罗斯人 Igor Sysoev 采用C语言开发编写的,第一个公开版本 0.1.0发布于2004年10月4日;
  3、Nginx 特点是占有内存少,并发处理能力强,以高性能、低系统资源消耗而 闻名,Nginx 官方测试为5万并发请求
  4、与Nginx同类型的web服务器还有Apache、Lighttpd(音同lighty) 等;
  5、Nginx 的并发处理能力在同类型的Web服务器中表现极好(Apache、Lighttpd), 在全世界范围内大量的网站使用了Nginx,国内互联网中也大量使用了Nginx, 比如:淘宝、新浪、搜狐、网易、美团等;
  6、国内淘宝基于Nginx开发了一个Tengine,性能也非常优秀;http://tengine.taobao.org/
  7、Nginx是免费开源的,同时Nginx也有收费的商业版本,商业版本提供了性能 优化、宕机等紧急问题处理等技术支持和服务;商业版本: http://www.nginx.com,开源版:http://nginx.org

2 正向与反向代理

  正向代理:隐藏了真实的请求客户端
  反向代理:隐藏了真实的服务端

3 Nginx环境搭建

3.1下载

免费开源版的官方网站:http://nginx.orgNginx 有 windows 版本和 linux 版本,但推荐在 linux 下使用 Nginx;

3.2 安装前准备

Nginx的安装需要Linux安装相关的几个库,否则配置和编译会出现错误;执行如下命令:

yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y

3.3 正式安装

  1、解压下载下来的nginx文件,执行命令:

tar -zxvf nginx-1.14.2.tar.gz

  2、切换至解压后的nginx主目录,执行命令:

cd nginx-1.14.2

  3、在nginx主目录nginx-1.14.2下执行命令:

./configure --prefix=/usr/local/nginx  (其中--prefix是指定nginx安装路径)

如果需要配置https,或者http反向代理https网址需要http_ssl_module 模块支持

./configure --prefix=/usr/local/nginx --with-http_ssl_module 

  4、执行命令进行编译:make
  5、执行命令进行安装:make install

3.4 启动

  1、启动nginx执行命令:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
(其中-c是指定配置文件)

  重启:

/usr/local/nginx/sbin/nginx  -s reload

  2、检查Nginx是否启动:通过查看进程:

ps -ef | grep nginx

  3、Nginx体系结构:
  nginx 体系结构由 master 进程和其 worker 进程组成;master 进程读取配置文件,并维护 worker 进程,而 worker 进程则对请求进行实际处理;
在这里插入图片描述

3.5 关闭

  1、优雅关闭Nginx:
  优雅关闭会将已经进来的请求处理完后再关闭;
  找出nginx的进程号:ps -ef | grep 执行命令:

kill -QUIT 主pid

其中pid是主进程号的pid(master process),其他为子进程pid(worker process)

  2、快速关闭Nginx:

  找出nginx的进程号:ps -ef | grep nginx

kill -TERM 主pid

  快速关闭会直接关闭,已经进来的请求也不会处理;

3.6 启动前检查

  当修改Nginx配置文件后,可以使用Nginx命令进行配置文件语法检查,用于检查Nginx配置文件是否正确;

/usr/local/nginx/sbin/nginx  -c  /usr/local/nginx/conf/nginx.conf  -t

4 Windows环境搭建

  在Windows环境下搭建:
  1、在官方网站下载最新windows版的nginx
  2、将下载下来的nginx压缩包解压到一个目录下,解压后该软件就可以启动使用了 ;
  3、启动:进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:

start  nginx

  4、关闭:进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:

nginx  -s  stop

5 Nginx配置文件

  学习Nginx首先需要对它的核心配置文件nginx.conf有一定的认识;Nginx的核心配置文件主要由三个部分构成:

  1、基本配置
  2、events配置
  3、http配置:基本配置和多个Server配置
在这里插入图片描述

6 Nginx主要应用

  1、静态网站
  2、负载均衡
  3、静态代理
  4、动静分离
  5、虚拟主机

7 静态网站

  工作中,我们经常采用Nginx部署静态网站,Nginx十分擅长于对静态资源的处理;如果有一个ace的静态网站,用Nginx进行部署
  规则:ip + port 等于 root

1)、地址栏通过http://192.168.92.128:80/就能访问,conf文件需要这样配置

location / {  
        root       /opt/www/ace; #静态文件路径
}  

  1、访问http://192.168.92.128:80/
  2、其实是访问http://192.168.92.128:80/index.html
  3、把http访问还原成磁盘的路径,看文件位置是否正确
  4、/opt/www/ace + /index.html (能找到该文件,配置就没有问题)

2)、地址栏通过http://192.168.92.128:80/ace就能访问conf文件需要这样配置·

location /ace {  
        root       /opt/www; #静态文件路径
}  

  1、访问 http://192.168.92.128:80/ace
  2、其实是访问 http://192.168.92.128:80/ace/index.html
  3、 /opt/www/ + ace /index.html (能找到该文件,配置就没有问题)

8 负载均衡

8.1 负载均衡概述

  负载均衡通常是指将请求"均匀"分发到多个不同服务器节点上执行,如图:
在这里插入图片描述

8.2 负载均衡的实现方式

  1)、硬件负载均衡:
    比如 F5、深信服、Array 等;
    优点是有厂商专业的技术服务团队提供支持,性能稳定;
    缺点是费用昂贵,对于规模较小的网络应用或创业团队成本太高;

  2)、软件负载均衡:
    比如 Nginx、LVS、HAProxy 等;
    优点是免费开源,成本低廉;

8.3 Nginx实现负载均衡

  Nginx如何实现负载均衡:(通过在Nginx的nginx.conf文件进行配置即可实现)
在这里插入图片描述
配置如下:(配置3步即可):

  1、在http模块配置upstream:

upstream www.myweb.com { 

           server  127.0.0.1:9100 weight=3; 
          server  127.0.0.1:9200 weight=1;  
} 

  其中weight=1表示权重,用于后端服务器性能不均的情况,访问比例约等于权重之比,权重越大访问机会越多;

  upstream用于配置nginx负载均衡,并且它还能对后端服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器;

  2、在server模块里配置:

location /myweb {

       proxy_pass http://www.myweb.com;

}

  其中 www.myweb.com 字符串要和 upstream 后面的字符串相等;
  3 、将网站分别在两个Tomcat上进行发布(注意配置3个端口号不要重复),启动Nginx服务器

8.3 Nginx的常用策略

  1、轮询(默认)

  每个请求轮流分配到不同的后端服务器,如果后端服务器down掉,将自动剔除;

upstream backserver { 

    server 127.0.0.1:8080; 
    server 127.0.0.1:9090; 
} 

  2、权重

  每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况;

upstream backserver { 

    server 192.168.0.14 weight=5; 

    server 192.168.0.15 weight=2; 

} 

  3、ip_hash
  ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题;
  hash(“124.207.55.82”) % 2 = 0, 1

upstream backserver { 

    ip_hash; 
    server 127.0.0.1:8080; 
    server 127.0.0.1:9090; 

}

  4、最少连接

  web请求会被转发到连接数最少的服务器上;

upstream backserver { 

    least_conn;
    server 127.0.0.1:8080; 
    server 127.0.0.1:9090; 

} 

8.4 负载均衡其他几个配置

  1、其它所有的非backup机器down的时候,才请求backup机器

upstream backserver { 

    server 127.0.0.1:9100;

    server 127.0.0.1:9200  backup; 

} 

  2、down表示当前的server是down状态,不参与负载均衡

upstream backserver { 

    server 127.0.0.1:9100;

    server 127.0.0.1:9200  down; 
} 

9 静态代理

9.1 静态代理概述

  把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高;

  所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理;
在这里插入图片描述
  Nginx静态代理如何实现?(通过在Nginx的nginx.conf文件进行配置即可实现)

9.2 Nginx静态代理

  首先将web项目中的静态资源(html文件、img文件、css文件)等静态文件或者文件夹,从项目中移动到linux 系统下的某个文件夹下,让Nginx对静态资源进行管理。配置有两种方式

9.3 第一种方式

#当访问静态资源,则从linux服务器/opt/static目录下获取

location~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {

        root /opt/static;

}

  其中:
  1、~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配;
  2、第一个点 . 表示任意字符;
  3、* 表示一个或多个字符;
  4、. 是转移字符,是后面这个点的转移字符;
  5、| 表示或者
  6、$ 表示结尾

  整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理;
  放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限; 403错误 chmod 755

9.4 第二种方式

  通过在nginx.conf配置文件中配置静态资源所在目录实现,比如:

location ~ .*/(css|js|img|image) {

      root   /opt/static;

}

  1、xxx/css
  2、xxx/js
  3、xxx/img
  4、xxx/image
  我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源;

10 动静分离

  Nginx的 负载均衡 和 静态代理 结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景;
  动态资源,如jsp由tomcat或其他web服务器完成;
  静态资源,如图片、css、js等由nginx服务器完成;
  它们各司其职,专注于做自己擅长的事情;
  动静分离充分利用了它们各自的优势,从而达到更高效合理的架构;
在这里插入图片描述
  Nginx在一台Linux上安装一份,可以启动多个Nginx,每个Nginx的配置文件不一样即可.

  负载均衡Nginx配置:

upstream www.myweb.com { 

    server  127.0.0.1:9100 weight=5; 
    server  127.0.0.1:9200 weight=2;  

}
upstream static.myweb.com { 

    server  127.0.0.1:81 weight=1; 
    server  127.0.0.1:82 weight=1;  

}
location /myweb {

    proxy_pass http://www.myweb.com;

}
location ~ .*/(css|js|img|image) {

    proxy_pass  http://static.myweb.com;

}

两台静态代理服务器Nginx配置:

location ~ .*/(css|js|img|image) {

    root /opt/static;

}

  注意静态代理的两个Nginx,配置文件中的端口一个为81,另一个为82

11 虚拟主机

11.1 虚拟主机简介

  1、虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们 的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站;

  2、Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以 运行多个网站;

  3、Nginx下,一个server标签就是一个虚拟主机;

  4、nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚 拟主机,配置多个server节点即可;

11.2 两种配置方式

  1、基于端口的虚拟主机配置,使用端口来区分;

server {

    listen 8080;

    server_name www.myweb.com;

    location /aweb {

           proxy_pass http://www.aweb.com;

    }

}

-----------------------------------------------------

server {

    listen 9090;

    server_name www.bweb.com;

    location /bweb {

           proxy_pass  http://www.bweb.com;

    }

}

  2、基于域名的虚拟主机

  基于域名的虚拟主机是最常见的一种虚拟主机,基于域名来区分。

server {

        listen       80;

        server_name  www.aweb.com;

        location /myweb {

           proxy_pass http://www.aweb.com;

        }
}

---------------------------------------------------

server {

        listen       80;

        server_name  www.bweb.com;

        location /myweb {

           proxy_pass http://www.bweb.com;

        }
}

11.3 虚拟主机配置实例

  1、基于域名的虚拟主机,城市站点网站(举例说明,我们配置三个城市站点)

在这里插入图片描述
  配置3个Tomcat,每个tomcat一个站点,项目部署在tomcat的ROOT目录下;并且手动的解压缩war包,unzip命令,然后删除war包,这样做的目的是可以通过域名直接访问

  2、配置三个虚拟主机

  第一种:在nginx.conf文件添加三个server节点,用于配置三个虚拟主机

server {

        listen       80;

        server_name  beijing.myweb.com;

        location / {

            proxy_pass
http://beijing.myweb.com;

        }

}

------------------------------------------------------------

server {

        listen       80;

        server_name  nanjing.myweb.com;

        location / {

            proxy_pass http://nanjing.myweb.com;

        }

}

-------------------------------------------------------------

server {

        listen       80;

        server_name  tianjin.myweb.com;

        location / {

            proxy_pass
http://tianjin.myweb.com;

        }

}

  第二种:通过include的方式引入虚拟主机配置

include /usr/local/nginx/conf/vhost/vhost.conf;

  将虚拟目录的配置文件加入到”http {}”部分的末尾,与其他server并列;文件是隔开的,配置更清晰,主文件没有那么多server配置;

  3、配置每个虚拟主机请求转发所对应的后端服务器

upstream beijing.myweb.com {

        server  127.0.0.1:9100;

}

upstream nanjing.myweb.com {

        server  127.0.0.1:9200;

}

upstream tianjin.myweb.com {

        server  127.0.0.1:9300;

 }

     如果某一个网站是集群部署,只需追加多个Server即可

  4、修改hosts文件,让Linux的ip指向到三个站点的域名

C:\Windows\System32\drivers\etc\hosts

192.168.92.128 beijing.myweb.com

192.168.92.128 nanjing.myweb.com

192.168.92.128 tianjin.myweb.com

  6. 通过三个域名可以访问三个网站

http://beijing.myweb.com

http://nanjing.myweb.com

http://tianjing.myweb.com

12 Nginx在项目中的实际应用

  假设有一个项目application主要是将 app- web 和 app -dataService 两个web项目进行发布,使用负载均衡和静态代理。

在这里插入图片描述
  将web 项目分别发布到两台Tomcat上,同时删除掉静态资源。静态资源也由两台Niginx服务器实现静态资源的负载均衡

upstream www.app.com { 

    server  127.0.0.1:9100 weight=5; 
    server  127.0.0.1:9200 weight=2;  
}

upstream static.app.com { 

    server  127.0.0.1:81 weight=1; 
    server  127.0.0.1:82 weight=1;  
}
--------------------------------------------------

location /app{

    proxy_pass http://www.app.com;

}

location ~ .*/(css|js|img|image) {

    proxy_pass http://static.app.com;

}

将代理静态资源的两台服务器,配置如下

location ~ .*/(css|js|img|image) {

    root /opt/static;

}

将静态资源放到 static/app/**中

技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值