Nginx

liunx 下载nginx

  • 1、使用yum安装nginx需要包括Nginx的库,安装Nginx的库
// 终端命令
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  • 2、安装nginx
// 终端命令
yum install nginx

  • 3、Nginx指令
// 启动nginx
service nginx start
// 停止nginx
service nginx stop
// 重新启动nginx
service nginx reload 
  • 4 nginx基本配置( nginx的注释是#而不是//)
// 定义Nginx运行的用户和用户组,系统中必须有此用户,可以是nologin
#user  nobody;
// 动进程,通常设置成和cpu的数量相等
worker_processes  1;

// 全局错误日志及PID文件(默认是注释的)
// 错误日志定义等级,[ debug | info | notice | warn | error | crit ]

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;


events {
    // epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
    use   epoll;
    // 单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)
    worker_connections  1024;
}


http {
    // 设定mime类型,类型由mime.type文件定义
    include       mime.types;
    default_type  application/octet-stream;
    
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    // 设定日志格式,指定存放日子的路径(默认是注释的)
    #access_log  logs/access.log  main;
    
    // sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.

    sendfile        on;
    #tcp_nopush     on;
    
    // 连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;

    // 开启gzip压缩(默认是注释,使用的时候要打开)
    #gzip  on;
    #gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    #设定请求缓冲
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;
    
    #包含其它配置文件,如自定义的虚拟主机
    include /etc/nginx/conf.d/*.conf
}
  • 5、虚拟主机配置
server {
        // 监听端口
        listen       8080;
        // 使用的 localhost 访问
        server_name  localhost;

        #charset koi8-r;
        
        // 设定本虚拟主机的访问日志
        #access_log  logs/host.access.log  main;

        location / {
            // 定义服务器的默认网站根目录位置
            root   /Users/jackteng/code/ouyangshiping;
            // 定义首页索引文件的名称
            index  index.html index.htm;
        }

        #error_page  404              /404.html;
        
        // 定义错误提示页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        #静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            root  /Users/jackteng/code/ouyangshiping;
        #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
            expires 30d;
        }
    }
  • 6、nginx的负载均衡和代理配置
http {
    // 设定mime类型,类型由mime.type文件定义
    include       mime.types;
    default_type  application/octet-stream;
    
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    // 设定日志格式,指定存放日子的路径(默认是注释的)
    #access_log  logs/access.log  main;
    
    // sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.

    sendfile        on;
    #tcp_nopush     on;
    
    // 连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;

    // 开启gzip压缩(默认是注释,使用的时候要打开)
    #gzip  on;
    #gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    // 设定请求缓冲
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;
    
    // 设定负载均衡的服务器列表
    upstream mysvr {
        // weigth参数表示权值,权值越高被分配到的几率越大
        server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口
        server 192.168.8.2x:80  weight=1;
        server 192.168.8.3x:80  weight=6;
    }
    upstream mysvr2 {
        // weigth参数表示权值,权值越高被分配到的几率越大
        server 192.168.8.x:80  weight=1;
        server 192.168.8.x:80  weight=6;
    }

    // 包含其它配置文件,如自定义的虚拟主机
    include /etc/nginx/conf.d/*.conf
}
  • 7、第一个虚拟服务器
server {
    // 监听192.168.8.x的80端口
    listen       80;
    server_name  localhost;
    // 对aspx后缀的进行负载均衡请求
    location ~ .*\.aspx$ {
          // 定义服务器的默认网站根目录位置
          root   //Users/jackteng/code/ouyangshiping;  
          // 定义首页索引文件的名称
          index index.php index.html index.htm;     
          // 请求转向mysvr
          proxy_pass  http://mysvr ; 
          // 定义的服务器列表
          // 以下是一些反向代理的配置.
          proxy_redirect off;
          // 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          // 允许客户端请求的最大单文件字节数
          client_max_body_size 10m;
          // 缓冲区代理缓冲用户端请求的最大字节数,
          client_body_buffer_size 128k;
          // nginx跟后端服务器连接超时时间(代理连接超时)
          proxy_connect_timeout 90;   
          // 后端服务器数据回传时间(代理发送超时)
          proxy_send_timeout 90;      
          // 连接成功后,后端服务器响应时间(代理接收超时)
          proxy_read_timeout 90;      
          // 设置代理服务器(nginx)保存用户头信息的缓冲区大小
          proxy_buffer_size 4k;        
          // proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
          proxy_buffers 4 32k;
          // 高负荷下缓冲大小(proxy_buffers*2)
          proxy_busy_buffers_size 64k;   
          // 设定缓存文件夹大小,大于这个值,将从upstream服务器传
          proxy_temp_file_write_size 64k;
    }
}
  • nginx的location配置
范例:location [=|~|~*|^~] /uri/ { ... }
1)= 表示精确匹配,这个优先级也是最高的

2)^~ 表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa 匹配到(注意是空格)

3)~ 表示区分大小写的正则匹配

4)~* 表示不区分大小写的正则匹配(和上面的唯一区别就是大小写)

5)!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则

6)/ 通用匹配,任何请求都会匹配到,默认匹配
  • 匹配的优先级
优先级(=) > (^~) > (~|~*|!~|!~*) > (/)
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

  • 范例
location  = / {
  # 精确匹配 / ,主机名后面不能带任何字符串
  [ configuration A ]
}

location  / {
  # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
  # 但是正则和最长字符串会优先匹配
  [ configuration B ]
}

location /documents/ {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration C ]
}

location ~ /documents/Abc {
  # 匹配任何以 /documents/Abc 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration CC ]
}

location ^~ /images/ {
  # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
  [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
  # 匹配所有以 gif,jpg或jpeg 结尾的请求
  # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
  [ configuration E ]
}

location /images/ {
  # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
  [ configuration F ]
}

location /images/abc {
  # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
  # F与G的放置顺序是没有关系的
  [ configuration G ]
}

location ~ /images/abc/ {
  # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
    [ configuration H ]
}

location ~* /js/.*/\.js
  • if指令与全局变量
if判断指令
语法为if(condition){...},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容:
    当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
    直接比较变量和内容时,使用=或!=
    
~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
  • 范例
if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
} //如果UA包含"MSIE",rewrite请求到/msid/目录下

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;
 } //如果cookie匹配正则,设置变量$id等于正则引用部分

