Nginx Conf
Nginx 是一种高性能的 Web 服务器软件,也可以充当反向代理服务器、负载均衡器等。在使用 Nginx 时,经常会遇到需要根据请求的路径进行转发或者重定向的情况,本文将详细讲解如何配置 Nginx 根据路径转发的步骤。
1. 配置 location 指令
在 Nginx 中,可以使用 location 指令来匹配请求的 URL,然后进行转发或重定向。下面是 location 指令的语法格式:
location [ = | ~ | ~* | ^~ ] URL {
. . .
}
其中:
- = 表示精确匹配 URL;
- ~ 表示区分大小写的正则表达式匹配 URL;
- ~* 表示不区分大小写的正则表达式匹配 URL;
- ^~ 表示普通字符匹配URL。
对于大部分情况,我们使用最简单的普通字符匹配即可。比如下面的配置:
location /api { proxy_pass http://127.0.0.1:8000; }
这个配置表示,如果请求的 URL 以 /api 开头,Nginx 就会将请求转发到 http://127.0.0.1:8000 这个地址。注意,这里的 /api 应该是相对于 Nginx 根路径的相对路径,并不是绝对路径。
2. 配置rewrite指令
如果我们想要对请求的 URL 进行重定向,可以使用 rewrite 指令。比如下面的配置:
location /old {
rewrite ^/old(.*)$ /new$1 permanent;
}
这个配置表示,如果请求的 URL 以 /old 开头,Nginx 就会将URL中的 /old 替换成 /new 并进行重定向。注意,这里的重定向是永久重定向(301),如果需要临时重定向(302),可以将 permanent 改为 redirect。
示例一:转发 API 请求 假设我们有一个 Web 应用,需要将所有 API 请求转发到后台的 API 服务器,API 服务器的地址是 http://api.example.com,我们可以在 Nginx 中加入下面的配置:
location /api {
proxy_pass http://api.example.com;
}
这个配置表示,如果请求的 URL 以 /api 开头,Nginx 就会将请求转发到 http://api.example.com 这个地址。比如说,如果有一个请求 /api/users/1,Nginx 就会将请求转发到 http://api.example.com/api/users/1 这个地址,然后将 API 服务器返回的响应返回给客户端。
示例二:多站点部署 假设我们有两个 Web 应用,分别是前端应用和后台管理应用,前端应用的地址是 http://example.com,后台管理应用的地址是 http://admin.example.com,我们可以在 Nginx 中加入下面的配置:
前端应用配置
server {
server_name example.com;
location / {
root /var/www/example.com;
index index.html;
}
}
后台管理应用配置
server {
server_name admin.example.com;
location / {
proxy_pass http://127.0.0.1:8000;
}
}
这个配置表示,如果请求的域名是 example.com,并且请求的 URL 不以 /api 开头,Nginx 就会将请求映射到 /var/www/example.com 目录下的静态文件,例如 /index.html;如果请求的域名是 admin.example.com,或者请求的 URL 以 /api 开头,Nginx 就会将请求转发到 http://127.0.0.1:8000 这个应用服务器,这个服务器可以是一个 Django 应用、Flask 应用、Node.js 应用等。
注意,这个配置中我们使用了不同的虚拟主机(server)来处理不同的域名,这样可以让不同的应用使用不同的配置。并且,我们在后台管理应用的 location 中加入了 /api 前缀的匹配,这是为了将 API 请求转发到后台的 API 服务器,和前端应用的静态文件请求区分开来。