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

#nginx配置案例

示例配置 1:反向代理 + 负载均衡 + 缓存控制

http {# 定义后端服务器池,用于负载均衡upstream backend_servers {server backend1.example.com weight=3;  # 权重为3server backend2.example.com weight=1;  # 权重为1server backend3.example.com backup;    # 备份服务器}# 全局缓存配置,缓存静态文件的请求proxy_cache_path /data/nginx/cache keys_zone=my_cache:10m levels=1:2 max_size=1g;proxy_temp_path /data/nginx/temp;server {listen 80;server_name www.example.com;# 启用缓存和压缩功能gzip on;gzip_types text/css application/javascript image/png;# 处理静态文件location /static/ {root /var/www/static;  # 静态文件路径expires 30d;           # 缓存30天}# 处理动态请求,使用负载均衡和反向代理location / {proxy_pass http://backend_servers;  # 反向代理到后端服务器池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_cache my_cache;        # 启用缓存proxy_cache_valid 200 302 10m;  # 成功和重定向的缓存时间为10分钟proxy_cache_valid 404 1m;    # 404页面缓存1分钟}# 自定义错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root /var/www/errors;  # 错误页面路径}}
}

解析与说明:

关键字: http
作用: 定义HTTP服务器相关的全局配置,并且通过 upstream 来定义负载均衡的后端服务器池。proxy_cache_path 配置了缓存机制。
语法规则: http 块是Nginx的全局配置块之一,定义在该块中的配置会影响所有的 server 块。

upstream 块:
关键字: upstream
自定义名称: backend_servers(定义的服务器池的名称,供后续使用)
作用: 定义负载均衡的服务器集群。server backend1.example.com weight=3 表示 backend1 服务器的权重是3,而 backend2 的权重是1,表示更多请求会被分配给 backend1。server backend3.example.com backup 是备份服务器,仅在其他服务器不可用时启用。
语法规则: upstream 块中的服务器定义了负载均衡的后端服务器池,可以通过proxy_pass引用这些服务器。

proxy_cache_path 和 proxy_temp_path:
关键字: proxy_cache_path, proxy_temp_path
自定义名称: /data/nginx/cache 是缓存存储路径,my_cache 是缓存区域的名称。
作用: 定义缓存路径及缓存区。keys_zone=my_cache:10m 定义了一个名称为 my_cache 的缓存区域,大小为10MB,max_size=1g 限制缓存总大小为1GB。
语法规则: proxy_cache_path 定义了缓存的路径、区域名称及缓存大小限制等。

server 块:
关键字: server
自定义名称: www.example.com(域名)
作用: 定义虚拟主机,处理对 www.example.com 的请求。监听80端口。
语法规则: server 块用于定义虚拟主机,每个 server 块包含域名、端口以及与之相关的多个 location。

location /static/ 块:
关键字: location, root, expires
自定义路径: /static/(URL前缀),/var/www/static(静态文件路径)
作用: 处理 /static/ 路径下的请求。通过 root 指定静态资源的物理路径,expires 30d 指定浏览器缓存30天。
语法规则: location 块用于匹配请求的路径。root 定义该路径对应的文件系统目录。

location / 块:
关键字: location, proxy_pass, proxy_cache
自定义名称: backend_servers(引用的负载均衡服务器池)
作用: 处理动态请求,使用 proxy_pass 将请求转发给 upstream 定义的服务器池,使用 proxy_cache 对动态内容进行缓存。
语法规则: proxy_pass 用于将请求代理到后端服务器,proxy_cache 启用Nginx的缓存机制。

错误页面:
关键字: error_page, location
自定义路径: /50x.html(错误页面路径)
作用: 定义自定义的服务器错误页面。当出现 500, 502, 503, 504 错误时,返回 50x.html。
语法规则: error_page 用于自定义错误页面。location = 用于精确匹配该错误页面路径。

示例配置 2:Nginx 作为反向代理,支持 HTTPS 和 HTTP/2

