nginx 的 server 块配置解析

前后端分离(前端 + flask):

	# 阻止ip访问server {# default_server 是一个配置参数,用于指定当请求的域名(Host 头)没有匹配任何 server 块时,Nginx 应该使用哪个 server 块来处理这些请求。 listen 443 ssl default_server;server_name _; # 匹配所有未配置的域名或IP,这样设置了 default_server 的 server 块(即本块)就会处理所有未匹配的请求。ssl_certificate cert/证书.pem;  # 签名证书路径,相对路径、绝对路径都可以ssl_certificate_key cert/私钥.key;  # 私钥路经return 403;  # 返回禁止访问}# https配置模板server {# https的默认端口是443,只有把端口写成443,登录网站的时候才不需要写端口号listen 443 ssl;# [::] 是 IPv6 的通配符地址,表示监听所有可用的 IPv6 地址(类似于 IPv4 的 0.0.0.0)listen [::]:443 ssl;# Nginx 会先检查请求的域名是否与某个 server_name 精确匹配,# 如果没有精确匹配,会尝试使用通配符匹配。如果没有找到匹配的 server_name,Nginx 会将请求交给 default_server 的 server 块。server_name 这里写你的域名;# ssl配置,证书可以使用免费的Let's Encrypt生成,阿里云上也有,但是签名需要域名,# 不需要域名的可以自己使用 openssl 创建自签名证书,但是自签名证书不受信任ssl_certificate cert/证书.pem;  # 签名证书路径,nginx支持pem格式的证书ssl_certificate_key cert/私钥.key;  # 私钥路经# 启用ssl协议,强制使用 TLS 1.2 和 1.3 版本ssl_protocols TLSv1.2 TLSv1.3; # 启用加密套件,加密套件的顺序用冒号分隔。很重要,Nginx 会按照这个顺序选择一个加密套件ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';# 强制性要求浏览器在加密连接时优先使用 服务器端 的加密套件ssl_prefer_server_ciphers on;  # 会话缓存:会话缓存能够存储客户端和服务器之间建立的 SSL/TLS 会话,避免每次请求都重新建立完整的握手过程,从而提升性能,减少 CPU 使用。通常 1 MB 可以存储大约 4000 个会话。ssl_session_cache  shared:SSL:1m;  # 会话缓存时间:用于设置 SSL 会话缓存中会话的过期时间。在指定时间内,客户端可以重用之前缓存的会话,对于大多数网站,设置为 5m(5 分钟)到 10m(10 分钟)是合理的范围。ssl_session_timeout  5m;  # 向 HTTP 响应中添加自定义的 HTTP 头部信息。语法:add_header <header_name> <value> [always];# add_header 指令可以写在 http、server 或 location 块中,作用范围会逐级缩小。如果多个级别的 add_header 冲突,优先使用最具体(内层)的配置。# 强制客户端使用 HTTPS 访问,防止中间人攻击。# max-age=31536000:缓存 1 年。includeSubDomains:对子域生效。preload:允许加入浏览器 HSTS 预加载列表。# [always]: 默认情况下,add_header 只会在响应状态码为 200、204、206、301、302、303 或 304 时添加。如果加上 always 参数,头部会在所有响应中添加(包括错误状态码,如 404 或 500)。add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;# 只允许特定的 HTTP 方法。add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";# 限制加载资源的来源,防止恶意脚本注入。# default-src 'self' 仅允许加载本域的资源。如果你不熟悉域的概念就别用# script-src 'self' 'unsafe-inline'  限制脚本加载来源,仅允许本域和内联脚本。如果你不熟悉域的概念就别用# img-src 'self' data: 限制图片来源,仅允许本域和 data: 协议。add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; img-src 'self' data:;";# location 指令用于定义一个位置块,它根据请求的 URI 匹配特定的路径。# 前端代理,根路径指向静态文件location / {# 指定静态文件的根目录root   html/course;# 指定当请求为目录时,默认返回的页面index  index/index.html;}# 后端代理,将/api/开头的请求转发到后端服务器的 http://localhost:5000 上location /api/ {# proxy_pass 指定代理的后端服务器的地址。# 注意:http://localhost:5000/ 和 http://localhost:5000 所代表的url拼接规则是不一样的。自己去搜 proxy_pass 参数怎么用proxy_pass http://localhost:5000/;# proxy_set_header 用于设置转发给后端服务器的请求头部。# Host头部保持了原始请求的Host值。proxy_set_header Host $host;# X-Real-IP头部记录了原始客户端的IP地址。proxy_set_header X-Real-IP $remote_addr;# X-Forwarded-For头部是一个逗号分隔的列表,包含了从客户端到代理服务器的所有IP地址(包括客户端的IP地址)。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# X-Forwarded-Proto头部记录了原始请求使用的协议(如http或https)。proxy_set_header X-Forwarded-Proto $scheme;}# WebSocket 代理,我使用的是 flask_socketio,请根据实际情况修改匹配的urllocation /socket.io/ {proxy_pass http://localhost:5000;# 这里必须使用 http1.1 版本,因为1.1版本才是长连接proxy_http_version 1.1;# 设置 Upgrade 请求头,用于处理协议升级(从 HTTP 升级到 WebSocket)。proxy_set_header Upgrade $http_upgrade;# 强制将 Connection 设置为 "upgrade",以支持协议切换。proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 设置超时时间为 60 秒,用于保持 WebSocket 连接。proxy_read_timeout 60s;}# 404错误页面配置:当请求的文件不存在时,转入 /404.html 页面error_page  404              /404.html;# 匹配 /404 错误页面,=表示精确匹配location = /404.html {# 指定 404.html 页面的位置root /usr/share/nginx/html/404.html;}}

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

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

