nginx伪静态配置解释和Nginx 常见的配置

news2025/2/7 7:34:00
文章目录
  • 禁止访问 runtime 和 application 目录
  • rewrite 对 URL 进行重写或重定向
  • 301重定向
  • root 静态资源路径处理
  • alias 路径映射
  • try_files 伪静态规则
  • Nginx 配置有许多其他常见的场景和使用方式
      • 1. **基本的反向代理配置**
      • 2. **负载均衡配置**
      • 3. **限制访问(IP 限制)**
      • 4. **限制请求速率(防止 DDoS)**
      • 5. **配置 HTTPS(SSL)**
      • 6. **缓存静态资源**
      • 7. **Gzip 压缩**
      • 8. **自定义错误页面**
      • 9. **重写 URL(URL 重定向)**
      • 10. **防盗链(Hotlink Protection)**
  • 完结

禁止访问 runtime 和 application 目录

location ~* (runtime|application)/{
    return 403;
}

这部分的作用是拦截对 runtime 和 application 目录的访问,并返回 403 Forbidden(禁止访问)状态码。

location ~* (runtime|application)/:这是一个正则匹配规则,~* 表示不区分大小写地匹配路径。(runtime|application) 是一个正则表达式,匹配 runtime 或 application 这两个字符串后跟 / 的路径。所以,任何以 runtime/ 或 application/ 开头的请求都会被匹配到。

return 403;:当请求匹配到这个 location 时,Nginx 会返回 HTTP 状态码 403,意味着请求被禁止访问。

总结:此配置的目的是阻止访问 runtime 和 application 目录,通常这些目录是应用的内部目录,不应该被外部用户访问。

rewrite 对 URL 进行重写或重定向

location / {
	if (!-e $request_filename){
		rewrite  ^(.*)$  /index.php?s=$1  last;   break;
	}
}

这部分是伪静态 URL 的重写规则,通常用于将原本的动态 URL 重写成伪静态形式。

location /:表示所有根目录下的请求都进入这个 location 块中。

if (!-e $request_filename):这个条件判断用来检查请求的文件是否存在。如果请求的文件在服务器上不存在($request_filename 是请求的文件路径),则进入 rewrite 规则。!-e 表示文件不存在。

rewrite ^(.*)$ /index.php?s=$1 last;:如果请求的文件不存在,就进行 URL 重写。这里使用正则表达式 ^(.*)$ 来匹配整个请求路径,并将其作为参数传递给 index.php 文件。重写后的 URL 变成了 /index.php?s=<请求路径>,其中 <请求路径> 是原始请求路径。last 表示停止当前配置并重新进行匹配。

break;:break 用来终止 if 语句中的执行,防止出现不必要的重定向或进一步的规则匹配。

总结:此配置实现了伪静态功能。如果用户请求的 URL 对应的文件在服务器上不存在(比如用户访问 /about,而服务器上没有 /about 这个文件),则会把请求转发到 index.php 文件,并将原始请求路径作为查询参数传递给 index.php。这样,URL 变成了伪静态的形式,实际处理却依赖于 PHP 脚本。

location /test {
    rewrite ^/test$ /test2/a permanent;
}
  • ^/test$ 匹配精确的 URL /test。
  • /test2/a 是目标 URL。
  • permanent 表示使用 HTTP 301 永久重定向。
  • 访问 http://example.com/test 时,将会被重定向到 http://example.com/test2/a。

如果你希望包括所有 /test 路径下的内容,也可以修改为:

location /test {
    rewrite ^/test(.*)$ http://baidu.com permanent;
}

这样,/test 后的路径部分(如 /test/abc)会被附加到重定向的 URL 上。

301重定向

当访问根路径 / 时,重定向到 /admin

location = / {
    return 301 /admin;
}

root 静态资源路径处理

location /static/ {
    root /www/wwwroot/totalplatform/public;
}
  • 这条规则表示:当访问 /static/ 路径时,Nginx 会查找位于 /www/wwwroot/totalplatform/public 目录中的文件。
  • 例如,访问 /static/css/style.css 时,Nginx 会去寻找 /www/wwwroot/totalplatform/public/static/css/style.css 文件。

alias 路径映射

alias 不会像 root 那样拼接路径,它会将 URL 路径直接映射到指定目录

location /play {
    alias /www/wwwroot/totalplatform/public/static;
}
  • 这样,/play/bgz/style/Temp61-wap.css 会直接映射到 /www/wwwroot/totalplatform/public/static/bgz/style/Temp61-wap.css,正确地找到文件。

try_files 伪静态规则

