学习日志day69(2021-11-09)(1、hosts文件修改主机域名 2、安装Nginx 3、nginx的应用场景)

学习内容:学习Nginx(Day69)

1、hosts文件修改主机域名
2、安装Nginx
3、nginx的应用场景


1、hosts文件修改主机域名

(1)现在:http://localhost:8080/AppInfoSystem需要通过http://www.huzige.com:8080/AppInfoSystem访问。
Linux下的hosts文件所在路径: /etc/hosts
Win下的host: C:\Windows\System32\drivers\etc

#My host
127.0.0.1   www.huzige.com
127.0.0.1   xx.huzige.com

如果不想要访问路径中的端口号,可以将项目中的端口号改为80。

2、安装Nginx

(1)Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

Web服务器分2类:
1.web服务器:Apache 服务器、Nginx、IIS 微软件提供的服务器
2.web应用服务器:tomcat、resin、jetty

区分:web服务器不能解析jsp等页面,只能处理js、css、html等静态资源。
并发:web服务器的并发能力远高于web应用服务器。

(2)windows安装:下载nginx-1.xx.x.zip解压得到:–注意路径中不要包含中文。双击nginx.exe启动。
三个命令:(在 CMD 中执行)
启动:start nginx.exe
停止:nginx.exe -s stop
重新加载:nginx.exe -s reload
出现2个进程nginx才算是真正的启动成功,杀死进程命令:taskkill /f /t /im nginx.exe

(3)Linux安装
1.gcc 安装:安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c++
2.PCRE pcre-devel 安装:PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:yum install -y pcre pcre-devel
3.zlib 安装:zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。yum install -y zlib zlib-devel
4.OpenSSL 安装:OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。yum install -y openssl openssl-devel
5.下载Nginx安装包
官网下载,直接下载.tar.gz安装包,地址:https://nginx.org/en/download.html
或者使用wget命令下载(推荐)。确保系统已经安装了wget,如果没有安装,执行 yum install wget 安装。wget -c https://nginx.org/download/nginx-1.18.0.tar.gz
下载好后上传到服务器的/usr/local目录下,解压tar -zxvf nginx-1.18.0.tar.gz
进入目录cd nginx-1.18.0,使用默认配置./configure,编译安装make & make install
进入目录cd /usr/local/nginx/sbin/
启动./nginx
停止./nginx -s stop
退出./nginx -s quit
重新加载./nginx -s reload

(4)Nginx的配置文件
Nginx的核心配置都在/usr/local/nginx/nginx.conf中

#user root root; #配置用户或者组,默认为nobody nobody。
worker_processes  2; #允许生成的进程数,默认为1
#error_log 
logs/error.log;
#error_log 
logs/error.log  notice;
#error_log 
logs/error.log  info;
#pid       logs/nginx.pid; #指定nginx进程运行文件存放地址
events {
    worker_connections  1024;
}
http {
   include       mime.types; #文件扩展名与文件类型映射表
   default_type application/octet-stream; #默认文件类型,默认为text/plain
   #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; #combined为日志格式的默认值 
   sendfile        on; #允许sendfile方式传输文件,可以在http块,server块,location块
   #tcp_nopush     on; 
   #keepalive_timeout  0;
   keepalive_timeout  65; #连接超时时间,默认为75s,可以在http,server,location块    
   #gzip  on; 
   server {
       listen       80; #监听端口       
       server_name  localhost; #监听地址
        #charset koi8-r; 
       #access_log logs/host.access.log  main;
        location / { #/代表所有请求
           root   html; #根目录
           index  index.html index.htm; #设置默认页
           #deny 127.0.0.1;  #拒绝的ip       
         } 
       #error_page  404              /404.html; 
       # redirect server error pages to the static page /50x.html
       #
      error_page   500 502 503 504  /50x.html; #错误页
       location = /50x.html {
           root   html;
       }
   }
}

(5)Location语法
1.= 严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
2.~ 区分大小写匹配(可用正则表达式)
3.~* 不区分大小写匹配(可用正则表达式)
4.!~ 区分大小写不匹配
5.!~* 不区分大小写不匹配
6.^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式

nginx.conf文件中添加server块.

server {
       listen       88;
       server_name  localhost;
       
       #/表示所有请求都过滤,优先级最低
       location / {
           #root   html;
           #index  index.html index.htm;
           echo "hello nginx";       
       }

       #=表示精确匹配,优先级最高
       location = /a {
           echo "/a";

        }

       #^~代表以xxx开始,第二优先
       location ^~ /a {
           echo "^~ /a";
       }

       #~代表正则匹配,第三优先
       location ~ /[0-9] {
           echo "~ /[0-9]";
       }
}

