作者:京东物流 殷世杰 Nginx已经广泛应用于J-one和Jdos的用配环境部署上,本文对Nginx的置及常用的配置和基本功能进行讲解,适合Ngnix入门学习。和基 找到Nginx安装目录下的本功conf目录下nginx.conf文件,Nginx的用配基本功能配置是由它提供的。 Nginx的置及配置文件(conf/nginx.conf)整体上分为如下几个部分: 区域 职责 全局块 配置和Nginx运行相关的全局配置 events块 配置和网络链接相关的配置 http块 配置代理、缓存、和基日志记录、本功虚拟主机等配置 server块 配置虚拟主机的用配相关参数,一个http快中可以有多个server块 location块 配置请求的置及路由,以及各种页面的和基处理情况 配置层级图如下所示。 一个比较全的本功配置文件示例如下。 location [ = | ~ | ~* | !~ | !~* | @ ] uri { ...} = 表示精确匹配,如果找到,云服务器提供商立即停止搜索并立即处理此请求。 ~ 表示执行一个正则匹配,区分大小写匹配 ~* 表示执行一个正则匹配,不区分大小写匹配 !~ 区分大小写不匹配 !~* 不区分大小写不匹配 ^~ 即表示只匹配普通字符(空格)。使用前缀匹配,^表示“非”,即不查询正则表达式。如果匹配成功,则不再匹配其他location。 @ 指定一个命名的location,一般只用于内部重定向请求。例如 error_page, try_files uri 是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式; 反向代理(Reverse Proxy)是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,云南idc服务商而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。 反向代理通过proxy_pass指令来实现。 当我们访问localhost的时候,ngnix就将我们的请求转到 localhost:8081了 当有2台或以上服务器时,代理服务器根据规则将请求分发到指定的服务器上处理。 Nginx目前支持多种负载均衡策略,这里讲解常用的6种。 每个请求按时间顺序逐一分配到不同的后端服务器,也就是说第一次请求分配到第一台服务器上,第二次请求分配到第二台服务器上,如果只有两台服务器,第三次请求继续分配到第一台上,这样循环轮询下去,也就是服务器接收请求的比例是 1:1, 如果后端服务器down掉,能自动剔除。轮询是默认配置,不需要太多的配置 同一个项目分别使用8081和8082端口启动项目 3.2.2 热备: 假设有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂了,服务器处理请求的顺序:BBBBBBBBBBBBBB..... 3.2.3 权重 跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....。 3.2.4 ip_hash 这样每个ip地址固定访问一个后端服务器,可以解决session的问题。 3.2.5 fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。这个配置是为了更快的给用户响应。 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,hash_method是使用的hash算法 以上6种负载均衡各自适用不同情况下单独或者混合使用,可以根据实际情况选择使用,fair和url_hash需要安装第三方模块才能使用。 动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。 结果:访问http://localhost/test.jpg时直接返回/usr/local/var/www/img路径下的图片. 访问 返回http状态码和可选的第二个参数可以是重定向的URL 重写URI请求 rewrite,通过使用rewrite指令在请求处理期间多次修改请求URI,该指令具有一个可选参数和两个必需参数。 第一个(必需)参数是请求URI必须匹配的正则表达式。 第二个参数是用于替换匹配URI的URI。 可选的第三个参数重写策略 使用error_page指令,您可以配置NGINX返回自定义页面以及错误代码,替换响应中的其他错误代码,或将浏览器重定向到其他URI。在以下示例中,error_page指令指定要返回404页面错误代码的页面(/404.html)。 访问日志:需要开启压缩 gzip on; 否则不生成日志文件,打开log_format、access_log注释 5.6 内置变量 nginx的配置文件中可以使用的内置变量以美元符$开始。其中,大部分预定义的变量的值由客户端发送携带。 Ngnix是一款高性能反向代理服务器,学习它非常有必要,本文讲解了Ngnix核心配置,介绍了反向代理,负载均衡,动静分离三大功能,最后扩展了一些常用的指令。本文介绍了Ngnix的基础用法,后续的Ngnix内核以及原理部分有待研究。1 核心配置
1.1 配置文件结构
1.2 配置文件示例
1.3 locat路径映射讲解
1.3.1格式: 2 反向代理
2.1 反向代理概念:
2.2 反向代理示例:
复制server { listen 80; server_name localhost; location / { proxy_pass http://localhost:8081; proxy_set_header Host $host:$server_port;#为请求头添加Host字段,用于指定请求服务器的域名/IP地址和端口号。 # 设置用户ip地址 proxy_set_header X-Forwarded-For $remote_addr;#为请求头添加XFF字段,值为客户端的IP地址。 # 当请求服务器出错去寻找其他服务器 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;1.2.3.4.5.6.7.8.9.10.11.12.13.14. 3 负载均衡
3.1 负载均衡概念:
3.2 负载均衡策略及示例:
4 动静分离:
4.1 动静分离概念:
4.2 动静分离示例:
复制upstream web_servers { server localhost:8081; server localhost:8082; } server { listen 80; server_name localhost; set $doc_root /usr/local/var/www; location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ { root $doc_root/img; } location / { proxy_pass http://web_servers; proxy_set_header Host $host:$server_port; } error_page 500 502 503 504 /50x.html; #出现 500 502 503 504错误时走内部跳转 location = /50x.html { root $doc_root; } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22. 5 其他常用的指令:
5.1.return指令
5.2 rewrite指令
5.3 error_page指令
5.4 日志
5.5 deny 、allow指令
复制#禁止访问某个目录 location / { allow 192.168.0.0; allow 127.0.0.1; deny all; #这段配置值允许192.168.0./24网段和127.0.0.1的请求,其他来源IP全部拒绝。 }1.2.3.4.5.6.7. 6 总结