http {# 定义后端服务器upstream backend {server 127.0.0.1:8080;}server {listen 443 ssl http2;  # 启用HTTPS和HTTP/2server_name www.example.com;# SSL 证书和密钥ssl_certificate     /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;# SSL安全配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# 开启Gzip压缩gzip on;gzip_types text/plain text/css application/javascript;# 代理请求到后端location / {proxy_pass http://backend;  # 代理到后端服务器proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 静态文件缓存location /static/ {root /var/www/html/static;expires 30d;}}# HTTP到HTTPS的重定向server {listen 80;server_name www.example.com;location / {rewrite ^ https://$server_name$request_uri? permanent;  # 301重定向到HTTPS}}
}

解析与说明:

upstream 块:
关键字: upstream
自定义名称: backend(后端服务器池名称)
作用: 定义反向代理的后端服务器池。此处仅有一台服务器,位于 127.0.0.1:8080。
SSL 和 HTTP/2 配置:

关键字: listen, ssl_certificate, ssl_certificate_key, ssl_protocols
自定义路径: /etc/nginx/ssl/example.com.crt 和 /etc/nginx/ssl/example.com.key(SSL证书和密钥路径)
作用: 在443端口启用HTTPS和HTTP/2协议,配置SSL证书及安全协议。
语法规则: listen 443 ssl http2 启用HTTPS和HTTP/2协议,ssl_protocols 指定支持的TLS版本。

HTTP到HTTPS重定向:
关键字: rewrite
内置变量: $server_name, $request_uri
作用: 将所有HTTP请求重定向到HTTPS版本。
语法规则:

rewrite ^ https://$server_name$request_uri? permanent; 使用 rewrite 指令进行正则匹配,并将请求重定向到HTTPS。

proxy_pass 指令:
关键字: proxy_pass, proxy_set_header
自定义名称: backend(定义的服务器池)
作用: 将客户端请求转发给定义的后端服务器池 backend,并保持客户端请求头信息(如IP、Host等)。

静态文件缓存:
关键字: expires
作用: 缓存 /static/ 路径下的文件,浏览器缓存时间设置为30天。
语法规则: expires 30d 指定缓存时长。

总结
关键字: server, upstream, location, proxy_pass, ssl_certificate, rewrite 等是Nginx中的关键字,具有特定的语法和作用。自定义名称: 如 backend_servers、my_cache、example.com 等名称和路径根据需求自定义,便于引用。语法规则: Nginx的语法基于块和指令的组合。块如 http、server、location 用于定义作用范围,指令如 proxy_pass、ssl_certificate、expires 用于定义具体行为。

解释重定向:

下面是对

rewrite ^ https://$server_name$request_uri? permanent;

