在Nginx实战中,Location配置是非常重要的部分,用于定义如何处理不同URL路径的请求。以下是一些基本概念和实战配置示例:
Location匹配原则:
-
精确匹配:
location = /exact_path { # ... 针对"/exact_path"的精确配置 }
当请求URI与指定路径完全一致时,才会匹配这个location块。
-
前缀匹配:
location /prefix_path { # ... 针对以"/prefix_path"开始的所有路径的配置 }
如果请求URI以指定的前缀开始,那么这个location块将被匹配。
-
正则表达式匹配:
location ~ \.php$ { # ... 针对以".php"结尾的路径的配置 }
使用
=~, ~*
前缀可以指定正则表达式匹配。其中~
表示区分大小写匹配,~*
表示不区分大小写匹配。 -
优先级:
- 最高优先级:
=
- 次之:
^~
(如果URI以指定的前缀开始,则不再尝试正则表达式匹配) - 再次:正则表达式(按照配置文件中出现的顺序)
- 最低优先级:普通前缀匹配(非正则表达式的
/prefix
)
- 最高优先级:
示例配置:
-
静态文件服务:
location /static { alias /var/www/static_files; expires 30d; }
这个配置会将所有以
/static
开头的请求映射到/var/www/static_files
目录下的文件。 -
反向代理:
location /api { proxy_pass http://backend_server:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
所有以
/api
开头的请求会被转发到后端服务器backend_server:8080
。 -
URL重写:
location /old_url { rewrite ^/old_url(.*)$ /new_url$1 permanent; }
请求到
/old_url
的请求会被永久重定向到/new_url
。 -
正则表达式示例:
location ~* \.(jpg|jpeg|png|gif)$ { access_log off; expires 30d; }
所有以
.jpg
,.jpeg
,.png
, 或.gif
结尾的请求会被处理,且不记录访问日志,响应的图片资源会设置30天的缓存有效期。
注意事项:
- Nginx处理location匹配遵循“先匹配,后执行”的原则。
- 不同location块间的配置可以相互嵌套和覆盖。
- 配置文件中应根据实际情况正确设置匹配规则,避免冲突和安全隐患。