Nginx学习教程(基础篇)

目录

一、Nginx安装

二、Nginx基本使用

2.1、目录结构

conf 

html

logs

sbin

2.2、基本运行原理

2.3、nginx.conf最小配置解析

worker_processes

worker_connections

include mime.types

default_type  application/octet-stream

sendfile on

keepalive_timeout  65

虚拟主机配置

2.4、虚拟主机与域名解析

2.4.1、实现域名解析

2.4.2、实现Nginx不同端口访问不同项目

2.4.3、servername匹配规则

完整匹配

通配符匹配

通配符结束匹配

正则匹配

2.5、反向代理

2.5.1、介绍

2.5.2、实现反向代理

2.6、负载均衡

2.6.1、实现简单的负载均衡

2.6.2、负载均衡策略

轮询

weight(权重)

ip_hash

least_conn

url_hash

fair

2.7、动静分离

2.7.1、介绍

2.7.2、配置动静分离

2.7.3、使用正则配置动静分离

2.7.4、UrlRewrite

2.8、高可用配置

2.8.1、Keepalived

2.8.2、Keepalived配置


一、Nginx安装

请参考我的另一篇文章:Linux系统安装Nginx(保姆级教程)

二、Nginx基本使用

2.1、目录结构

conf 

用来存放配置相关文件。
最重要的就是此文件。

html

用来存放静态文件的默认目录 html、css等。

logs

access.log:用来记录用户访问日志,将时间、地点、人物三要素都记录下来。由于会记录每个人的每次访问,所以此文件会比较大,但放心,在配置文件中配置了,当文件过大,会往另外一个文件中记录。

error.log:顾名思义,就是记录一些错误的日志。

nginx.pid:里面只有一个pid号,当我们启动Nginx时,pid就是此号。

sbin

Nginx的主程序。

2.2、基本运行原理

第一步:用户发起一个请求。

第二步:Nginx启动后共有两个进程,一个是master主进程,另一个worker子进程,主进程不处理业务,只是协调子进程干活。

第三步:worker读取并解析配置文件/conf/nginx.conf,看用户发的请求能不能映射到配置文件中配置的url,能就直接映射。

2.3、nginx.conf最小配置解析

worker_processes

worker_processes  1; # 默认为1,表示开启一个业务进程

worker_connections

# 单个业务进程可接受连接数
events {worker_connections  1024;
}

include mime.types