这一 Nginx 指令中每个部分的详细解释。该指令用于将所有HTTP请求永久重定向(301重定向)到对应的HTTPS版本。

  1. rewrite:
    解释: Nginx的 rewrite 指令用于修改请求的URI或URL。它可以通过正则表达式来匹配请求的URL,并根据需要重定向到新的URL。
    作用: 告诉Nginx如何处理和重定向请求的URI。

  2. ^:
    解释: 这是一个正则表达式符号,表示字符串的开始。
    作用: 它告诉Nginx匹配请求的URL从头开始,即匹配所有请求的URI。这里 ^ 独立使用,表示匹配任意URI。

  3. https://:
    解释: 这是要重定向到的新URL的协议部分。https:// 指定重定向到HTTPS协议,强制将请求从HTTP切换到HTTPS。
    作用: 将原始的HTTP请求转换为HTTPS请求。

  4. $server_name:
    解释: 这是Nginx中的一个内置变量,表示当前请求的服务器名称(即域名)。该变量在每个请求中自动填充,例如 www.example.com。
    作用: 使用当前请求的服务器名来构建新的重定向URL,确保请求保持在同一个域名下。

  5. $request_uri:
    解释: 这是Nginx的另一个内置变量,表示请求的完整URI(包括请求路径和查询字符串)。
    例如,客户端请求

    /path/to/page?query=value,
    $request_uri 将被替换为 /path/to/page?query=value。

    作用: 保持请求的URI不变,确保重定向后的路径和查询参数与原请求一致。

  6. ?:
    解释: ? 是一个符号,表示查询参数的分隔符。在URL中,? 用于将查询字符串与主路径分开。例如:/path?param=value。
    作用: 保证在重定向过程中,查询参数(如果有)也被正确传递。这里的 ? 仅用于保留查询字符串,即使原请求中没有查询参数。

  7. permanent:
    解释: 这是一个标志,告诉Nginx返回HTTP状态码 301,表示永久重定向。浏览器或搜索引擎会将该重定向信息缓存,并认为资源的地址已经永久改变。
    作用: 表示这是一个永久重定向(301状态码),会通知浏览器更新缓存中的URL以指向新地址。与 permanent 相对的是 redirect(或 302),表示临时重定向。
    整体效果:
    rewrite ^ https://$server_name$request_uri? permanent; 这一指令执行时,Nginx会将所有传入的HTTP请求重定向到对应的HTTPS版本,并保持路径和查询字符串不变。

请求流程举例: 假设用户访问了以下URL:

http://www.example.com/page?id=123

正则表达式 ^ 会匹配整个URI。
$server_name 将被替换为 www.example.com。
$request_uri 将被替换为 /page?id=123。
? 保留查询参数,即 id=123。
permanent 会将响应的状态码设为 301(永久重定向)。

最终重定向URL: https://www.example.com/page?id=123

关键点总结:
rewrite 是Nginx指令,用于重定向请求。
^ 匹配从头到尾的所有请求URI。
https:// 强制将请求协议更改为HTTPS。
$server_name 替换为当前请求的服务器名。
$request_uri 保留原请求的路径和查询参数。
? 保留查询字符串。
permanent 告诉浏览器这是一个永久重定向,并返回 301 状态码。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 揭开 Vue 3 中大量使用 ref 的隐藏危机
  • CentOS 7官方源停服,配置本机光盘yum源
  • super-this详解
  • 1.2 测试基础
  • 【.NET全栈】ASP.NET实战—基于ASP.NET的求职系统设计与实现
  • code eintegrity npm err sha512
  • 算法笔试-编程练习-好题-06
  • MyBatis系统学习(三)——动态SQL
  • 数仓项目环境搭建
  • 828华为云征文 | 云服务器Flexus X实例,搭建上线前后端项目
  • 电脑桌面如何分区展示工作任务?
  • 唯品会大数据面试题及参考答案(3万字长文)
  • Qt与Udp
  • 力扣最热一百题——合并两个有序链表
  • 运维工程师面试整理-安全常见安全漏洞及修复
  • ES6指北【2】—— 箭头函数
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Effective Java 笔记(一)
  • Golang-长连接-状态推送
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • java取消线程实例
  • Java应用性能调优
  • js正则,这点儿就够用了
  • oldjun 检测网站的经验
  • SAP云平台里Global Account和Sub Account的关系
  • spring-boot List转Page
  • XForms - 更强大的Form
  • 开源SQL-on-Hadoop系统一览
  • 你真的知道 == 和 equals 的区别吗?
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何设计一个比特币钱包服务
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 用Visual Studio开发以太坊智能合约
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​Spring Boot 分片上传文件
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • # wps必须要登录激活才能使用吗?
  • #13 yum、编译安装与sed命令的使用
  • (3)nginx 配置(nginx.conf)
  • (Git) gitignore基础使用
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (ZT)薛涌:谈贫说富
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (离散数学)逻辑连接词
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (三)SvelteKit教程:layout 文件
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net mvc 获取url中controller和action
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • :中兴通讯为何成功
  • @基于大模型的旅游路线推荐方案