nginx的学习(一):nginx的基本概念和反向代理

简介

nginx的基本概念,以及反向代理的配置

nginx

是一个高性能的http和反向代理web服务器及电子邮件(IMAP/POP3/SMTP)代理服务器。

相关的基本概念

正向代理

客户端配置代理服务器,通过代理服务器访问互联网。

反向代理

客户端不需要配置,访问反向代理服务器,由反向代理服务器去访问真实的服务器,获取数据并返回,它代理的是真实服务器,隐藏了真实服务器的ip地址,对外暴露代理服务器的地址。

负载均衡

把请求分发到多个服务器,以达到提高系统性能和实现高可用性的目的。

动静分离

把动态页面和静态页面交由不同的服务器来解析,以加快网站的解析速度,也可降低服务器的压力。

安装nginx

在linux上安装nginx,我用的是vmware虚拟机,使用finalshell连接。需要先安装相关的依赖。

安装pcre

下载pcre:

 wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

在这里插入图片描述
解压文件: tar -xvf pcre-8.37.tar.gz
在这里插入图片描述
进入安装目录,执行./configure
再执行make && make install 进行编译并安装
使用 pcre-config --version查看是否安装成功
在这里插入图片描述

安装zlib
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装nginx

把下载好的nginx安装包上传到linux上。
使用ar -xvf nginx-1.12.2.tar.gz 进行解压。
在这里插入图片描述
进入nginx目录,执行./configure
执行make && make install 进行编译并安装
安装成功后,会在/usr/local目录下有一个nginx
在这里插入图片描述

启动nginx

进入/usr/local/nginx/sbin目录,执行./nginx
使用ps -ef | grep nginx查看是否有nginx的进程
在这里插入图片描述
在Windows上,访问nginx,http://虚拟机ip地址:80
在这里插入图片描述
访问不到的话可能是防火墙的问题,关闭防火墙 systemctl stop firewalld.service

nginx常用命令

进入/usr/local/nginx/sbin目录中执行命令

  • ./nginx -v:查看nginx的版本
  • ./nginx -s stop: 关闭nginx
  • ./nginx:启动nginx
  • ./nginx -s reload:重新加载nginx

nginx的配置文件

配置文件是 /usr/local/nginx/conf 目录下的nginx.conf。

配置文件的组成

由三部分组成:

  • 全局块
  • events块
  • http块
全局块

如下图,配置文件开头到events之前的配置。设置一些影响nginx服务器整体运行的配置指令,包括:

  • 运行nginx服务器的用户(组)
  • 允许生成的worker process数
  • 进程pid存放路径
  • 日志存放路径
  • 配置文件的引入

在这里插入图片描述
解析:worker_processes 1;设置了nginx服务器并发处理服务的相关配置,值越大支持的并发处理量就越多,会受硬件软件等的制约。设置成和cpu核数相同比较好。

events块

设置nginx服务器与用户的网络连接,包括:

  • 是否开启对多work process下的网络连接进行序列化
  • 是否允许同时接受多个网络连接
  • 选择哪种事件驱动模型来处理连接请求
  • 每个work process可以同时支持的最大连接数
http块

http块分为http全局块,server块(可多个)。
server块又分为全局server块,location块(可多个)

最常用的配置块,包括:

  • 代理
  • 缓存
  • 日志定义
  • 第三方模块的配置

http全局块
可以配置:

  • 文件引入
  • mine-type定义
  • 日志自定义
  • 连接超时时间
  • 单链接请求数上限

server块
和虚拟主机相关。虚拟主机,可以看成事一台独立的硬件主机,可以节省互联网服务器硬件成本。每个http块可以有多个server块,每个server块可以看成事一个虚拟主机。

全局server块
常用于配置:

  • 虚拟主机的监听配置
  • 虚拟主机的名称
  • 虚拟主机的ip

location块
每个server块也包含多个location块。作用是基于nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理,如:

  • 地址定向
  • 数据换存
  • 应答控制
  • 第三方模块的配置

大概的结构就是:
在这里插入图片描述

反向代理

要实现在浏览器上输入www.christ.com,会跳转到linux上的Tomcat上。

安装Tomcat

下载Tomcat

 wget --no-check-certificate http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz

使用 tar -xvf apache-tomcat-7.0.70.tar.gz解压Tomcat
在这里插入图片描述

启动Tomcat
进入到/usr/src/apache-tomcat-7.0.70/bin目录下,运行./startup.sh
在这里插入图片描述
可以使用 cat /usr/src/apache-tomcat-7.0.70/logs/catalina.out查看启动日志。

外部访问Tomcat
http://linux的ip地址:8080
在这里插入图片描述

跳转过程

浏览器输入域名www.christ.com,首先会先到本地的host文件中有没有相应的配置,如果有就按配置执行,如果没有,就到网络上找dns域名服务器,根据配置转发到反向代理服务器上,再由反向代理服务器转发到Tomcat服务器。

修改本地的host文件

进行域名和ip地址的对应关系的配置
在这里插入图片描述
修改host文件,在文件末尾添加
linux的ip地址 www.christ.com
注意:修改后可能不能保存,需要cmd以管理员身份修改。