http {# 引入http mime类型include       mime.types;

default_type  application/octet-stream

http {include       mime.types;# 如果mime类型没匹配上,默认使用二进制流的方式传输default_type  application/octet-stream;

sendfile on

sendfile        on; # 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。

keepalive_timeout  65

keepalive_timeout  65;

虚拟主机配置

# 主机
server {listen       80; # 监听端口号server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}#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;}}

server{}:代表一个虚拟主机,一个nginx.conf文件可以配置多个主机,互不干扰,可以通过端口号listen的不同来区分。

listen:监听端口。

server_name:主机名,域名。

location:是域名或主机名后跟的uri,比如我nginx.conf配置如下:

# 主机
server {listen       8080; # 监听端口号server_name  localhost;api/ {root   html;index  index.html index.htm;}}

那前端用户请求的就应该是,http://localhost:8080/api/。

那么请求就会映射到html文件中,这里的html以后我们做项目,会把前端项目编译后的一堆文件放到html文件中,直接就可以访问。

error_page:错误页。

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

假如请求http://localhost:8080/api/userList路径,但是报错了,错误码是500,那么就会跳转到/50x.html,路径就会变成http://localhost:8080/50x.html,但我们没有50x.html,所以会将目录指向nginx/html中的50x.html。

2.4、虚拟主机与域名解析

原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务。

2.4.1、实现域名解析

第一步:复制你本机的hosts文件到桌面,路径是C:\Windows\System32\drivers\etc\hosts

第二步:打开桌面上的hosts文件,输入以下映射关系

你虚拟机的ip地址 www.s1.com

这样做的意思是,给你的IP地址映射一个域名,这样你就可以通过域名来访问nginx了。

第三步:保存并替换C:\Windows\System32\drivers\etc\hosts

第四步:ping www.s1.com

如果有响应就算成功!!!

第五步:在本机浏览器上访问www.s1.com,如果出现nginx页面就算配置映射成功

2.4.2、实现Nginx不同端口访问不同项目

我现在有个需求:我只有一台服务器,但我想输入不同端口号访问不同的项目,刚如何做?

第一步:在nginx/html中创建两个目录,里面分别写上不同的html页,代表两个项目

cd /usr/local/nginx/htmlmkdir -p wwwmkdir -p void

cd wwwvi index.html

cd voidvi index.html

第二步:打开conf/nginx.conf文件,增加主机映射

cd /usr/local/nginx/confvi nginx.conf

在html基础上后面加上/www,代表的意思是,当我访问localhost:80就会去html/www文件下找index.html页。

复制进去,现在总共有两个server{},一个端口为80,另一个为88。

保存文件。

第三步:重启nginx

systemctl reload nginx

注意:这里如果重启完不生效,先stop命令停止,再用start命令启动。

第四步:本机访问进行测试

2.4.3、servername匹配规则

完整匹配

我们可以在同一servername中匹配多个域名。

server_name vod.mmban.com www1.mmban.com;

这样不管我们访问vod.mmban.com还是www1.mmban.com,都映射到一台主机上。

通配符匹配

server_name *.mmban.com

通配符结束匹配

server_name vod.*;

正则匹配

server_name ~^[0-9]+\.mmban\.com$;

2.5、反向代理

2.5.1、介绍

用户请求通过互联网打到我们机房网关路由上,路由和nginx是互通的,也就是说,用户请求直接访问nginx中间商,然后nginx转发到应用服务器。

由于Nginx是服务端提供给用户访问的,所以叫反向代理

2.5.2、实现反向代理

修改配置文件nginx.conf。

proxy_pass http://baidu.com;

 

意思就是当我访问localhost:80时,直接跳转到百度,但这种域名会变,从 localhost:80变成www.baidu.com,这是因为访问的外网。

如果你代理的是内网地址,比如192.168.X.1代理到192.168.X.2,那域名就不会变。

2.6、负载均衡

2.6.1、实现简单的负载均衡

在nginx.conf配置文件中添加如下代码:

upstream httpd {server 192.168.44.102:80;server 192.168.43.103:80;
}server{listen 80;server_name localhost;location /{proxy_pass http://httpds; # httpds映射到上面配置的负载均衡名,随意起名}
}

注意:upstream和server是同级别的,别写到server{}里面。

这样当我们访问localhost:80,第一次代理到192.168.44.102:80,第二次代理到192.168.44.102:80,依次类推,一人一次,雨露均沾。

2.6.2、负载均衡策略

轮询

默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求,一人一下,雨露均沾。

weight(权重)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream httpd {server 127.0.0.1:8050 weight=10 down;server 127.0.0.1:8060 weight=1;server 127.0.0.1:8060 weight=1 backup;
}

down:表示当前的server暂时不参与负载。
weight:默认为1,weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器,意思是备用服务器。

ip_hash

根据客户端的ip地址转发同一台服务器,可以保持会话。像轮询就不会保持会话,比如你在A服务器上登录过,这次轮询到B服务器了,那你就得重新登录。而ip_hash策略,就会根据你用户的ip地址,来定向转到同一台服务器,这样就可以保持会话了。

least_conn

最小连接数访问,这样能保证后端服务器的负载更加均衡。意思就是A服务器连接次数1000次,B服务器才20次,那么就会将剩下的往B上转。

url_hash

根据用户访问的url定向转发请求。

fair

根据后端服务器响应时间转发请求。

注意:ip_hash、least_conn、url_hash、fair这四种基本上在生产环境中不会用,有一个重要的问题,无法做到服务器动态上下线,比如有现在有4台服务器,我想动态下线一台,再上线两台,这个是做不到的。

2.7、动静分离

2.7.1、介绍

如果你是前后分离的项目,这一节就不用看了。

动静分离的意思是,我们单体项目比如SpringBoot,里面有很多html页,必然会引入很多图片、gif图、JS、CSS等静态资源。本来用户请求到Nginx,再代理到Tomcat,那是不是有点浪费资源呢?我们是否可以将静态资源都放到Nginx上,这样就少了一步代理操作。静从Nginx上取,动就直接代理到Tomcat后端服务器,这就叫动静分离。

2.7.2、配置动静分离

location / {proxy_pass http://127.0.0.1:8080;
}location /css {root /usr/local/nginx/static; # 访问static下的css目录index index.html index.htm;
}location /images {root /usr/local/nginx/static; # 访问static下的images目录index index.html index.htm;
}location /js {root /usr/local/nginx/static; # 访问static下的js目录index index.html index.htm;
}

2.7.3、使用正则配置动静分离

location ~*/(css|img|js) {root /usr/local/nginx/static;index index.html index.htm;
}

2.7.4、UrlRewrite

location /{rewrite ^/2.html$  /index.jsp?pageNum=2 break;proxy_pass http://192.168.44.104:8080;
}

配置的rewrite意思就是重写url,我们访问localhost:80/2.html其实访问的是localhost:80//index.jsp?pageNum=2。其实压根就没有2.html,配置文件只要匹配上就行。

flag标记说明:
        last #本条规则匹配完成后,继续向下匹配新的location URI规则。
        break #本条规则匹配完成即终止,不再匹配后面的任何规则。
        redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址。
        permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

2.8、高可用配置

2.8.1、Keepalived

这东西有点像Redis的哨兵模式,当每一台Nginx配备一个Keepalived,每个Keepalived是互通的,假如A服务器上的Nginx宕机了,通过Keepalived就可以将请求都转到B服务器的Nginx。

2.8.2、Keepalived配置

参考我的另一篇文章:Linux上安装Keepalived,多台Nginx配置Keepalived(保姆级教程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/73669.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eBay逆变器UL458检测报告

逆变器是把直流电能(电池、蓄电瓶)转变成交流电(一般为220V,50Hz正弦波)。它由逆变桥、控制逻辑和滤波电路组成。逆变器是一种DC to AC的变压器,它其实与转化器是一种电压逆变的过程。广泛适用于办公设备,生…

【MYSQL】DataGrip连接linux本地mysql失败:Connection refused

防火墙需要开放3306端口 sudo ufw allow 3306 要么就把防火墙关了: sudo ufw disablemysql开放连接 记住你的密码 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password by 123456;修改配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf这个…

Vue的 hash 模式与 history 模式

为了能够在改变视图的同时,不向后端发出网络请求。浏览器提供了 hash 模式与 history 模式。 而 vue 中的路由器就是利用了这两种模式,来实现前端路由的。 路由器的 hash 模式: 一、在 router 目录下的 index.js 文件中,通过 m…

什么是搜索引擎?2023 年搜索引擎如何运作?

目录 什么是搜索引擎?搜索引擎的原理什么是搜索引擎爬取?什么是搜索引擎索引?什么是搜索引擎检索?什么是搜索引擎排序? 搜索引擎的目的是什么?搜索引擎如何赚钱?搜索引擎如何建立索引?网页抓取文本处理建…

[Docker实现测试部署CI/CD----Jenkins集成相关服务器(3)]

目录 7、 Jenkins 集成 SonarQubeJenkins 中安装 SonarScanner下载移动修改配置文件 8、Jenkins配置SonarQube安装插件添加SonarQube添加 SonarScanner 9、Jenkins集成目标服务器 7、 Jenkins 集成 SonarQube Jenkins 中安装 SonarScanner SonarScanner 是一种代码扫描工具&am…

express学习笔记6 - 用户模块

新建router/user.js const express require(express) const routerexpress.Router() router.get(/login, function(req, res, next) {console.log(/user/login, req.body)res.json({code: 0,msg: 登录成功})})module.exportsrouter 在router/user.js引入并使用 const us…

Mybatis ,Mybatis-plus列表多字段排序,包含sql以及warpper

根据 mybatis 根据多字段排序已经wrapper 根据多字段排序 首先根据咱们返回前端的数据列来规划好排序字段 如下: 这里的字段为返回VO的字段,要转换成数据库字段然后加入到排序中 示例,穿了 surname,cerRank 多字段,然后是倒序 false 首先创建好映射&am…

从零搭建一个react + electron项目

最近打算搭建一个react electron的项目,发现并不是那么傻瓜式 于是记录一下自己的实践步骤 通过create-react-app 创建react项目 npx create-react-app my-app 安装electron依赖 npm i electron -D暴露react项目的配置文件(这一步看自己需求&#xff0c…

【LeetCode】5. 最长回文串

题目链接 文章目录 1. 思路讲解2. 代码实现 1. 思路讲解 与求回文子串思路差别不大 在做这道题目之前,可以先做一下另一道回文子串的题目,如果会了那道求回文子串的题目,这道题基本上也就会了。 回文子串的题解在这里 它也就是求出每一个回…

Eureka 学习笔记2:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…

Linux中的file命令:查看文件类型

2023年8月1日&#xff0c;周二上午 目录 简要说明使用方法MIME类型举例说明 简要说明 在Linux中&#xff0c;file命令用于识别文件类型。 file命令可以识别各种类型的文件&#xff0c;包括普通文件、目录、符号链接、设备文件、压缩文件、二进制可执行文件等。 它是一个非常…

防火墙监控工具

防火墙监控是跟踪在高效防火墙性能中起着关键作用的重要防火墙指标&#xff0c;防火墙监控通常应包括&#xff1a; 防火墙日志监控防火墙规则监控防火墙配置监控防火墙警报监控 防火墙监控服务的一个重要方面是它应该是主动的。主动识别内部和外部安全威胁有助于在早期阶段识…

arm 函数栈回溯

大概意思就是arm每个函数开始都会将PC、LR、SP以及FP四个寄存器入栈。 下面我们看一下这四个寄存器里面保存的是什么内存 arm-linux-gnueabi-gcc unwind.c -mapcs -w -g -o unwind&#xff08;需要加上-mapcs才会严格按照上面说的入栈&#xff09; #include <stdio.h> …

Rpc异步日志模块

Rpc异步日志模块作用 在一个大型分布式系统中&#xff0c;任何部署的分布式节点都可能发生崩溃&#xff0c;试想如果用普通的办法&#xff0c;即先排查哪个节点down掉了&#xff0c;找到down掉的节点后采取调试工具gdb调试该节点&#xff0c;进而排查宕机的原因。这中排查方法…

文心一言 VS 讯飞星火 VS chatgpt (70)-- 算法导论6.5 9题

九、请设计一个时间复杂度为 (n lgk)的算法&#xff0c;它能够将 k 个有序链表合并为一个有序链表&#xff0c;这里 n 是所有输入链表包含的总的元素个数。(提示:使用最小堆来完成 k 路归并。 文心一言&#xff1a; 要设计一个时间复杂度为 O(n log k) 的算法&#xff0c;将 …

leetcode----JavaScript 详情题解(1)

目录 2618. 检查是否是类的对象实例 2619. 数组原型对象的最后一个元素 2620. 计数器 2621. 睡眠函数 2622. 有时间限制的缓存 2623. 记忆函数 2625. 扁平化嵌套数组 2626. 数组归约运算 2627. 函数防抖 2618. 检查是否是类的对象实例 请你编写一个函数&#xff0c;…

Python 程序设计入门(001)—— 安装 Python(Windows 操作系统)

Python 程序设计入门&#xff08;001&#xff09;—— 安装 Python&#xff08;Windows 操作系统&#xff09; 目录 Python 程序设计入门&#xff08;001&#xff09;—— 安装 Python&#xff08;Windows 操作系统&#xff09;一、下载 Python 安装包二、安装 Python三、测试&…

Android四大组件之服务

为什么要使用服务呢&#xff1f; 从上面的文字说&#xff0c;我们知道这个服务是用于执行长期后台运行的操作。有些时候&#xff0c;我们没有界面&#xff0c;但是程序仍然需要工作。比如说&#xff0c;我们播放音乐&#xff0c;在后台播放音乐。比如说&#xff0c;我们下载任…

SpringBoot内嵌的Tomcat:

SpringBoot内嵌Tomcat源码&#xff1a; 1、调用启动类SpringbootdemoApplication中的SpringApplication.run()方法。 SpringBootApplication public class SpringbootdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootdemoApplicat…

机器学习十大经典算法

机器学习算法是计算机科学和人工智能领域的关键组成部分&#xff0c;它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法&#xff0c;其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法&#xff0c;每种算法都在特定的领…