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

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

文章目录
  • 禁止访问 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.kler.cn/a/511894.html

相关文章:

  • 线性代数概述
  • 解决 Error: Invalid or corrupt jarfile day04_studentManager.jar 报错问题
  • 使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】
  • 25/1/15 嵌入式笔记 初学STM32F108
  • 微服务学习:基础理论
  • 庄小焱——2024年博文总结与展望
  • Unreal Engine 5 C++ Advanced Action RPG 十章笔记
  • Git合并多次提交,改成一个简洁的提交历史
  • K8S中Pod控制器之ReplicaSet(RS)控制器
  • android 开发中遇到的小问题整理
  • Android平台如何采集屏幕数据并推送RTMP服务器实现无纸化同屏?
  • 项目实战--网页五子棋(游戏大厅)(3)
  • 如何使用 Redis 作为高效缓存
  • 在swiper中显示echarts图表,echarts的点击事件无效,图例点击也没有反应
  • Maven 快速上手
  • [2025分类时序异常检测指标R-AUC与VUS]
  • Spring Boot依赖管理:Maven与Gradle实战对比
  • NPM 下载依赖超时:npm ERR! RequestError: connect ETIMEDOUT
  • Tensor 基本操作1 | PyTorch 深度学习实战
  • 【Rust自学】13.9. 使用闭包和迭代器改进IO项目
  • 无监督<视觉-语言>模型中的跨模态对齐
  • vue按照官网设置自动导入后ElMessageBox不生效问题
  • 从零开始:Spring Boot核心概念与架构解析
  • springboot迅捷外卖配送系统
  • STM32CubeIDE使用笔记(一)
  • 【Spring】原型 Bean 被固定