天空闲话 发表于 2024-12-21 03:19:30

Nginx(Linux之Ubuntu)

1.1.什么是Nginx

Nginx(发音为"engine x")是由俄罗斯开发者Igor Sysoev创建的一款轻量级、高性能的Web服务器。它初次发布于2004年,现在已成为举世最受欢迎的Web服务器之一。Nginx以其卓越的性能和灵活性而闻名,适用于静态和动态内容的服务,以及负载平衡和反向代理等多种应用场景。中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
   官网地址:nginx

1.2.Nginx优缺点

优点


[*] 高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应。
[*] 内存消耗少:处理静态文件,同样起web 服务,比apache 占用更少的内存及资源,所以它是轻量级的(至于区别在哪?背面内容举行分析)。
[*] 简单稳定:一样平常在使用 Nginx 中,针对单个域名设置文件设置接口,学习本钱很低。相比 Apache 设置简单很多。
[*] 模块化水平高:Nginx是高度模块化的计划,编写模块相对简单,包罗 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,支持 SSL 和 TLSSNI。
[*] 支持Rwrite重写规则:能够根据域名、URL的差别, 将HTTP请求分发到差别的后端服务器群组。
[*] 低本钱:Nginx可以做负载平衡,且Nginx是开源免费的,假如使用商业软件F5等硬件来做负载平衡,硬件本钱比较高。
[*] 支持多体系:Nginx是由C语言开发,适用于各个平台。

缺点


[*] 动态处理能力较差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一样平常前端用nginx作为反向代理抗住压力,apache作为后端处理动态请求。
[*] rewrite弱:虽然Nginx支持rewrite功能,但是相比于Apache来说,Apache比Nginx 的rewrite 强大。Apache 设置 rewrite 是通过项目下面的.htaccess 文件做设置还有就是打开 Apache 设置中的 rewrite 模块。而 Nginx 则需要在做域名设置时,对 rewrite 做设置。

2.快速入门

2.1.使用apt安装Nginx

sudo apt -y install nginx   apt方式安装nginx,它的安装根目录为/etc/nginx。
查看nginx版本:
# 显示 nginx 的版本
nginx -v
# 显示 nginx 的版本,编译器版本和配置参数
nginx -V
2.3.设置防火墙

将nginx默认访问端口80进入到防火墙中。
sudo ufw allow 80/tcp
sudo ufw reload
2.4.启动后效果

# 启动nginx服务
sudo systemctl start nginx
# 查询nginx服务启动状态
sudo systemctl status nginx 3.SPA项目发布

3.1.假造域名设置

修改window体系中hosts文件,添加假造域名映射关系。文件位置:C:\Windows\System32\drivers\etc\hosts。
别的,此文件有大概出现由于当前用户权限不敷,出现无法修改的环境?办理方案:将此文件复制到d硬盘任一目录,修改后,再复制替换C:\Windows\System32\drivers\etc\hosts原文件https://i-blog.csdnimg.cn/direct/2dc27d77fc4140a5b89f2a9070e4a038.png

3.2.SPA项目打包

第一步:HbuilderX打包vue项目白屏问题。
将项目目录下的config/index.js文件中,将build对象下的assetsPublicPath中的“/”,改为“./”后。
module.exports = {
   dev: {
       // Paths
       assetsSubDirectory: 'static',
       assetsPublicPath: '/',
       proxyTable: {},
       ...
 },
   build: {
       // Template for index.html
       index: path.resolve(__dirname, '../dist/index.html'),

       // Paths
       assetsRoot: path.resolve(__dirname, '../dist'),
       assetsSubDirectory: 'static',
       //修改前
       //assetsPublicPath: '/',
       //修改后
       assetsPublicPath:'./',
       ...
 }
}
第二步:HbuilderX打包vue项目,element-ui的icon图标无法正常显示问题。
使用vue-cli3脚手架搭建的项目,在打包文件上服务器的时间,其他的css和js样式都能正确加载出路径,但是element的icon图标却不能正常加载出来。事实上是打包时间读取的文件路径多了两层,找到build/utils.js目录中的路径,看看function generateLoaders();方法, 指定该选项时提取CSS发现少了个公共路径,加上pubilcPath。
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
   return ExtractTextPlugin.extract({
       use: loaders,
       fallback: 'vue-style-loader',
       // 解决icon路径加载错误
       publicPath:'../../'
    })
} else {
    return ['vue-style-loader'].concat(loaders)
}
第三步:SPA项目打包https://i-blog.csdnimg.cn/direct/36ae47fab3544355bc26f5816bd8a1cb.png
打包成功之后,会在当前项目目录下天生一个dist目录,而目录下的文件就是打包天生。https://i-blog.csdnimg.cn/direct/f996d1733f7c4ba6a2333b197ddf4ffa.png

