假如Nginx服务器192.168.1.8可以和同一内网网段的192.168.1.9的应用服务器进行通信,同时Nginx服务器具有公网能力并将公网绑定到域名felord.cn上。那么我们Nginx代理的对应的配置(nginx.conf)是这样的:
server {
listen 80;
server_name felord.cn;
# ^~ 表示uri以某个常规字符串开头,如果匹配到,则不继续往下匹配。不是正则匹配
location ^~ /api/v1 {
proxy_set_header Host $host;
proxy_pass http://192.168.1.9:8080/;
}
}
经过以上配置后我们服务器真实的接口地址是http://192.168.1.9:8080/foo/get就可以通过http://felord.cn/api/v1/foo/get访问。
proxy_pass如果以/结尾,就相当于是绝对根路径,那么Nginx不会把location中匹配的路径部分代理走;如果不以/结尾,也会代理匹配的路径部分。
这是一个 Nginx 配置文件中的 server 块,用于处理指向 felord.cn 域名的 HTTP 请求。在该 server 块中,我们可以看到一个 location 块,用于匹配请求 URI 中以 /api/v1 开头的请求。
该 location 块中的 ^~ 修饰符表示该规则是一个前缀匹配规则,当请求 URI 以 /api/v1 开头时,就会将请求转发到 http://192.168.1.9:8080/。
其中,proxy_set_header Host $host 表示将请求头中的 Host 字段设置为当前请求的主机名。proxy_pass http://192.168.1.9:8080/ 表示将请求转发到 http://192.168.1.9:8080/ 这个地址上,并且保留原本的 URI。
总之,这个配置就是将以 /api/v1 开头的 HTTP 请求转发到 http://192.168.1.9:8080/ 这个后端地址上进行处理。
在 Nginx 配置文件中,location 块用于匹配请求路径,并提供一些控制如何处理请求的指令。具体来说,location 块包含一个 URI 前缀或正则表达式,用于匹配请求 URI。当一个请求 URI 与某个 location 块相匹配时,Nginx 会按照该 location 块提供的指令处理这个请求。
例如,在下面的配置文件中:
location / {
root /var/www/html;
}
location /api {
proxy_pass http://127.0.0.1:8080;
}
第一个 location 块匹配所有请求路径,因为它没有指定前缀路径或正则表达式。而第二个 location 块匹配所有以 /api 开头的请求路径。当一个请求 URI 被匹配到某个 location 块时,Nginx 会按照该 location 块提供的指令来处理这个请求。
在 location 块中,可以使用各种指令来控制如何处理请求。例如,可以通过 proxy_pass 指令将请求转发到另一个服务器,通过 root 指令设置 Web 根目录,通过 try_files 指令设置文件查找规则等等。
总之,location 块是 Nginx 中非常重要的一个配置块,在 Web 开发中应用非常广泛,能够帮助我们实现路由、反向代理、缓存等功能。