为了方便展示,在虚拟机上安装echo模块:https://github.com/openresty/echo-nginx-module/tags
上传到nginx同目录下并解压:tar -zxvf echo-nginx-module-0.62.tar.gz
先停止nginx服务,然后cd nginx-1.18.0/
执行:./configure --add-module=/usr/local/echo-nginx-module-0.62
编译:make
复制:cp objs/nginx ../nginx/sbin/,再次启动即可

安装curl:yum install curl
测试:curl http://localhost:88 输出:hello nginx
curl http://localhost:88/a 输出:/a
curl http://localhost:88/abc 输出:^~ /a
curl http://localhost:88/1输出:~ /[0-9]

3、nginx的应用场景

(1)静态服务器
静态资源是指非服务器运行动态生成的文件,主要包括浏览器端渲染(html、css、js)、图片(jpeg、gif、png)、视频文件(flv、mpeg)、其他文件(TXT等任意下载文件)。
这些静态资源可以保存在 /usr/local/nginx/static 路径下,当项目打成jar包后放到虚拟机内运行时,可以从外部获取静态资源。

修改nginx.conf文件

server {
       listen       80; #监听端口       
       server_name  localhost; #监听地址
       location / { #/代表所有请求
           proxy_pass   http://127.0.0.1:8082; #代理,项目端口号为8082
       } 
       #用正则表达式,当请求的后缀为这些时会找到根目录的static目录下
       location ~ .*\.(jpg|jpeg|png|js|css|html|txt) { 
           root static;
       }
       error_page   500 502 503 504  /50x.html; #错误页
       location = /50x.html {
           root   html;
       }
}

重新启动nginx服务器,使用命令java -jar test.jar运行项目,项目启动后从 /usr/local/nginx/static 路径获取静态文件,在宿主机使用虚拟机地址就可以访问项目。

(2)虚拟主机
虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,每一个虚拟主机都可以有独立的域名和独立的目录。配置的时候和静态资源服务器配置方法一致,只需要多添加一个server节点,保证访问的url不一样就可以了。

首先配置主机名,起两个别名,方便查看。

127.0.0.1 www.hr.com www.hzg.com

修改nginx.conf文件

server{
       listen       81;
       server_name    www.hr.com;#监听地址分别为主机名的两个别名
       location / {
                root html2;#请求到的页面是自己重新创建的默认页面
                index index.html;       
       }
}
 
server{
       listen       81;
       server_name    www.hzg.com;
       location / {
                root html3;
                index index.html;
       }
}

在 /usr/local/nginx/ 目录下创建两个不同的html目录和默认页面,并重新启动nginx服务器。
cp -r html/ html2
cp -r html/ html3

在宿主机上使用不同的主机地址访问nginx服务器,以达到访问多台服务器的效果。
服务器地址分别为www.hr.com:81,www.hzg.81

(3)反向代理
使用代理服务器的好处有:
1.提高访问速度。由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门网站能明显提高访问速度。
2.防火墙作用。由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可以在代理服务器上设限,过滤掉某些不安全信息。同时正向代理中上网者可以隐藏自己的IP,免受攻击。
3.突破访问限制。互联网上有许多开发的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的翻墙浏览器就是利用了代理服务器,可以直接访问外网。

正向代理(forward proxy):一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标(原始服务器),然后代理向原始服务器转发请求并将获得的内容返回给客户端,客户端才能使用正向代理。我们平时说的代理就是指正向代理。
反向代理(Reverse Proxy):用户→nginx→tomcat,以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求的客户端,此时代理服务器对外表现为一个反向代理服务器。

server{
    listen       80;
    server_name www.hzg.com;
    
    location /{
         #tomcat服务器
    proxy_pass
    http://127.0.0.1:8080; 
    }
} 

(4)负载均衡
扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性的技术就是负载均衡(Load Balance)。
1.一种是通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但是它们是比较昂贵的。
2.一种是通过软件来进行解决的,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略。

nginx的负载均衡是通过它的反向代理能力实现的。

upstream tomcatserver {

        server   127.0.0.1:8080 weight=1;
        server   127.0.0.1:8081 weight=2; #权重越大使用率越高

}

server{
        listen       80;
        server_name www.hzg.com;
        
        location /{
                proxy_pass http://tomcatserver;
        }
}

这样,当访问本地的80端口的时候,会采用轮询的方法跳转到8080端口和8081端口,其中8081端口的权重为8080端口的两倍,就是8081被访问两次,8080会被访问一次。

nginx支持的负载均衡调度算法方式:
weight轮询(默认)。接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
least_conn。最少连接,将新请求分发给不太繁忙的服务器,避免服务器过载。
ip_hash。每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
fair。智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块
url_hash。按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值