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