Nginx的这点破事儿

本文为Nginx入门级简介,包括安装,基本使用,负载均衡,动静分离,反向代理,缓存应用等功能。


依赖项准备

可能用到的依赖库,以下提供官方网站链接可自行下载:

pcre

http://www.pcre.org/


zlib

http://zlib.net

http://sourceforge.net/projects/libpng/files/zlib/

zlib.net上不去…是不是被墙了,我们可以使用另外一个链接zlib是 libpng的依赖库

 

openssl

http://www.openssl.org/


注:以上这几个库不用安装,解压即可,编译时会链接到。有的系统已经安装了的就可以忽略。

 

本文中用到的插件模块:

https://github.com/agentzh/srcache-nginx-module

https://github.com/agentzh/memc-nginx-modules

 

 

安装

虽然nginx已经支持windows很久了,本文仅介绍linux的安装
 

nginx官方网站下载源码包(http://www.nginx.org/ )并解压。

本文发布时,最新版1.3.0刚发布,建议使用1.2.0。开源的东东总是有一堆的版本,按照国内的盗版思维,很多人喜欢用最新版,其实最新版很多都不稳定,有各种莫名其妙的BUG,甚至有些都无法编译通过。所以一般推荐使用最新版的上一个版本的稳定版(通常会标识有stable)。

 

执行./configure

  
  
  
  
  1. ./configure --with-pcre=/usr/local/pcre-8.30/ --with-zlib=/usr/local /zlib-1.2.3/ --with-openssl=/usr/local /openssl-1.0.1c/ --prefix=/usr/local/nginx --add-module=/usr/local/agentzh-memc-nginx-module --add-module=/usr/local/agentzh-srcache-nginx-module  

参数介绍:

--with-pcre=/usr/local/pcre-8.30/

指向pcre解压路径或者安装的路径
 

--with-zlib=/usr/local /zlib-1.2.3/

指向zlib解压路径或者安装的路径
 

--with-openssl=/usr/local /openssl-1.0.1c/

指向openssl解压路径或者安装的路径

--prefix=/usr/local/nginx

指定nginx要安装的路径

--add-module=/usr/local/agentzh-memc-nginx-module

--add-module=/usr/local/agentzh-srcache-nginx-module

上面这两个模块主要是用来调用memcached的,详见 缓存章节

 

编译并安装

  
  
  
  
  1. make&&make install 

测试

  安装成功后,在安装后的nginx的路径下执行

  
  
  
  
  1. sbin/nginx -v 

  执行后显示nginx的版本信息,就表示安装完成了。

基本使用

参数

-V 显示当前nginx的版本号和编译信息

-v 仅显示当前nginx的版本号

-t 测试配置文件的正确性

-c <配置文件路径> 不使用系统的conf/nginx.conf,而是使用用户指定的配置文件路径

举例:

  
  
  
  
  1. sbin/nginx -V  

以上命令执行结果为显示“编译信息”,可以查看用到的自带模块及第三方模块,截至目前nginx已经有很丰富的第三方模块。


  
  
  
  
  1. sbin/nginx -t  -c  myconfig.conf  

以上命令的作用是测试用户指定的配置文件myconfig.conf 的正确性

 

 

信号控制

TERM   强退,无视一切

QUIT   当前请求处理完成后,关闭程序

HUP    重新载入配置文件,用于修改配置文件后。该操作会打开新的工作进程,并关闭旧的
        工作进程,并且不会中断当前请求。


在logs\nginx.pid中,记录了当前运行的nginx进程ID,
可以通过 kill -信号名 `cat logs/nginx.pid` 进行控制。

例如:

  
  
  
  
  1. kill -HUP `cat logs/nginx.pid` 

执行以上命令可重新加载配置文件

 

监控

配置:

  
  
  
  
  1. location ~ ^/mystatus/ { 
  2.     stub_status on
  3.     access_log off

可直接访问http://<xxx>/mystatus/即可显示Nginx的一些运行状态信息。


 

负载均衡

配置:

  
  
  
  
  1. #netty server服务 
  2. upstream nettysrv { 
  3.     server 127.0.0.1:51074 weight=1 max_fails=2 fail_timeout=10s; 
  4.     server 127.0.0.1:14174 weight=1 max_fails=2 fail_timeout=10s; 
  5.     server 127.0.0.1:17917 backup; 

参数说明:

weight 权重,数值越大,负载就越大

backup 备份标识


以上配置了三个服务器做负载均衡,51074和14174做权重模式执行。17917作为备份服务,只有前两个服务都失败了,才启用。


动静分离及反向代理

静态访问配置:

  
  
  
  
  1. #静态访问文件夹 
  2. location ^~ /static/ { 
  3.     root /home/nginx/webroot/; 

使用root将链接定向到本地路径/home/nginx/webroot下

动态访问配置:

  
  
  
  
  1. #动态的访问我的netty serv 
  2. location ^~ /dynamic/ { 
  3.     proxy_pass http://nettysrv/; 
  4.     proxy_set_header Host  $host; 
  5.     proxy_set_header X-Forwarded-For  $remote_addr; 

使用proxy_pass,定向到前面负载均衡章节定义的服务nettysrv。

proxy_set_header

当后端Web服务器上也配置有多个虚拟主机时,需要用该Header来区分反向代理哪个主机名。

proxy_set_header

如果后端Web服务器上的程序需要获取用户IP,请从该Header头获取

注:location的可以是正则表达式,对uri进行匹配。但是,使用正则表达式后,只能用rewrite进行重定向uri,而不能使用root和proxy_pass。

缓存

使用自带缓存proxy_cache

http下配置:

  
  
  
  
  1. proxy_temp_path proxy_temp_dir; 
  2. # 缓存空间大小2000m  1天没有被访问的内容自动清除,硬盘缓存单个文件最大5m 
  3. proxy_cache_path proxy_cache_dir levels=1:2 keys_zone=cache_one:2000m  inactive=5m max_size=5m; 


location下配置调用缓存:

  
  
  
  
  1. location ^~/proxytest/ { 
  2.     proxy_cache cache_one; 
  3.     proxy_cache_valid any 5m; 
  4.     proxy_pass http://nettysrv/; 


使用插件调用memcached

使用memcached要使用前面提到的第三方插件

agentzh-memc-nginx-module

agentzh-srcache-nginx-module

 

插件的安装nginx编译时加入—add-module参数即可:

  
  
  
  
  1. --add-module=/usr/local/agentzh-memc-nginx-module --add-module=/usr/local/agentzh-srcache-nginx-module  

具体可参考nginx的安装章节

配置如下:

  
  
  
  
  1. #memcached服务的地址 
  2. upstream memcachesrv { 
  3.     server 127.0.0.1:11211; 
  4.  
  5. #调用memcached的location 
  6. location ^~/memcachetest { 
  7.     set $key $uri$args; 
  8.     #set_md5 $key
  9.     srcache_fetch GET /mcache $key
  10.     srcache_store PUT /mcache $key
  11.     #more_clear_headers 'Accept-Encoding'
  12.     proxy_pass http://nettysrv/; 
  13.  
  14. #在上面通过srcache进入本location进行缓存操作,如果有缓存数据就使用缓存中的,没有就继续调用,并将数据缓存。 
  15. location /mcache { 
  16.     internal; 
  17.     memc_connect_timeout 1000ms; 
  18.     memc_send_timeout 1000ms; 
  19.     memc_read_timeout 1000ms; 
  20.     set $memc_key $query_string; 
  21.     set $memc_exptime 300; 
  22.     memc_pass memcachesrv; 

^~/memcachetest的配置中把$uri$args传入 /mcache ,mcache用$query_string取出作为memcache的key。

 

参考

http://www.nginx.org/

http://wiki.nginx.org/Main

你可能感兴趣的:(nginx,负载均衡,缓存,反向代理,动静分离)