try_files 会首先尝试匹配请求的 URI,若找不到对应文件或目录,则会根据配置重定向到一个默认页面。

location /admin/ {
    try_files $uri $uri/ /admin/index.html;
}
  • 这条规则的作用是:当访问 /admin/ 路径时,Nginx 会首先尝试查找请求的 URI 是否对应到本地的文件 $uri 或目录 $uri/(如 /admin 或 /admin/)。

  • 如果没有找到对应的文件或目录,Nginx 会默认将请求重定向到 /admin/index.html 页面。

    location /admin-api/ {
    try_files $uri u r i / / i n d e x . p h p ? uri/ /index.php? uri//index.php?query_string;
    }

  • 如果 /admin-api/ 路径没有找到对应的静态文件,则会重定向到 /index.php,并携带查询参数 $query_string,这通常是用来处理动态请求的入口文件。

如果文件不存在则返回 406 错误

location /dp {
    root/www/wwwroot/guild/public/dp;
    try_files $uri =406;# 如果文件不存在则返回 406 错误
}

Nginx 配置有许多其他常见的场景和使用方式

1. 基本的反向代理配置

反向代理配置允许 Nginx 接收客户端的请求,并将这些请求转发给后端的应用服务器(如 Node.js、PHP-FPM、Django 等)。

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;  # 将请求转发到本地的 3000 端口
        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;
    }
}
  • 解释:这条规则将所有请求(/)转发到本地的 3000 端口上。proxy_set_header 设置了一些 HTTP 头,传递客户端的真实 IP 地址等信息给后端。
2. 负载均衡配置

Nginx 可以作为负载均衡器,将请求分发到多个后端服务器。

http {
    upstream backend {
        server 192.168.1.1:8080;
        server 192.168.1.2:8080;
        server 192.168.1.3:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;  # 代理请求到 upstream 后端池
        }
    }
}
  • 解释upstream 定义了一个后端服务器池,Nginx 会将请求按照轮询的方式分发给 192.168.1.1:8080192.168.1.2:8080192.168.1.3:8080 等服务器。
3. 限制访问(IP 限制)

可以配置 Nginx 限制特定 IP 的访问,或者允许/禁止访问特定的资源。

server {
    listen 80;
    server_name example.com;

    location /admin/ {
        allow 192.168.1.100;    # 允许 192.168.1.100 访问
        deny all;               # 其它 IP 都禁止访问
    }
}
  • 解释:此配置表示只有 192.168.1.100 IP 地址可以访问 /admin/ 路径,其他的 IP 地址都会被拒绝。
4. 限制请求速率(防止 DDoS)

通过设置请求速率限制,防止恶意请求造成服务器过载。

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;  # 每个 IP 限制 1 秒 1 次请求

    server {
        listen 80;
        server_name example.com;

        location / {
            limit_req zone=mylimit burst=5;  # 允许每个 IP 突发 5 次请求
        }
    }
}
  • 解释:此配置会限制每个 IP 地址每秒发起的请求数。如果请求速率超过限制,Nginx 会返回 503 错误。
5. 配置 HTTPS(SSL)

Nginx 可用于为站点启用 HTTPS。

server {
    listen 80;
    server_name example.com;

    # 强制 HTTP 请求重定向到 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    location / {
        root /var/www/html;
        index index.html;
    }
}
  • 解释:首先通过 HTTP 端口 80 将所有请求重定向到 HTTPS(端口 443)。第二个 server 块监听 HTTPS 请求,并指定证书和私钥的位置。
6. 缓存静态资源

通过配置 Nginx 的缓存策略,提升静态资源的加载速度。

server {
    listen 80;
    server_name example.com;

    location /static/ {
        root /var/www/html;
        expires 30d;  # 缓存 30 天
        add_header Cache-Control "public";
    }
}
  • 解释:此配置设置了对 /static/ 路径下的资源进行缓存,缓存时长为 30 天。Cache-Control 头用于告知浏览器或 CDN,缓存这些资源。
7. Gzip 压缩

启用 Gzip 压缩可以有效地减少传输的数据量,提升网站加载速度。

http {
    gzip on;
    gzip_min_length 1000;
    gzip_types text/plain application/xml text/css application/javascript;
    gzip_proxied any;
    gzip_vary on;
}
  • 解释:启用 Gzip 压缩,针对 .txt.xml.css.js 等类型的文件进行压缩。gzip_vary on 使得 Nginx 在返回压缩内容时可以根据客户端是否支持压缩返回不同的版本。
8. 自定义错误页面

通过配置错误页面,可以为用户提供更友好的错误提示页面。

