设为首页 收藏本站
查看: 805|回复: 0

[经验分享] Nginx的这点破事儿

[复制链接]

尚未签到

发表于 2018-11-11 12:50:51 | 显示全部楼层 |阅读模式
  本文为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
  


  • ./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的,详见 缓存章节
  

  编译并安装
  


  • make&&make install
  

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


  • sbin/nginx -v
  

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


基本使用
  参数
  -V 显示当前nginx的版本号和编译信息
  -v 仅显示当前nginx的版本号
  -t 测试配置文件的正确性
  -c 不使用系统的conf/nginx.conf,而是使用用户指定的配置文件路径
  

  

  举例:
  


  • sbin/nginx -V
  

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

  


  • sbin/nginx -t  -c  myconfig.conf
  

  以上命令的作用是测试用户指定的配置文件myconfig.conf 的正确性
  信号控制
  TERM   强退,无视一切
  QUIT   当前请求处理完成后,关闭程序
  HUP    重新载入配置文件,用于修改配置文件后。该操作会打开新的工作进程,并关闭旧的
  
        工作进程,并且不会中断当前请求。
  

  

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

  


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

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

监控
  配置:
  


  • location ~ ^/mystatus/ {
  •     stub_status on;
  •     access_log off;
  • }
  

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


负载均衡
  配置:
  


  • #netty server服务
  • upstream nettysrv {
  •     server 127.0.0.1:51074 weight=1 max_fails=2 fail_timeout=10s;
  •     server 127.0.0.1:14174 weight=1 max_fails=2 fail_timeout=10s;
  •     server 127.0.0.1:17917 backup;
  • }
  

  参数说明:
  weight 权重,数值越大,负载就越大
  backup 备份标识
  
以上配置了三个服务器做负载均衡,51074和14174做权重模式执行。17917作为备份服务,只有前两个服务都失败了,才启用。
  
  
动静分离及反向代理
  静态访问配置:
  


  • #静态访问文件夹
  • location ^~ /static/ {
  •     root /home/nginx/webroot/;
  • }
  

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

  

  动态访问配置:
  


  • #动态的访问我的netty serv
  • location ^~ /dynamic/ {
  •     proxy_pass http://nettysrv/;
  •     proxy_set_header Host  $host;
  •     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下配置:
  


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

  
location下配置调用缓存:
  


  • location ^~/proxytest/ {
  •     proxy_cache cache_one;
  •     proxy_cache_valid any 5m;
  •     proxy_pass http://nettysrv/;
  • }
  

  

  使用插件调用memcached
  使用memcached要使用前面提到的第三方插件
  agentzh-memc-nginx-module
  agentzh-srcache-nginx-module
  插件的安装,nginx编译时加入—add-module参数即可:
  


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

  具体可参考nginx的安装章节。
  

  

  配置如下:
  


  • #memcached服务的地址
  • upstream memcachesrv {
  •     server 127.0.0.1:11211;
  • }

  • #调用memcached的location
  • location ^~/memcachetest {
  •     set $key $uri$args;
  •     #set_md5 $key;
  •     srcache_fetch GET /mcache $key;
  •     srcache_store PUT /mcache $key;
  •     #more_clear_headers 'Accept-Encoding';
  •     proxy_pass http://nettysrv/;
  • }

  • #在上面通过srcache进入本location进行缓存操作,如果有缓存数据就使用缓存中的,没有就继续调用,并将数据缓存。
  • location /mcache {
  •     internal;
  •     memc_connect_timeout 1000ms;
  •     memc_send_timeout 1000ms;
  •     memc_read_timeout 1000ms;
  •     set $memc_key $query_string;
  •     set $memc_exptime 300;
  •     memc_pass memcachesrv;
  • }
  

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

参考
  http://www.nginx.org/
  http://wiki.nginx.org/Main



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633712-1-1.html 上篇帖子: centos使用docker下安装mysql并配置、nginx 下篇帖子: nginx rewrite及多upstream
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表