Nginx部署(详细)

 

1. 概念

 百度百科:

  Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

  Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。
  其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。
  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

 

2. Nginx安装

 (1) 下载:https://nginx.org/en/download.html (下载的是Linux版本,后面是Windows版本的)

   

 (2) 上传

  将下载的 nginx-1.26.1.tar.gz 包上传到Linux文件的 /usr/local 文件下。

# 进入目录下
cd /usr/local/
# 上传后进行解压
# 解压
tar -zxvf nginx-1.26.1.tar.gz

 

 (3) 准备执行条件

# 安装C语言库
yum install -y gcc
# 安装perl库
yum install -y pcre pcre-devel
# 安装zlib库 
yum install -y zlib zlib-devel

 

 

 (4) 指定安装位置

# 进入Nginx文件
cd nginx-1.26.1/
# 执行命令
./configure  --prefix=/usr/local/nginx

 (5) 编译和安装

# 继续执行
make
# 等待一下,继续安装
make install

 

 conf:存放配置文件

 html:存放静态页面

 logs:存放日志文件

 sbin:存放二进制启动文件

 *_temp:存放的是临时文件

 

 

 (6) 启动服务

# 进入安装好的目录下
cd /usr/local/nginx/sbin
./nginx # 启动 

./nginx -s stop # 快速停止 

​./nginx -s quit # 优雅关闭,在退出前完成已经接受的连接请求 

​./nginx -s reload # 重新加载配置 

  本地 VM 记得关闭防火墙。

 启动后,浏览器 ip (默认80)

  (7) 创建启动脚本

# 使用 vim或vi命令
vim /usr/lib/systemd/system/nginx.service

 进入是空的。

[Unit]
Description=nginx - web server 
After=network.target remote-fs.target nss-lookup.target 

[Service] 
Type=forking 
PIDFile=/usr/local/nginx/logs/nginx.pid 
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf 
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop 
ExecQuit=/usr/local/nginx/sbin/nginx -s quit 
PrivateTmp=true 

[Install] 
WantedBy=multi-user.target

  CV 后 wq 报错退出。

 

# 重新加载系统服务
systemctl daemon-reload

 没有生效。

# 进入 sbin 目录
cd sbin/

# 执行命令 优雅关闭
./nginx -s quit

 

# 查看是否启动
ps -ef | grep nginx

 

 没有启动。

# 重载系统服务
systemctl daemon-reload
# 启动服务
systemctl start nginx.service

systemctl restart nginx.service

# 开机自启
systemctl enable nginx.service

  启动了。

 

  设置开机自启:使用上面命令

 

  再次执行重载系统服务命令。

  安装完成!

 

3. 文件目录讲解

# 进入 html 目录
cd /usr/local/nginx/html/
# 编辑index.html
vim index.html

 

 

4. Nginx 运行原理  

 

 master:主机(一个主机可以有多个从机)

 work:从机

  • 系统启动以后就会有一个nginx的主进程
  • 主进程读取nginx.conf配置文件,确认文件的位置
  • 主进程创建多个work进程
  • 当用户请求进来以后,work进程就可以读取解析用户的请求,并返回信息。

 

5. Nginx 配置

  

# 编辑 配置文件
vim nginx.conf

 

  

  双击 dd 即可删除。

 简化后配置如下:

worker_processes  1;

events {
    worker_connections  1024;
}
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • worker_processes 1; 配置worker进程的数量,这个数字跟cpu的核心数相关,nginx优化的一个参数

  • worker_connections 1024; 一个worker进程的最大连接数。

  • include: 引入其他的文件

  • mime.types: 这个文件的作用是,当用户请求资源文件的时候,我们将不同文件根据后缀,告诉用户解析方式,其实当用户浏览器拿到服务器给的资源的时候,即使给了后缀名,浏览器也是不能完全解析的,需要在请求头的地方告诉浏览器解析方式。比如png格式的文件,需要image/png的方式解析。

  • default_type application/octet-stream 默认类型,也就是当服务器没有发给用户的资源没有后缀名的时候,我们默认使用application/octet-stream将文件传给浏览器
  • sendfile on:开启高效文件传输模式,也叫零拷贝模式
    • 如果不开启这个模式,那么下面第一个就是不开启的工作模式。当用户请求页面上的资源的时候,将请求打到nginx上,nginx根据配置文件找到资源文件的位置,并且将资源文件读取到linux内存中,然后通过linux系统找到网卡,将文件信息发送给用户。

    •  

    • 如果开启sendfile模式,那么nginx找到资源文件以后,linux系统会直接开启一个新的socket进程读取文件,并且直接将读取的信息发给用户。

  • keepalive_timeout 65; 保持长连接的时长。
  • server 配置资源文件的,相当于一个完整的服务器站点 vhost,可以通过端口号来区分。
  • listen 80; 站点监听的端口。
  • server_name 域名; 站点的域名(是一个网路能解析的域名)。
  • location 用来匹配uri的 域名:端口/uri。
  • root html; 当用户的请求和location的uri匹配的时候,要进入的目录资源
  • index index.html index.htm;当用户的请求和location的uri匹配的时候,默认的请求主页。
  • 错误提示:
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}

 

  当服务器发生内部错误的时候,比如500,502...就会将请求转发到 /50x.html,从html目录中找到 50x.html文件

 

 

