Nginx学习教程(基础篇)

news2024/12/27 12:53:22

目录

一、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/html

mkdir -p www

mkdir -p void

cd www

vi index.html

cd void

vi index.html

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

cd /usr/local/nginx/conf

vi 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.coloradmin.cn/o/825800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无脑入门pytorch系列(一)—— nn.embedding

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…

云安全攻防(四)之 云原生技术

云原生技术 容器技术 容器与虚拟化 虚拟化(Virtualization)和容器(Container)都是系统虚拟化的实现技术,可实现系统资源的”一虚多“共享。容器技术可以理解成一种”轻量的虚拟化“方式,此处的”轻量“主…

工业机器人运动学与Matlab正逆解算法学习笔记(用心总结一文全会)(四)——雅可比矩阵

文章目录 建立DH模型机器人正运动学机器人逆运动学机器人雅可比矩阵△ 机器人速度雅可比矩阵○ 雅可比矩阵相关概念○ 以二连杆平面机器人举例说明雅可比矩阵 △ 机器人雅克比矩阵与速度分析△ 雅克比矩阵的奇异性○ 机器人的奇异位形(奇异形位、奇异点)…

Docker中容器数据卷

容器数据卷 一.什么是容器数据卷二.使用数据卷方式一:直接使用命令来挂载 -v 三.具名和匿名挂载 一.什么是容器数据卷 docker理念 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们的容器删除,数据就会…

一文吃透UML图(海贼版)

先来简单的说一说什么是UML? UML是统一建模语言,是用来设计软件的可视化建模语言,它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息,UML从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图…

spring boot 服务健康检测返回OUT_OF_SERVICE,导致服务无法成功注册到consul

一、背景 健康检测接口返回OUT_OF_SERVICE curl -X GET http://192.168.5.53:8085/mgm/health{"status":"OUT_OF_SERVICE"}从日志启动看,没有任何报错信息;而且jvm进程也启动成功。 关键的一点信息是,服务的swagger地…

docker 资源限制

目录 1、CPU使用率 2、CPU共享比例 3、CPU周期限制 4、CPU核心限制 5、CPU 配额控制参数的混合案例 6、内存限制 7、Block IO 的限制 8、限制bps 和iops docker资源限制 Docker容器技术底层是通过Cgroup(Control Group 控制组)实现容器对物理资…

iOS多线程——pthread、NSThread

pthread NSThread 多线程的常见方案pthreadpthread 简介pthread 使用方法pthread 其他相关方法 NSThread创建、启动线程线程相关用法线程状态控制方法线程之间的通信NSThread 线程安全和线程同步NSThread 非线程安全NSThread 线程安全 多线程的常见方案 技术方案特点使用语言线…

[企业权限管理项目](二)环境搭建

数据库与表结构 oracle Oracle 为每个项目创建单独user,oracle数据表存放在表空间下,每个用户有独立表空间 创建用户及密码 语法[创建用户]: create user 用户名 identified by 口令[即密码]; 例子: create user tes…

bigemap在草原行业的应用案例

一.为什么选择Bigemap 1.使用软件一般都用于套坐标以及空间规划图,方便于项目选址和居民建房报建 2.在卫星图上找到用地范围,然后打点,导出点位范围的2000坐标,用于汇报出图 3.CGCS2000坐标系通过矢量转换转成地方坐标系

Noah-MP陆面过程模型建模方法与站点、区域模拟教程

详情点击链接:Noah-MP陆面过程模型建模方法与站点、区域模拟教程 陆面过程的内容(陆表能量平衡、水循环、碳循环等),陆面过程研究的重要性。 图 1 陆面过程主要研究内容 陆面过程模型的发展、基本原理、常用陆面过程模型等。 图…

VR虚拟仿真技术在道路桥梁中有哪些具体应用?

虚拟现实(VR)是一种新兴的技术,可以为桥梁工程提供许多应用场景。以下是一些可能的应用场景: 1.桥梁设计和模拟 VR元宇宙可以用于桥梁的设计和模拟。工程师可以使用VR技术来创建桥梁的三维模型,并对其进行测试和优化。这可以帮助工程师更好地…

C# Blazor 学习笔记(7):组件嵌套开发

文章目录 前言相关资料组件嵌套组件模板RenderFragment 意义传统前端样式组件化css 前言 我们在组件化一共有三个目的。 不用写CSS不用写html不用写交互逻辑 简单来说就是Java常说的约定大于配置。我们只需要必须的参数即可,其它的都按照默认配置。我们不需要关系…

intel advisor安装与使用

前言 没有搜到相关教程,所以自己写一篇,如有不足请指正 安装 建议直接安装完整工具包 Intel oneAPI Base Toolkit 注意先安这个 https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html linux指令 wget http…

让这些ai绘画神器为你打开创作灵感的大门

在一个小镇上,住着一位名为奥斯卡的艺术家。他的画作仿佛有生命般跃动,每一幅都散发着神秘的魔力。然而,奥斯卡却感到自己的创造力有些枯竭。他渴望找到一种新的灵感源泉,以挑战自己的创作瓶颈。这时,他听说了ai绘画生…

大数据与okcc呼叫中心融合的几种方式

在实际的生产实践中,为提高营销效率,避免骚扰大众,很多呼叫中心业务会与大数据平台进行合作,进行精准营销。 买卖数据是非法的,大数据平台方并不会提供直接的数据,一般情况下,提供的数据都是脱…

马上解锁 StarRocks 存算分离,降本增效无需等!

StarRocks 于 4 月底正式发布了 3.0 版本,该里程碑版本带来了大家期盼已久的新特性--存算分离。此新功能一推出,立即受到社区热情追捧,用户纷纷开始在自己的业务中评估和测试存算分离效果。从芒果TV、聚水潭、网易邮箱、浪潮、天道金科等数十…

【技巧】学术Poster的制作要点,详细!

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 内容零零散散均收集自网上,有点杂忘了引用。 内容技巧 https://posts.careerengine.us/p/5dac3e628c131b0541dd9171 展示内容包括(将信息分块) 可选择性删减,注意…

分享可以免费使用的5款好用小工具

​ 最近后台收到好多小伙伴的私信,今天继续推荐五款小工具,都是免费使用的,大家可以去试试看。 剪贴板管理器——ClipX ​ ClipX是一款微型剪贴板管理器,可以记录你复制的文本和图像,并让你随时通过快捷键或鼠标菜单…

git面试题

文章目录 git经常用哪些指令git出现代码冲突怎么解决你们团队是怎么管理git分支的如何实现Git的免密操作 git经常用哪些指令 产生代码库 新建一个git代码库 git init下载远程项目和它的整个代码历史 git clone 远程仓库地址配置 显示配置 git config --list [--global]编辑配置…