当前位置: 首页 > news >正文

Nginx配置web服务器及部署反向代理

Nginx配置web服务器及部署反向代理

      • 配置web服务器
        • location语法
      • 部署反向代理
        • 代理转发

配置web服务器

项目部署到linux上的静态文件代理给Nginx处理。当访问服务器IP时,可以自动返回静态文件主页。

主配置文件中server块对应的次配置include /etc/nginx/conf.d/*.conf,也就是/etc/nginx/conf.d/目录下的配置文件,可以在该目录下新增一个autotpsite.conf配置文件,执行命令:vim /etc/nginx/conf.d/autotpsite.conf

注:主配置文件中server块默认监听端口为80,若次配置文件中server块监听端口与主配置文件中相同,会产生冲突

server {listen       8080;listen       [::]:8080;server_name  _;# root         /data/project/autotpsite/dist;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}       
}

其中server_name下一行中的root /data/project/autotpsite/dist;这里配置的静态文件根目录,就是项目静态文件所在的目录

访问 http://127.0.0.1:8080/index.html 对应的文件目录是/data/project/autotpsite/dist/index.html

但是一般情况下,不这样进行配置,而是放到location块

server {listen       8080;listen       [::]:8080;server_name  _;# root         /data/project/autotpsite/dist;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}location / {root   /data/project/autotpsite/dist;  }      
}

location语法

相对匹配:

location /path/ {root   /data/software/static;  
}

文件路径等于 root + location/data/software/static 拼接 /path/,如访问 http://ip/path/ 对应的文件目录/data/software/static/path/

举例:

location / {root   /data/project/autotpsite/dist;  
}

访问 http://127.0.0.1:8080/index.html 对应的文件目录是/data/project/autotpsite/dist/index.html

绝对匹配:

location /path/ { alias   /data/software/static/; 
}

文件路径等于alias对应目录,与location无关, 目录必须以 / 结尾,如访问 http://ip/path/ 对应的文件目录 /data/software/static/

举例:

location /static/ {alias   /data/project/autotpsite/dist/;  
}

访问 http://127.0.0.1:8080/static/index.html 对应的文件目录是/data/project/autotpsite/dist/index.html,也就是说,访问路径里需要加上路由static才能够访问

alias 与 root 是二选一的关系 ,不能并存

location指令说明:

功能:用于匹配URL,语法如下:

1= :用于不含正则表达式的 URL 前,要求请求字符串与 URL 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 URL 包含正则表达式,并且区分大小写。
3、~*:用于表示 URL 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 URL 前,要求 Nginx 服务器找到标识 URL 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识

部署反向代理

反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

在这里插入图片描述

访问服务器的时候,可以发现只能返回静态文件,而静态文件中的Ajax请求全部失效了,接口并没有返回任何内容

原因就是 web 服务没有代理app服务,app服务是由uWSGI代理的。所以我们要做的就是将发送app服务的请求转给 uWSGI就可以了。

在Django项目的settings.py配置文件中DEBUG = True,debug模式还是为TRUE,是通过urls.py文件中配置的静态文件目录去访问静态文件,这里需要将静态文件的访问交由Nginx处理

from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path,include# from sqtp import urls
urlpatterns = [path('admin/', admin.site.urls),path('api/',include('sqtp.urls')),
]+ static("/",document_root='dist')

而对应api/这个接口,也交由Nginx配置反向代理,通过Nginx再转发给uWSGI代理

代理转发

autotpsite.conf配置文件进行编辑,在Nginx中配置proxy_pass代理转发

这里只有一个服务器,也就是说反向代理服务器和目标服务器是同一个服务器,所以配置proxy_pass代理转发为127.0.0.1,而Django项目的端口为8888,所以proxy_pass http://127.0.0.1:8888

server {listen       8080;listen       [::]:8080;server_name  _;# root         /data/project/autotpsite/dist;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}location / {root   /data/project/autotpsite/dist;  }#location /api/ {#    proxy_pass  http://127.0.0.1:8888;#}location /api/ {include       uwsgi_params;uwsgi_pass     127.0.0.1:8888; # 此方式需要 uwsgi采用socket连接方式}
}

Django项目的app服务是由uWSGI服务器代理的,这里可以不使用http协议,而是采用socket连接方式,这里uwsgi_pass代理转发对应的是一个二进制的socket协议

更新uWSGI服务配置

[uwsgi]
chdir =./
// 项目根目录,配置文件处于项目根目录,因此设置为相对路径即可,复用性更高
module = autotpsite.wsgi:application
// 指定wsgi模块下的application对象
socket = 0.0.0.0:8888
//Nginx使用uwsgi_pass做方向代理时 需要设置成socket
master = true
// 主进程
pidfile = uwsgi8888.pid
// pid 文件,用于脚本启动,停止该进程
daemonize = uwsgi_server.log
// 日志文件
enable-threads = true
// 新增配置--允许多线程
buffer-size = 40960
// 设置请求头最大字节数,用于socket模式

location这里也可以使用正则的方式匹配URL,同时支持api/jira/两个url

location ~/(api/|jira/) {include       uwsgi_params;uwsgi_pass     127.0.0.1:8888;
}

相关文章:

Nginx配置web服务器及部署反向代理

Nginx配置web服务器及部署反向代理配置web服务器location语法部署反向代理代理转发配置web服务器 项目部署到linux上的静态文件代理给Nginx处理。当访问服务器IP时,可以自动返回静态文件主页。 主配置文件中server块对应的次配置include /etc/nginx/conf.d/*.conf…...

mvvm和mvc

mvvm是model-view-viewmodel的缩写,前端开发的架构模式 m: model:模型,指的是数据和交互业务逻辑 v: view:视图,用户看到的ui界面 vm: viewmodel:视图模型&#xff0…...

JavaScript while 循环

JavaScript while 循环的目的是为了反复执行语句或代码块。只要指定条件为 true,循环就可以一直执行代码块。while 循环while 循环会在指定条件为真时循环执行代码块。语法while (条件){需要执行的代码 }实例本例中的循环将继续运行,只要变量 i 小于 5&a…...

CMU15-445 Project.0总结

在线测试 本地测试 Project #0 - C Primer 以下是Project #0的网址,2022FALL的Project #0本质上是实现一棵字典树,关于字典树的相关内容可以参考C实现字典树。 在本题中,为了存储对应着字符串的任意类型值,题目设计了一个Tri…...

计算机网络题库---错题本

(一)老生常谈 第一章: 1.什么是计算机网络?其主要功能是什么? 解答: 利用通信设备和线路,将分布在地理位置不同的、功能独立的多个计算机系统连接起来,以功能完善的网络软件实现网…...

【react】react创建项目与引入AntD组件库:

文章目录一、初始化项目:【1】创建项目【2】暴露项目配置文件【3】安装依赖【4】配置less二、快捷键:【1】rcctab三、安装AntD组件库:【1】安装【2】index.js【3】问题:【4】效果:一、初始化项目: 【1】创…...

hook与mixin

看完vue3就开始看vue3的源码,表示很懵~ 刚把rollup打包搞完,这不响应式就接着来了!,还是写篇直接使用vue3的博客清清脑吧! 什么是hook、mixin? mixin: Vue2中多个组件内存在重复JS业务逻辑,使…...

【C语言】自定义类型

一、什么是自定义类型C语言提供了丰富的内置类型,常见的有int, char, float, double, 以及各种指针。除此之外,我们还能自己创建一些类型,这些类型称为自定义类型,如数组,结构体,枚举类型和联合体类型。二、…...

没有上司的舞会(C++,树形DP)

题目描述 某大学有 nnn 个职员,编号为 1…n1\ldots n1…n。 他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。 现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 ri…...

【java基础】static和final关键字的作用及其用法详解

文章目录static关键字静态字段静态方法静态代码块静态内部类final关键字final字段final方法final类static关键字 这个关键字表示静态的,用于不同地方意思不一样 静态字段 如果我们将其作用到字段上,那么该字段为类所拥有,我们使用new关键字…...

#集成学习#:bagging、boosting、stacking和blending

集成学习是一种机器学习方法,旨在提高单个模型的性能和鲁棒性。它基于这样一个假设:通过结合多个模型的预测结果,可以获得更好的预测性能,因为每个模型都可能从数据中提取不同的信息,因此他们的错误也可能是不同的&…...

NCRE计算机等级考试Python真题(一)

第一套试题1、关于数据的存储结构,以下选项描述正确的是A.数据所占的存储空间量B.数据在计算机中的顺序存储方式C.数据的逻辑结构在计算机中的表示D.存储在外存中的数据正确答案: C2、关于线性链表的描述,以下选项中正确的是A.存储空间不一定…...

C#协变逆变

文章目录协变协变接口的实现逆变里氏替换原则协变 协变概念令人费解,多半是取名或者翻译的锅,其实是很容易理解的。 比如大街上有一只狗,我说大家快看,这有一只动物!这个非常自然,虽然动物并不严格等于狗…...

算法设计与分析期末考试复习(四)

贪心算法(Greedy Algorithm) 找零钱问题 假设有4种硬币,面值分别为:二角五分、一角、五分和一分,现在要找给顾客六角三分钱,如何找使得给出的硬币个数最少? 首先选出1个面值不超过六角三分的最…...

qsort函数排序数据 and 模拟实现qosrt函数(详解)

前言:内容包括使用库函数qsort排序任意类型的数据,模拟实现qsort函数(冒泡排序的逻辑) 我们先了解qsort函数的语法:qsort函数默认按照升序排序数据 void qsort (void* base, size_t num, size_t size,int (*compar)(…...

Mysql视图,存储过程,触发器,函数以及Mysql架构

一,视图视图是基于查询的一个虚拟表 , 也就是将sql语句封装起来, 要用的时候直接调用视图即可, select语句查询的表称为基表, 查询的结果集称为虚拟表, 基本表数据发生了改变, 那么视图也会发生改变, 使用视图就是为了简化查询语句.1.CREATE VIEW view_admin AS SELECT * FROM…...

什么是线程死锁?如何解决死锁问题

死锁,一组互相竞争的资源的线程之间相互等待,导致永久阻塞的现象。 如下图所示: 与死锁对应的,还有活锁,是指线程没有出现阻塞,但是无限循环。 有一个经典的银行转账例子如下: 我们有个账户类…...

C语言几种判断语句简述

C 判断 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 fals…...

【python学习笔记】:SQL常用脚本(二)

11、四舍五入ROUND函数 ROUND ( numeric_expression , length [ ,function ] ) function 必须为 tinyint、smallint 或 int。 如果省略 function 或其值为 0(默认值),则将舍入 numeric_expression。 如果指定了0以外的值,则将截…...

【Linux】进程地址空间

文章目录🎪 进程地址空间🚀1.写时拷贝与虚拟地址🚀2.地址空间引入🚀3.地址空间的意义⭐3.1 虚拟地址寻址⭐3.2 虚拟地址意义🎪 进程地址空间 地址空间(address space)表示任何一个计算机实体所…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...