Nginx初步学习文档

什么是Nginx?


Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集 示例配置文件和低系统资源的消耗而闻名了


Nginx的特性


动静分离 ( 缓存命中 )
反向代理 ( 负载均衡 )
平滑升级
访问控制
URLRewrite( 正则 )


Nginx的优点


1、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
2、内存消耗少:在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)。
3、配置文件非常简单:风格跟程序一样通俗易懂。
4、成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
5、支持Rewrite重写规则:能够根据域名、URL的不同,将HTTP 请求分到不同的后端服务器群组
6、内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问
7、节省带宽:支持GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
8、稳定性高:用于反向代理,宕机的概率微乎其微。

Nginx转发规则配置


进入nginx目录使用命令 vim conf / nginx.conf ,在文件末尾大括号内添加如下信息

 include      /usr/local/nginx/conf/vhost/*.conf;

创建vhost目录添加转发规则

~mkdirconf/vhost

~vim conf/vhost/tomcat_dangdang.conf

server {

       listen       80;

       server_namewww.dangdang.cn;

       location / {

          proxy_pass http://tomcat_dangdang;

       }

}

upstream tomcat_dangdang {

       server 10.10.100.10:8080;

}


Nginx静态文件转发规则


使用alias指定

location ^~ /static/activity/ {

      alias /static/activity/;

}

使用root指定

location ^~ /static/activity/ {

      root / ;

}

区别:

alias后面必须要用“/”结束,否则会找不到文件的,而root则可有可无

例如访问路径为www.dangdang.cn/static/activity/img

而alias和root配置相同时,root的转发会访问 /static/activity/static/activity/img/


Nginx转发规则顺序


以= 开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配 ;
~* 开头表示不区分大小写的正则匹配
/ 通用匹配 , 如果没有其它匹配,任何请求都会匹配到
顺序 no优先级
(location =) > (location 完整路径 ) > (location ^~ 路径 ) > (location ~,~* 正则顺序 ) > (location 部分起始路径 ) > (/)


负载均衡


upstream bbs_server_pool {

  server   192.168.1.15:80 weight=1max_fails=2fail_timeout=30s;

  server   192.168.1.16:80 weight=1max_fails=2fail_timeout=30s;

  server   192.168.1.17:80 weight=1max_fails=2fail_timeout=30s;

  server   192.168.1.18:80 weight=1max_fails=2fail_timeout=30s;

 }

weight越高权重越高,max_fails指定重试次数,fail_timeout是超时时间


访问控制


location /docs/ {

 ## 禁止192.168.1.1ip访问

 deny    192.168.1.1;

 ##允许 192.168.1.0/24段ip访问

 allow   192.168.1.0/24;

 ## 允许10.10.100.0/16段ip访问

 allow  10.10.100.0/16;

 ## drop禁止所有ip访问

 deny    all;

}

从上到下的顺序。匹配到了便跳出。如上的例子先禁止了192.16.1.1,接下来允许了2个网段,最后未匹配的IP全部禁止访问.


缓存配置


location ^~ /static/activity/ {

                alias /static/activity/;

                expires      3d; 

               #expires      1h;

}

expires可以配置缓存时间,但是开发 / 测试环境尽量不用,否则可能造成新代码不生效


灰度环境的实现方式


app端 / wap端访问app服务端时,在http请求的header中设置 dangdang_umark =1

set $group "app_default";

if ($http_dangdang_umark = 0) {

  set $group "app_normal";

}

if ($http_dangdang_umark = 1) {

  set $group "app_huidu";

}

web端 / wap端访问自身服务时,在cookie中种入dangdang_umark =1

 set $group "tomcat_default";

 if($http_cookie ~* "dangdang_umark=0") {

                 set $group "tomcat_dangdang";

}

if ($http_cookie ~* "dangdang_umark=1") {

                 set $group "tomcat_huidu";

}


Nginx日志


error_log :

error_log 级别分为 debug, info, notice, warn, error, crit   默认为crit

error_log /opt/nginx/logs/nginx_error.log crit;

access_log :

配置格式如下

log_format access  '$remote_addr - $remote_user [$time_local] "$request" '

              '$status $body_bytes_sent "$http_referer" '

              '"$http_user_agent" - $http_x_forwarded_for - $http_x_real_ip - "$request_time"' ;

配置地址如下

access_log /opt/nginx/logs/access_log access;

可在http 或 server中配置。

$ remote_addr , $ http_x_forwarded_for 记录客户端IP地址
$ remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$ body_bytes_sent 发送给客户端的字节数,不包括响应头的大小 ; 该变量与Apache模块mod_log_ config里的 “% B”参数兼容
$ bytes_sent 发送给客户端的总字节数
$connection 连接的序列号
$ connection_requests 当前通过一个连接获得的请求数量
$ msec 日志写入时间。单位为秒,精度是毫秒
$pipe 如果请求是通过HTTP流水线 (pipelined)发送,pipe值为“p”, 否则为 “.”。
$ http_referer 记录从哪个页面链接访问过来的
$ http_user_agent 记录客户端浏览器相关信息
$ request_length 请求的长度(包括请求行,请求头和请求正文 )。
$ request_time 请求处理时间,单位为秒,精度毫秒 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止
$ time_local 通用日志格式下的本地时间


Nginx服务常用命令


1.*TEST* 测试配置文件是否正确

sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

2.启动

sbin/nginx -c /usr/local/nginx/conf/nginx.conf

3.重载配置文件

sbin/nginx -s reload

4.停止

sbin/nginx -s stop


参考文档


nginx入门ppt:http ://blog.csdn.net/mdl13412/article/details/26397881
nginx官方优化文档 : https://www.nginx.com/blog/tuning-nginx/
nginx配置location总结及rewrite规则写法 :http://seanlook.com/2015/05/17/nginx-location-rewrite/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值