相关文章

Ubuntu 22.04.5 修改IP

Ubuntu22.04.5使用的是netplan管理网络&#xff0c;因此需要在文件夹/etc/netplan下的01-network-manager-all.yaml中修改&#xff0c;需要权限&#xff0c;使用sudo vim或者其他编辑器&#xff0c;修改后的内容如下&#xff1a; # Let NetworkManager manage all devices on …

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

这个错误信息表示系统找不到 vue-cli-service 命令&#xff0c;通常是因为 Vue 项目没有正确安装所需的依赖包。解决这个问题的步骤如下&#xff1a; 1. 确保你已经安装了依赖 首先&#xff0c;确保你在项目目录下&#xff0c;并且运行了以下命令来安装项目所需的依赖&#x…

解决virtualbox克隆ubuntu虚拟机之后IP重复的问题

找遍了国内论坛&#xff0c;没一个能解决该问题的&#xff0c;所以我自己写个文章吧&#xff0c;真讨厌那些只会搬运的&#xff0c;污染国内论坛环境&#xff0c;搜一个问题&#xff0c;千篇一律。 问题 操作系统版本为"Ubuntu 24.04 LTS" lennytest1:~$ cat /etc…

基于SpringBoot的宠物寄养系统的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

idea 开发Gradle 项目

在Mac上安装完Gradle后&#xff0c;可以在IntelliJ IDEA中配置并使用Gradle进行项目构建和管理。以下是详细的配置和使用指南&#xff1a; 1. 验证Gradle是否已安装 在终端运行以下命令&#xff0c;确保Gradle安装成功&#xff1a; gradle -v如果输出Gradle版本信息&#xff…

REST与RPC的对比:从性能到扩展性的全面分析

在微服务架构中&#xff0c;服务间通信是核心问题之一。常见的两种通信方式是REST&#xff08;Representational State Transfer&#xff09;和RPC&#xff08;Remote Procedure Call&#xff09;。它们各有优缺点&#xff0c;适用于不同场景。本文将从性能、扩展性、兼容性和开…

【Linux】:线程安全 + 死锁问题

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 1. 线程安全和重入问题&…

Mysql超详细安装配置教程(保姆级)

目录 一、下载Mysql 二、安装Mysql 三、配置Mysql 四、连接Mysql 五、部分疑难问题 一、下载Mysql 从官网下载MySQL&#xff0c;这里我选用的是Mysql8.0.34版本 二、安装Mysql 下载完成后直接双击进行安装&#xff0c;打开后的页面如下所示&#xff1a; “Developer Defa…

WFP Listbox绑定数据后,数据变化的刷新

Listbox绑定数据通过ItemsSource来的&#xff0c;如果绑定的是普通的List<数据>&#xff0c;不会自己刷新。 使用ObservableCollection集合 解决问题的方法: 将数组替换为 ObservableCollection ObservableCollection 是专为绑定设计的集合类型&#xff0c;可以通知 W…