外部尝试访问www.christ.com:8080,可以访问到Tomcat

反向代理设置

在nginx进行请求转发的配置
修改nginx的配置文件,vim /usr/local/nginx/conf/nginx.conf

修改配置文件中的server块中的server_name,改成linux的ip地址;
修改location,加上 proxy_pass http://127.0.0.1:8080;
即请求到了linux的ip地址,会被转发到匹配的location中的proxy_pass配置的地址。

外部访问www.christ.com
在这里插入图片描述
注意:修改了nginx的配置文件,是要重启nginx的。

反向代理例子2

使用nginx反向代理,根据访问的路径跳转到不同的端口服务上,nginx监听端口为9001.

准备两个Tomcat

创建两个文件夹Tomcat8080,Tomcat8081。里面存放解压后的Tomcat。修改Tomcat8081里面的Tomcat的端口号,进入目录/usr/src/tomcat8081/apache-tomcat-7.0.70/conf,修改server.xml,改三个地方
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动Tomcat8080,8081
外部可以访问linux的ip地址:8080linux的ip地址:8081

在这里插入图片描述

在Tomcat中添加页面

在 Tomcat8081文件夹中的/usr/src/tomcat8081/apache-tomcat-7.0.70/webapps目录下使用mkdir edu创建目录文件,在这个edu中vim a.html编写一个html文件,内容是:

<h1>8081</h1>

外部尝试访问这个a.html文件,linux的ip地址/edu/a.html
在这里插入图片描述

同样的,在 Tomcat8080文件夹中的/usr/src/tomcat8080/apache-tomcat-7.0.70/webapps目录下使用mkdir vod创建目录文件,在这个vod中vim a.html编写一个html文件,内容是:

<h1>8080</h1>

外部尝试访问这个a.html文件,linux的ip地址/vod/a.html
在这里插入图片描述

修改nginx的配置文件