server {
    listen 80;
    server_name example.com;

    location / {
        try_files $uri $uri/ =404;  # 如果文件找不到,返回 404 错误
    }

    error_page 404 /404.html;  # 自定义 404 错误页面
    error_page 500 502 503 504 /50x.html;  # 自定义 50x 错误页面
    location = /404.html {
        root /var/www/html;
    }
    location = /50x.html {
        root /var/www/html;
    }
}
  • 解释:当用户访问的页面不存在时,会显示自定义的 404.html 页面。对于 500、502、503、504 等服务器错误,显示 50x.html 页面。
9. 重写 URL(URL 重定向)

通过 rewrite 指令,可以对 URL 进行重写或重定向。

server {
    listen 80;
    server_name example.com;

    # 将 /old-url 路径重定向到 /new-url
    rewrite ^/old-url$ /new-url permanent;
}
  • 解释:当访问 /old-url 时,Nginx 会永久地将请求重定向到 /new-url
10. 防盗链(Hotlink Protection)

防止其他网站直接链接你网站的图片、视频等资源。

server {
    listen 80;
    server_name example.com;

    location /images/ {
        valid_referers none blocked example.com *.example.com;
        if ($invalid_referer) {
            return 403;
        }
    }
}
  • 解释:如果请求图片的页面来源不是 example.com 或其子域名,Nginx 会返回 403 错误,防止盗链。

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

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

相关文章

AI安全最佳实践:AI云原生开发安全评估矩阵(下)

上篇小李哥带大家一起了解了什么是AI应用云原生开发安全评估矩阵&#xff0c;并且介绍了利用该矩阵如何确定我们云上AI应用的安全评估范围&#xff0c;接下来我们将继续本系列的下篇&#xff0c;基于该安全评估矩阵设计和实施我们系统应具备的安全控制。 优先考虑的安全控制 …

Windows DeepSeek API调用基础教程-Python

DeepSeek API 调用&#x1f680; 在最近DeepSeek大火之后&#xff0c;在各个媒体上都能看到对这个大模型的报道&#xff0c;这个使用MoE的架构的大模型&#xff0c;在使用体验上&#xff0c;确实让我眼前一亮&#xff0c;我自己平时也是已经在用着GPT-o1&#xff0c;对比下来发…

达梦数据库从单主模式转换为主备模式

目录标题 达梦数据库单主转主备配置笔记前期准备服务器环境数据库安装磁盘空间 流程流程图说明 详细步骤1. 检查主库归档模式2. 配置主库配置文件dm.ini 文件dmmal.ini 文件dmarch.ini 文件 3. 备份主库数据库4. 备库配置新建备库数据库配置备库配置文件dm.ini 文件复制主库的 …

SpringUI Web高端动态交互元件库

Axure Web高端动态交互元件库是一个专为Web设计与开发领域设计的高质量资源集合&#xff0c;旨在加速原型设计和开发流程。以下是关于这个元件库的详细介绍&#xff1a; 一、概述 Axure Web高端动态交互元件库是一个集成了多种预制、高质量交互组件的工具集合。这些组件经过精…

ES冷热数据分离配置

冷热数据是根据索引创建时间来进行迁移的。一旦迁移到冷数据节点&#xff0c;则无法再恢复成热数据&#xff0c;因为热数据节点中该索引已经没有分片存在了。 基于Docker搭建ES集群,并设置冷热数据节点 配置冷热数据迁移策略 PUT https://192.168.x.xx:19200/_ilm/policy/my…

七大排序思想

目录 七大排序的时间复杂度和稳定性 排序 插入排序 简单插入排序 希尔排序 选择排序 简单选择排序 堆排序 交换排序 冒泡排序 快速排序 快排的递归实现 hoare版本的快排 挖坑法的快排 双指针法的快排 快排的非递归 归并排序 归并的递归实现 归并的非递归实现…

制作PE启动盘(内含Win11 iso镜像)

前言 本文用于记录制作PE启动盘过程&#xff0c;学习记录用&#xff0c;如有不对请指出&#xff0c;谢谢&#xff01; 参考视频&#xff1a; 1. 微PE下载&#xff1a;https://www.bilibili.com/video/BV1vT4y1n7JX/?spm_id_from333.788.top_right_bar_window_history.conte…

css字体样式与文本样式详解

目录 一、CSS字体样式 1. 字体类型&#xff08;font-family&#xff09; 2. 字体大小&#xff08;font-size&#xff09; 3. 字体粗细&#xff08;font-weight&#xff09; 4. 字体风格&#xff08;font-style&#xff09; 5. 字体颜色&#xff08;color&#xff09; 6. …