3.3.动静分离

3.3.1.什么是Nginx动静分离

Nginx动静分离简单来说就是把动态跟静态请求分开,不能明白成只是单纯的把动态页面和静态页面物理分离。严酷意义上说应该是动态请求跟静态请求分开,可以明白成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;别的一种方法就是动态跟静态文件混淆在一起发布,通过Nginx来分开。https://i-blog.csdnimg.cn/direct/a3887aac103b4bfab54517fdd5209a1a.png
3.3.2.设置

将SPA项目压缩并上传到/usr/nginx/html目录,再解压。
# 创建目录
sudo mkdir -p /usr/nginx/html
# 切换目录
cd /usr/nginx/html
# 上传SPA项目
sudo rz dist.zip
# 解压
sudo unzip dist.zip 修改nginx核心设置文件/etc/nginx/sites-enabled/default。
# 切换目录
cd /etc/nginx/sites-enabled
# 备份
sudo cp default default.bak
# 编辑conf.d文件
sudo vim default 并添加SPA项目访问映射规则。
location / {
   #该句代码是为解决history路由不能跳转的问题,在vue-router官网有介绍
 try_files $uri $uri//index.html;
} 末了,重启nginx服务并访问SPA项目。
# 重启nginx服务
sudo systemctl restart nginx
4.Nginx负载平衡

4.1.什么是负载平衡

客户端发送多个请求到服务器,服务器处理请求,有一些大概要与数据库举行交互,服务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的体系相对单一,并发请求相对较少的环境下是比较适合的,本钱也低。但是随着信息数目标不断增长,访问量和数据量的飞速增长,以及体系业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时间,还轻易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何办理这种环境呢?
我们起首想到的大概是升级服务器的设置,好比进步CPU执行频率,加大内存等进步机器的物理性能来办理此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满意日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其巨大的,那么类似上面的体系架构,将机器都增加到现有的顶级物理设置,都是不能够满意需求的。那么怎么办呢?
上面的分析我们去掉了增加服务器物理设置来办理问题的办法,也就是说纵向办理问题的办法行不通了,那么横向增加服务器的数目呢?这时间集群的概念产生了,单个服务器办理不了,我们增加服务器的数目,然后将请求分发到各个服务器上,将原先请求会合到单个服务器上的环境改为将请求分发到多个服务器上,将负载分发到差别的服务器,也就是我们所说的负载平衡https://i-blog.csdnimg.cn/direct/4c0a3fe6684f4491b31c884a172a43e8.png

4.2.Nginx实现反向代理

修改nginx核心设置文件/etc/nginx/conf.d,设置nginx反向代理。
server {
 listen       80;
 server_namewww.zking.com;
   #charset koi8-r;
   #access_loglogs/host.access.logmain;
 location ^~ /edu/ {
       proxy_pass http://127.0.0.1:8080/;
 }
 location ^~ /zki/ {
       proxy_pass http://127.0.0.1:8081/;
 }
}   proxy_pass阐明是动态请求,需要举行转发,好比代理到Tomcat上。
直接在浏览器中输入访问地址:http://www.zking.com/zki/ssm/ 。https://i-blog.csdnimg.cn/direct/e53200b516d64e6dbc7b1bb04ea2a80f.png
切换到nginx日志目录,查看日志信息。
# 切换到nginx的日志目录
cd /var/log/nginx/
# 查看日志信息
sudo tail -f error.log
4.3.Nginx实现负载平衡

拷贝一个Tomcat,将其端口信息修改为8081,并将8081端口到场到防火墙答应访问规则中,然后分别启动这两台Tomcat。
修改nginx核心设置文件/etc/nginx/conf.d,设置nginx负载平衡
upstream tomcats{
 server 127.0.0.1:8080 weight=1;
 server 127.0.0.1:8081 weight=2;
}

server {
 listen       80;
 server_namewww.zking.com;

 #charset koi8-r;
 #access_log/var/log/nginx/host.access.logmain;

 location ^~ /edu/ {
     proxy_pass http://127.0.0.1:8080/;
 }

 location ^~ /api/ {
     proxy_pass http://tomcats/;
 }
}   第一,通过upstream来界说一组Tomcat,并指定负载策略(IPHASH、加权论调、最少连接),康健检查策略(Nginx可以监控这一组Tomcat的状态)等。 第二,将proxy_pass替换成upstream指定的值即可。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Nginx(Linux之Ubuntu)