JVM 及内存管理:掌握 Java 8 的内存模型与垃圾回收机制

Java 虚拟机&#xff08;JVM&#xff09;是运行 Java 程序的核心&#xff0c;它负责代码执行和内存管理。Java 8 引入了一些重要的内存模型和垃圾回收机制优化。本文将详细解析 JVM 的内存模型、垃圾回收机制&#xff0c;并配以相关图解&#xff0c;帮助你深刻理解 JVM 的工作原…

Maple软件的安装和使用

文章目录 1.前言说明2.我为什么要学习Maple3.软件的安装4.如何使用4.1基本的赋值语句4.2函数的定义4.3三个类型的书写介质 5.指数运算5.1使用面板5.2自己输入 6.对数的使用 1.前言说明 众所周知&#xff0c;我虽然是一名这个计算机专业的学生&#xff0c;但是我对于数学&#…

【超级详细】Vue3项目上传文件到七牛云的详细笔记

概述 继上一篇笔记介绍如何绑定七牛云的域名之后&#xff0c;这篇笔记主要介绍了如何在Vue3项目中实现文件上传至七牛云的功能。我们将使用Cropper.js来处理图像裁剪&#xff0c;并通过自定义组件和API调用来完成整个流程。 这里直接给出关键部分js代码&#xff0c;上传之前要先…

Sqoop的使用

每个人的生活都是一个世界&#xff0c;即使最平凡的人也要为他那个世界的存在而战斗。 ——《平凡的世界》 目录 一、sqoop简介 1.1 导入流程 1.2 导出流程 二、使用sqoop 2.1 sqoop的常用参数 2.2 连接参数列表 2.3 操作hive表参数 2.4 其它参数 三、sqoop应用 - 导入…

FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.4,SDP协议分析

SDP在4566 中有详细描述。 SDP 全称是 Session Description Protocol&#xff0c; 翻译过来就是描述会话的协议。 主要用于两个会话实体之间的媒体协商。 什么叫会话呢&#xff0c;比如一次网络电话、一次电话会议、一次视频聊天&#xff0c;这些都可以称之为一次会话。 那为什…

智简未来创新与简化的AI之路

附上链接地址&#xff1a;https://aint.top 在这个数字化迅速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;不仅仅是技术的前沿&#xff0c;它正在成为每个行业创新的核心推动力。作为一家专注于AI技术应用与创新的公司&#xff0c;智简未来旨在通过智能化的工具…

[极客大挑战 2019]HardSQL 1

看了大佬的wp&#xff0c;没用字典爆破&#xff0c;手动试出来的&#xff0c;屏蔽了常用的关键字&#xff0c;例如&#xff1a;order select union and 最搞的是&#xff0c;空格也有&#xff0c;这个空格后面让我看了好久&#xff0c;该在哪里加括号。 先传入1’ 1试试&#…

【Pytorch实用教程】深入了解 torchvision.models.resnet18 新旧版本的区别

深入了解 torchvision.models.resnet18 新旧版本的区别 在深度学习模型开发中,PyTorch 和 torchvision 一直是我们不可或缺的工具。近期,torchvision 对其模型加载 API 进行了更新,将旧版的 pretrained 参数替换为新的 weights 参数。本文将介绍这一变化的背景、具体区别,…

Elasticsearch名词解释

文章目录 1.什么是Elasticsearch?2.什么是elastic stack(ELK)?3.什么是Lucene?4.什么是文档(document)&#xff1f;5.什么是词条(term)&#xff1f;6.什么是正向索引&#xff1f;7.什么是倒排索引&#xff1f;8.ES中的索引(index)9.映射(Mapping)10.DSL11.elastcisearch与my…

网络渗透测试实验三:SQL注入

1.实验目的和要求 实验目的:了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL注入漏洞的基本方法;掌握网站配置。 系统环境:Kali Linux 2、Windows Server 网络环境:交换网络结构 实验工具: SqlMAP;DVWA 2.实验步骤 实验目…

SQL-Server链接服务器访问Oracle数据

SQL Server 链接服务器访问 Oracle 离线安装 .NET Framework 3.5 方法一&#xff1a;使用 NetFx3.cab 文件 下载 NetFx3.cab 文件&#xff0c;并将其放置在 Windows 10 系统盘的 C:Windows 文件夹中。 以管理员身份运行命令提示符&#xff0c;输入以下命令并回车&#xff1a; …