游戏引擎学习第89天

回顾 由于一直没有渲染器&#xff0c;终于决定开始动手做一个渲染器&#xff0c;虽然开始时并不确定该如何进行&#xff0c;但一旦开始做&#xff0c;发现这其实是正确的决定。因此&#xff0c;接下来可能会花一到两周的时间来编写渲染器&#xff0c;甚至可能更长时间&#xf…

Linux学习笔记16---高精度延时实验

延时函数是很常用的 API 函数&#xff0c;在前面的实验中我们使用循环来实现延时函数&#xff0c;但是使用循环来实现的延时函数不准确&#xff0c;误差会很大。虽然使用到延时函数的地方精度要求都不会很严格( 要求严格的话就使用硬件定时器了 ) &#xff0c;但是延时函数肯定…

杨氏数组中查找某一数值是否存在

判断数据是否存在于杨氏矩阵中 &#xff08;小米真题&#xff09; 题目&#xff1a;有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N) …

51单片机 02 独立按键

一、独立按键控制LED亮灭 轻触按键&#xff1a;相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 #include <STC89C5xRC.H> void main() { // P20xFE;while(1){…

AI + 编程时代,飞算JavaAI如何引领行业趋势变革

在当今科技飞速发展的浪潮下&#xff0c;AI 与编程的深度融合已成为不可阻挡的时代趋势&#xff0c;正重塑着各个行业的格局。在这场变革中&#xff0c;飞算JavaAI脱颖而出&#xff0c;凭借其卓越的特性和创新的理念&#xff0c;在 AI 编程领域展现出强大的引领力量&#xff0…

Deepseek本地部署指南:在linux服务器部署,在mac远程web-ui访问

1. 在Linux服务器上部署DeepSeek模型 要在 Linux 上通过 Ollama 安装和使用模型&#xff0c;您可以按照以下步骤进行操作&#xff1a; 步骤 1&#xff1a;安装 Ollama 安装 Ollama&#xff1a; 使用以下命令安装 Ollama&#xff1a; curl -sSfL https://ollama.com/download.…

1-R语言概述

1.认识R语言 1.1 选择R语言的依据 免费的软件编程方便&#xff0c;语言灵活&#xff0c;图形功能强大优秀的内在帮助系统高质量、广泛的统计分析、数据挖掘平台国际上R语言已然是专业数据分析领域的标准 1.2 R的来源 ​ R是S语言的一种实现。S语言是由 AT&T贝尔实验室…

【BQ3568HM开发板】智能家居中控屏连接华为云IoTDA物联网平台

目录 引言 安装OpenHarmony的MQTT库 华为云平台的操作 建立设备 建立物模型 连接华为云平台 发布LED灯状态 代码重构 测试结果 接收平台发送的属性修改命令 设备侧API Topic 下行请求参数说明 上行响应参数说明 程序修改 应用侧API 测试设备属性设置功能 结语…

java 8 在 idea 无法创建 java spring boot 项目的 变通解决办法

java 8 在 idea 无法创建 java spring boot 项目的 变通解决办法 spring boot 3 官方强制 要用 java 17 &#xff0c;但是 不想安装java 17的 &#xff0c;但是又想 使用 spring boot &#xff0c;可以这样 &#xff1a; 在这个网站 https://start.aliyun.com/ 选择 你相对…

web-文件上传-CTFHub

前言 在众多的CTF平台当中&#xff0c;作者认为CTFHub对于初学者来说&#xff0c;是入门平台的不二之选。CTFHub通过自己独特的技能树模块&#xff0c;可以帮助初学者来快速入门。具体请看官方介绍&#xff1a;CTFHub。 作者更新了CTFHub系列&#xff0c;希望小伙伴们多多支持…

SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具

SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具 一、SQLAIchemy的介绍二、数据库引擎1、支持的数据库1.1、sqlite数据库1.2、MySQL数据库1.3、数据库引擎的参数 三、定义模型类1、定义模型2、engine负责数据库迁移 四、alembic数据库迁移⼯具1、安装alembic2、初始化alemb…

C# OpenCV机器视觉:图像风格迁移

在一个充满奇思妙想的创意工作室里&#xff0c;小李正像只热锅上的蚂蚁&#xff0c;为客户的项目挠破了脑袋&#xff0c;急需寻找灵感的火花。他望着眼前那幅平淡无奇的风景图像&#xff0c;心想&#xff1a;“这玩意儿也太普通啦&#xff0c;就像一杯白开水&#xff0c;怎么能…