/usr/local/nginx/conf这个目录下的nginx.conf文件中,新添加一个server。

          server {listen 9001;server_name linux的ip地址;location ~ /edu/ {proxy_pass http://localhost:8081;}   location ~ /vod/ {proxy_pass http://localhost:8080;}}  

重启nginx
访问http://linux的ip地址:9001/edu/a.html
在这里插入图片描述
访问http://linux的ip地址:9001/vod/a.html
在这里插入图片描述

location匹配规则

是使用正则表达式匹配的路径的。

  • =:精确匹配
  • ~:包含匹配字段,区分大小写
  • ~*:包含匹配字段,不区分大小写
  • ^~:使用和路径匹配精度最高的匹配字段,不再使用其他精度低的正则表达式匹配字段。

注意:如果使用了正则表达式,则必须要带~ 或者~* 标识、

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

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

相关文章

【8月EI会议推荐】第四届区块链技术与信息安全国际会议

一、会议信息 大会官网&#xff1a;http://www.bctis.nhttp://www.icbdsme.org/ 官方邮箱&#xff1a;icbctis126.com 组委会联系人&#xff1a;杨老师 19911536763 支持单位&#xff1a;中原工学院、西安工程大学、齐鲁工业大学&#xff08;山东省科学院&#xff09;、澳门…

Xinstall揭秘:一键拉起服务如何助力App提升用户体验和下载转化率

在移动互联网时代&#xff0c;App的运营和推广显得尤为重要。而在这个过程中&#xff0c;如何提升用户体验和下载转化率成为了每个App运营者关注的焦点。今天&#xff0c;我们就来揭秘一下Xinstall的一键拉起服务&#xff0c;看看它是如何助力App提升用户体验和下载转化率的。 …

Java之多线程-同步代码块

线程同步 Java中提供了线程同步的机制&#xff0c;来解决上述的线程安全问题。 Java中实现线程同步&#xff0c;主要借助synchronized关键字实现。 线程同步方式&#xff1a; 同步代码块 同步方法 锁机制 1&#xff09;同步代码块 格式&#xff1a; //Object类及其子类…

Flink笔记整理(五)

Flink笔记整理&#xff08;五&#xff09; 文章目录 Flink笔记整理&#xff08;五&#xff09;七、处理函数&#xff08;最底层最常用最灵活&#xff09;7.1基本处理函数&#xff08;ProcessFunction&#xff09;处理函数的功能和使用ProcessFunction解析 7.2按键分区处理函数&…

数据结构 Day2 链式存储

线性表的链式存储 解决顺序存储的缺点&#xff0c;插入和删除&#xff0c;动态存储问题。特点&#xff1a;线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素&#xff0c;存储单元可以是连续的&#xff0c;也可以不连续。可以被存储在任意内存未被占用的位置上…

JavaScript Let

ECMAScript 2015 ES2015 引入了两个重要的 JavaScript 新关键词&#xff1a;let 和 const。 这两个关键字在 JavaScript 中提供了块作用域&#xff08;Block Scope&#xff09;变量&#xff08;和常量&#xff09;。 在 ES2015 之前&#xff0c;JavaScript 只有两种类型的作…

【数据库】联合索引在b+树如何存储

什么是联合索引&#xff1f; 联合索引是一种数据库索引类型&#xff0c;它允许你基于表中两个或多个列的组合来创建索引。这种索引可以提高数据库查询的性能&#xff0c;特别是当查询条件涉及到这些列时。 如&#xff1a; create index id_name_age out users(name,age) 索引…

算法刷题day20|回溯:39. 组合总和、40. 组合总和 II、131. 分割回文串

39. 组合总和 回溯 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex) {if (sum > target) {return;}if (sum target) {result.push…

C#、Net6、WebApi报表方案

目录 1 Pdf表单方案 1.1出现如下错误提示: 1.2 字体路径使用 2 Docx报表模板方案 2.1 pdf方案缺陷 2.2 解决方案 3 Spire.Doc报表方案 3.1 Docx方案缺陷 3.2 解决方案 4 插入复选框 5 WebApi文件流下载接口 6 软件获取方式 1 Pdf表单方案 使用【Adobe Acrobat P…

Python 爬虫入门(一):从零开始学爬虫 「详细介绍」

Python 爬虫入门&#xff08;一&#xff09;&#xff1a;从零开始学爬虫 「详细介绍」 前言1.爬虫概念1.1 什么是爬虫&#xff1f;1.2 爬虫的工作原理 2. HTTP 简述2.1 什么是 HTTP&#xff1f;2.2 HTTP 请求2.3 HTTP 响应2.4 常见的 HTTP 方法 3. 网页的组成3.1 HTML3.1.1 HTM…

掀桌子了!原来是咱们的大屏设计太酷,吓着前端开发老铁了

掀桌子了&#xff01;原来是咱们的大屏设计太酷&#xff0c;吓着前端开发老铁了 艾斯视觉观点认为&#xff1a;在软件开发的世界里&#xff0c;有时候创意和设计的火花会擦得特别亮&#xff0c;以至于让技术实现的伙伴们感到既兴奋又紧张。这不&#xff0c;我们的设计团队刚刚…

SpringBoot入门实战:SpringBoot整合Shiro

1.背景介绍 SpringBoot是一个用于快速开发Spring应用程序的框架。它的核心是对Spring框架的一层封装&#xff0c;使其更加简单易用。SpringBoot整合Shiro是一种将SpringBoot与Shiro整合的方法&#xff0c;以实现身份验证和授权功能。 Shiro是一个强大的Java安全框架&#xff0c…

matlab笔记 - 最小二乘法拟合直线的原理与实现

最小二乘法拟合直线原理与实现 一、引言二、原理概述1. 建模思路2.误差函数3.求解最优参数 三、matlab实现最小二乘法拟合直线1.直接代码实现2.MATLAB内置函数实现 四、扩展统计学与回归分析经济学工程学图像处理机器学习 一、引言 最小二乘法&#xff08;Least Squares Metho…

鸿蒙APP架构及开发入门

1.鸿蒙系统 1.1 什么是鸿蒙 鸿蒙是一款面向万物互联时代的、全新的分布式操作系统。 在传统的单设备系统能力基础上&#xff0c;鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机、PC、智能音箱、耳机、…

超燃!纯AI生成《泰坦尼克号》大片!浙大阿里发布MovieDreamer:超长电影生成“梦工厂“

论文链接&#xff1a;https://arxiv.org/pdf/2407.16655 项目主页&#xff1a;https://aim-uofa.github.io/MovieDreamer/ github链接&#xff1a;https://github.com/aim-uofa/MovieDreamer 亮点直击 MovieDreamer&#xff0c;一个新颖的分层框架&#xff0c;将自回归模型与扩…

正则表达式与文本处理

目录 一、正则表达式 1、正则表达式定义 1.1正则表达式的概念及作用 1.2、正则表达式的工具 1.3、正则表达式的组成 2、基础正则表达式 3、扩展正则表达式 4、元字符操作 4.1、查找特定字符 4.2、利用中括号“[]”来查找集合字符 4.3、查找行首“^”与行尾字符“$”…

前端江湖:从菜鸟到大侠的修炼手册

在这个数字编织的梦幻世界里&#xff0c;前端&#xff0c;这个听起来就带着几分仙气与神秘感的词汇&#xff0c;实则是每一位互联网探险家手中的魔法杖。它不仅连接着代码的冰冷逻辑与用户的炽热情感&#xff0c;更在无数次的点击与滑动间&#xff0c;绘制出一幅幅绚丽多彩的交…

通过IP获取对应的经纬度地区

背景 项目现在要通过IP获取对应的地区和经纬度。后面会根据经纬度在地图上展示 直接用大佬给出的ip-info 这是大佬给的项目地址 https://gitee.com/jthinking/ip-info这是运行实例 感谢大佬打赏 ![在这里插入图片描述]

怎样在 Nginx 中配置基于请求客户端指纹识别数据的路由?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 怎样在 Nginx 中配置基于请求客户端指纹识别数据的路由 怎样在 Nginx 中配置基于请求客户端指纹识别数据的路由 在当今数字化的世界中&#xff0c;网站和应用程…