6. 部署页面

  准备一个前端项目

 打包方式:https://www.cnblogs.com/warmNest-llb/p/18257846

# 进入 home 目录
cd /home
# 创建文件夹
mkdir webpage

 将项目压缩包放入 webpage 目录下。

# 解压缩
unzip 文件名

 

 

# 查看当前目录
pwd

 一般项目内有 css、img、js等。

 

 开始配置。

# 进入 nginx 根目录下的conf
cd /usr/local/nginx/conf/
# 编辑 nginx.conf文件
vim nginx.conf

 

  此处的路径改为我们部署的项目的路径,意思是,访问本路径下的 index.html页面。

  wq 保存退出。

# 重启服务
systemctl restart nginx.service

 刷新页面。成功了

 

 

 这样就部署完成了。但如果想多部署几台,直接在项目的 目录下 再解压缩重复同样的步骤。

 直接在 server{} 下 复制一份。

 但注意:改 listen 端口,不可重复;

     修改location的root路径

 

 配置多台后开启端口,重载服务器,访问即可。

 这就是 nginx 基础部署。

 

7. 域名

 1) 概念和原理:

  域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。域名使一个IP地址有"面具" 。一个域名的目的是成为便于记忆和沟通的一组服务器的地址(网站电子邮件FTP等),世界上第一个注册的域名是在1985年1月注册的。

  DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

  通俗的说:因为我们的IP地址都一连串的数字,不好记忆,所以我们用一个很好记的一串单词来代替ip地址。然后通过DNS服务器来记录我们域名和IP的对应关系,以后我们访问IP的时候就可以通过域名的方式,间接的去访问我们的IP地址了。

 2) 配置域名:

  域名需要付费备案。

  腾讯云或阿里云,搜索:域名注册 -> 全部域名 -> 点开点击 解析 (可修改)

# 配置域名
# 进入nginx安装目录的 conf 配置文件
cd /usr/local/nginx/conf/
# vim 配置文件
vim nginx.conf

 

# 重启服务
systemctl restart nginx.service

 浏览器访问配置的域名:www.域名

 

8. 反向代理

  1) 概念:

  反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。

 

 正向代理:

 加速器: 属于正向代理 雷神加速,在我自己的电脑上安装的,启动雷神软件, 雷神给我们访问蓝洞,从蓝洞拿到资源,再给我们。我们是知道蓝洞服务器的地址的。

 反向代理:

 我们开发了一个网站,但是总是受到别人的攻击,www.xxx.com 。 但是为了不让别人直接攻击我的服务器,我就做了一个代理服务器,nginx 。别人通过访问nginx就能代理到我的网址,其实他们是不知道我真正的服务器地址的,他们访问的只是我的nginx的地址。

 一般会拿正向代理和方向代理来做对比,本质上来讲,就是看对谁负责。

  • 反向代理:代理服务器是对服务器负责,站在服务器的一边的。

  • 正向代理:代理服务器是对客户端负责,站在客户端的一边的。保护服务器安全。

 2) 配置

 在另外一台服务器,有域名。

 修改 server 配置文件。

# 配置域名
# 进入nginx安装目录的 conf 配置文件
cd /usr/local/nginx/conf/
# vim 配置文件
vim nginx.conf

 在 location 下 添加地址:proxy_pass http://域名:端口;

 注释了 root 和 index。因为启动了代理后,静态文件会失效。

 

  修改完成 wq 保存退出,重新启动 nginx,

# 进入 sbin 目录
cd /usr/local/nginx/sbin/
# 启动
./nginx

 访问server_name 的 www.xxx.work,其实就相当于访问 http://hanxxx.cloud:8088

 因为只是在这个服务器配置了一个服务器名。但可以访问另外的服务器。

 

9. 负载均衡

 ES/服务器: 容量有限/访问数量有限。 20 服务器,请求进来以后需要将请求平均分配到每个服务器上,将压力平摊。 

 1) 概念

  负载:超过载荷,达到压力。

  均衡:均匀分配,分摊压力。

  负载均衡:通过某种特点的算法,将用户的请求合理的分配到集群服务的某个服务器上。高并发的一种方案。

 

 

 2) 配置

 有两台或多台服务器分别部署两个项目,启动。

 一台服务器作为代理服务器,用作负载均衡。另外两台作为资源服务器。如何访问两台资源服务器取决于我们部署的策略。

 

资源服务器:

# 将打包的项目分别放到两台 资源服务器
cd /home
# 启动
java -jar 包名.jar

 

代理服务器:

# 进入配置文件
cd /usr/local/nginx/conf/
# 打开配置文件
vim nginx.conf
# 在 server{} 外配置负载
#负载
  upstream serverip{
      server 192.168.222.152:8088;
      server 192.168.222.153:8088;
  }

 如上:配置ip+端口

 完整配置:

 upstream 和 server 配合使用:

  • 在upstream中起别名,并配置多个服务器地址和端口;

  • 在server的代理中使用起好的别名 proxy_pass http://别名

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    # 负载
    upstream serverip{
        server 192.168.222.152:8088;
        server 192.168.222.153:8088;
    }
    
    server {
        listen       80;
        server_name  www.warmNest-llb;

        location / {
            proxy_pass http://serverip;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    
}

 配置完成启动服务。

# 重启服务
systemctl restart nginx.service

 注意:如果另外的资源服务器配置了 nginx 其启动状态,将进程杀了。然后重启。

# 查看命令 
ps -ef | grep nginx
# 将查询出的进程ID杀了
kill -9 (进程ID)

 访问:www.warmNest-llb(概率刷新)

 

 3) 负载均衡策略

  • 轮询(默认):如上配置好。
  • 负载权重:weight=(数字)

  资源服务器性能较好的权重则高

# 权重配置
    # 负载
    upstream serverip{
        server 192.168.222.152:8088 weight=8;
        server 192.168.222.153:8088 weight=2;
        }

 

  • down:离线,不参与服务
# down离线配置
    # 负载
    upstream serverip{
        server 192.168.222.152:8088 weight=8 down;
        server 192.168.222.153:8088 weight=2;
        }
  • backup:备用(正常情况不会使用这个机器,只有其他机器不能用的时候,才启用备用服务器)
# backup备用配置
    # 负载
    upstream serverip{
        server 192.168.222.152:8088 weight=8 backup;
        server 192.168.222.153:8088 weight=2;
        }
  • ip hash:(根据客户端ip地址转发同一台服务器,可以保持会话
# Ip hash 配置
    # 负载
    upstream serverip{
        ip_hash;
        server 192.168.222.152:8088;
        server 192.168.222.153:8088;
        }
  • least_conn:(最少连接访问,选择服务器访问量最小的)
# least_conn 最少连接配置
    # 负载
    upstream serverip{
        least_conn;
        server 192.168.222.152:8088;
        server 192.168.222.153:8088;
        }
  • fair:(根据后端服务器响应时间转发,哪个快访问哪个)
# fair 配置
    # 负载
    upstream serverip{
        fair;
        server 192.168.222.152:8088;
        server 192.168.222.153:8088;
        }

 一般开发中我们使用轮询策略+权重(根据服务器性能),配合分布式session技术来开发。

 

10. 动静分离

 动静分离也是优化程序访问速度的一种方式。

 1) 概念

  当我们向nginx发起请求的时候,nginx会将请求转发到后台服务器,后台服务器在将页面信息给了nginx,然后传递到用户,但是用户的页面会加载很多的静态资源 js、css、image,其实这些资源没必要再次通过nginx-->后台-->nginx-->用户,我们可以将资源直接放在nginx上,用户需要的资源可以直接从nginx上获取,从而提高响应速度和降低后台服务器的压力。

 

 

 2) 配置

 

资源服务器:

# 下载服务器 jar 包
sz 包名.jar

 下载包内,找到前端的 static 下的各种静态资源:css、js、img文件。

 备份 -> 删除

# 回到服务器,删除jar包
rm -rf 包名.jar
# 将已经删除的静态资源的包再次部署
# 启动
java -jar 包名.jar

 浏览器访问(清除一下缓存)如果删除 css 样式发现页面 ”崩了“。也就是找不到CSS样式。

 此时就可以到代理服务器部署静态资源了。

代理服务器:

将删除的css放入nginx服务html目录中,在server中添加新的location信息,指定加载的css页面,这样就可以从nginx中加载css资源了。

将备份好的css样式包传入服务器路径 home/webpage/webstatic 下。
开始配置:
# 进入安装目录
cd /usr/local/nginx/conf/
# 编辑
vim nginx.conf

 

# 编辑配置文件

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}
http{
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    # 负载
    upstream serverip{
        server 192.168.222.152:8088 weight=8;
        server 192.168.222.153:8088 weight=2;
        }

    server {
        listen       80;
        server_name  www.warmNest-llb;

        location / {
            proxy_pass http://serverip
            # root   /home/webpage/dist/;
            # index  index.html index.htm;
        }  

        # 静态CSS样式    
        location /css{
           root /home/webpage/webstatic;
           index index.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

 如:我将资源服务器的 CSS 样式删除后,部署到代理服务器的 home/webpage/webstatic下。

 

  

# 重启服务
systemctl restart nginx.service

 浏览器访问即可。

 

 上面是单个文件进行操作。实际上静态文件有很多,但是每个都location /css location /js比较麻烦,我们可以通过正则的方式匹配。

 将上面配置的改为:

# 通配符统一配置       
       location ~*/(js|css|image|img|lib){
           root html;
           index index.html;
        }

  PS:记得要将

        资源服务器的jar包删除重新部署,部署的包内的静态文件删除(删除前记得备份)。删除的包重新打包上传启动。

        重启代理服务器。

 


 

posted @ 2024-06-22 09:17  学Java的`Bei  阅读(594)  评论(0编辑  收藏  举报