Ngnix常用配置及和基本功能讲解
内容提要
本文介绍了Nginx的常用配置和基本功能,包括核心配置、路径映射、反向代理、负载均衡、动静分离等。同时还介绍了常用的指令和内置变量。
延伸解读
location 匹配优先级:理解规则才能避免配置冲突
文章指出 location 的匹配顺序为:精确匹配(=)优先级最高,其次是前缀匹配(^~),然后是正则匹配(~ 和 ~*),最后是普通前缀匹配。其中 ^~ 表示如果前缀匹配成功,则不再尝试正则匹配。这一规则直接影响请求路由结果,例如当同时存在 ^~ /img/ 和 ~* \.(jpg)$ 时,图片请求会优先命中 ^~ 规则。理解优先级有助于避免因规则重叠导致的意外行为。
负载均衡策略选择:没有通用最优解
文章介绍了轮询、热备、权重、ip_hash、fair 和 url_hash 六种策略。轮询适合后端服务器性能相近的场景;权重适合服务器配置不均时按能力分配;ip_hash 可解决 session 一致性问题;fair 按响应时间分配,优先响应快的服务器;url_hash 使同一 URL 定向到同一服务器,对缓存有效。需注意 fair 和 url_hash 需要安装第三方模块才能使用。
动静分离配置:静态资源直出,动态请求转发
文章通过示例展示了动静分离的实现:使用 location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ 匹配静态资源,并指定 root 路径直接返回文件;其他请求则通过 proxy_pass 转发到后端服务器。这样静态内容由 Nginx 直接处理,动态内容交给后端,从而提升整体访问性能。配置时需确保 root 路径正确,否则静态资源可能返回 404。
常用指令与内置变量:提升配置灵活性的关键
文章介绍了 return、rewrite、error_page、日志、deny/allow 等常用指令,以及以 $ 开头的内置变量。return 可直接返回状态码或重定向;rewrite 可修改请求 URI,并支持 last、break、redirect、permanent 等重写策略;error_page 可自定义错误页面;deny/allow 用于基于 IP 的访问控制。内置变量如 $remote_addr、$request_uri 等可用于日志格式和代理头设置,增强配置的灵活性和可维护性。
Q&A
Nginx的配置文件nginx.conf整体分为哪几个部分?
Nginx的配置文件整体分为全局段、events段和http段。全局段配置用户、进程数、日志路径等;events段配置网络连接相关参数;http段配置HTTP请求处理,包括server和location等。
location指令中各种匹配符号(如=、~、~*、^~)分别代表什么含义?
= 表示精确匹配;~ 表示区分大小写的正则匹配;~* 表示不区分大小写的正则匹配;!~ 和 !~* 分别表示区分和不区分大小写的正则不匹配;^~ 表示前缀匹配,匹配成功后不再匹配其他location;@ 用于定义命名location,通常用于内部重定向。
Nginx如何实现反向代理?
通过proxy_pass指令将请求转发给内部服务器。例如在location块中配置proxy_pass http://localhost:8081;,当访问Nginx时,请求会被转发到localhost:8081。还可以使用proxy_set_header设置请求头,如Host和X-Forwarded-For。
Nginx支持哪些负载均衡策略?
Nginx支持多种负载均衡策略,包括:轮询(默认)、热备(backup)、权重(weight)、ip_hash、fair(需第三方模块)、url_hash(需第三方模块)。每种策略适用于不同场景,可单独或混合使用。
什么是动静分离?Nginx如何配置实现动静分离?
动静分离是将静态页面与动态页面分开不同系统访问,以提升服务性能和可维护性。在Nginx中,可以通过location匹配静态文件扩展名(如gif、jpg、css、js等),并设置root指向静态文件目录;其他请求通过proxy_pass转发到后端服务器处理动态内容。
Nginx中return和rewrite指令有什么区别?
return指令用于直接返回HTTP状态码或重定向URL,可带文本;rewrite指令用于重写URI,通过正则匹配修改请求URI,并可选last、break、redirect、permanent等重写策略。return更简单直接,rewrite更灵活用于内部重写。