if ($request_method = POST) {
    return 405;
} //如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302

if ($slow) {
    limit_rate 10k;
} //限速,$slow可以通过 set 指令设置

if (!-f $request_filename){
    break;
    proxy_pass  http://127.0.0.1;
} //如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查

if ($args ~ post=140){
    rewrite ^ http://example.com/ permanent;
} //如果query string中包含"post=140",永久重定向到example.com

location ~* \.(gif|jpg|png|swf|flv)$ {
    valid_referers none blocked www.jefflei.com www.leizhenfang.com;
    if ($invalid_referer) {
        return 404;
    } //防盗链
}
  • 全局变量
$args :             这个变量等于请求行中的参数,同$query_string
$content_length :   请求头中的Content-length字段。
$content_type :     请求头中的Content-Type字段。
$document_root :    当前请求在root指令中指定的值。
$host :             请求主机头字段,否则为服务器名称。
$http_user_agent :  客户端agent信息
$http_cookie :      客户端cookie信息
$limit_rate :       这个变量可以限制连接速率。
$request_method :   客户端请求的动作,通常为GET或POST。
$remote_addr :      客户端的IP地址。
$remote_port :      客户端的端口。
$remote_user :      已经经过Auth Basic Module验证的用户名。
$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme :           HTTP方法(如http,https)。
$server_protocol :  请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr :      服务器地址,在完成一次系统调用后可以确定这个值。
$server_name :      服务器名称。
$server_port :      请求到达服务器的端口号。
$request_uri :      包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri :              不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri :     与$uri相同。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容