环境说明:Centos6.6_64、Vmware11和nginx-1.8.0

一、nginx说明

  Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

二、编译安装 

#yum install pcre-devel 安装pcre-devel

# useradd -r nginx  创建nginx用户   

#./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi

# make && make install 安装

# mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi,uwsgi} 创建目录

#/usr/local/nginx/sbin/nginx启动服务

#ss -tnl 查看80端口

wKiom1VhYuqg9guvAABLTb-eEDE580.jpg

使用浏览器查看nginx是否安装成功(http://192.168.84.101),出现如下显示则nginx安装成功。

wKiom1VhZJ2RZZZbAAE18oDaMck550.jpg

三、配置文件说明

nginx配置文件/etc/nginx/nginx.conf

配置文件:

    main配置段:全局配置段

          event:定义event模型工作特性

    http{}:定义http协议相关的配置  

    配置指令:要以分号结尾,语法格式;

        directive value1 [value2...]

    支持使用变量:

        内置变量:

            模块会提供几个变量定义

        自定义变量:

           set var_name  value     

    主配置段的指令:

        用于调试、定位问题

        正常运行必备的配置

        优化性能的配置             

        事件相关的配置  

四、Nginx作为web服务器时使用的配置

     http{}:由ngx_http_core_module模块所引入

     配置框架:

     http {

       upstream{...}

       server{

        location URL{

                    root "/path/to/somedir";

                    }#类似于httpd中的<location>,用于定义URL于本地系统的映射关系 

            location URL {

             if ...{

               ...

               }

        } 

            }#每个server类似于httpd中的一个<VirtualHost>;

       server{

       ...

       }

     

     }

注意:与http相关的指令仅能够放置于http、server、location、upstream、if上下文,但有些指令仅应用于这5种上下文中的某些种;

  1. server的设置,

    server {

    listen 8080; 

    server_name www.wmz.com

      root "/web/vhosts/web1"

说明:listen为监听端口

     server_name为hostname

     root为文件起始页存放位置,相当于http中的DocumentRoot

2.listen

     指定监听的地址和端口

       listen address[:prt];

       listen port;

3.server_name NAME [...];

      后可跟多个主机;名称还可以使用正则表达式(~)或通配符

      (1)先做精确匹配检查

      (2)左侧通配符匹配检查,*.magedu.com

      (3)右侧通配符匹配检查,mail.*

      (4)做正则表达式匹配检查,~^.*\.magedu\.com$

4.location

功能:允许根据用户请求的URI来匹配定义的各location;匹配到时,此请求将被相应的location配置块中      的配置所处理,例如做访问控制等功能

     =:精确匹配检查

     ~:正则表达式模式匹配检查,区分字符大小写

     ~*:正则表达式模式匹配检查,不区分字符大小写  

     ^~:URI的前半部分匹配,不支持正则表达式

     

     匹配的优先级:=、^~、~、~*、不带任何符号的location

 server {

listen 80;

server_name www.wmz.com;

location / {

  root "/web/vhosts/web1";

    }

                        location /p_w_picpaths/ {

  root "/vhosts/p_w_picpaths";

 }

                        location ~* \.php$ {

 fcgipass 

}

}

                        http://www.wmz.com/bbs/index.php

5.alias path;

     用于location配置段,定义路径别名

     location /p_w_picpaths/ {

root "/web/vhosts/web1";

}

    http://www.wmz.com/p_w_picpaths/a.jpg <-- /web/vhosts/web1/p_w_picpaths/a.jpg

wKioL1Vha3fhqTlRAADCj-68KoY852.jpg

     location /p_w_picpath/ {

alias "/www/pictures/";

}

    http://www.wmz/p_w_picpath/a.jpg <-- /www/picuters/a.jpg

wKiom1VhagORSU1sAADCj-68KoY484.jpg

6.index file;

       设置默认主页面

          index index.php index.html;

7.error_page code [...][=code] URI | @name

      根据http响应状态码来指明特用的错误页面

      error_page 404 /404_customed.html

      [=code]:以指定的响应码进行响应,而不是默认的原来的响应,默认表示以新资源的响应

8.基于iP的访问控制

   allow all IP/Network;

   deny  all IP/Network;

   例如allow all 192.168.0.0/24;

       deny    192.168.100.6;

9.基于用户的访问控制

     basic,digest;

     auth_basic "";

     auth_basic_user_file "/PATH/TO/PASSWORD_FILE";

         账号密码文件建议使用htpasswd来创建

编辑/etc/nginx/nginx.conf

wKioL1VhcbeRrSsuAACbmBClZ9E697.jpg

添加账号和密码

wKiom1VhcDmwcGRsAADGv1S5hRs649.jpg

在浏览器中测试

wKioL1VhciXga2SvAAEXVL_yzsM552.jpg

出现此提示框,则添加用户访问控制成功

10.https服务

     生成私钥,生成证书签署请求,并获得证书

     server {

 listen       443 ssl;

 server_name  www.wmz.com;


ssl_certificate      /etc/nginx/ssl/nginx.crt;

ssl_certificate_key  /etc/nginx/ssl/nginx.key;


ssl_session_cache    shared:SSL:1m;

ssl_session_timeout  5m;


ssl_ciphers  HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers  on;


location / {

 root  /web/vhosts/web1;

 index  index.html index.htm;

  }

}

11、stub_status状态页

     stub_status{on|off};

      仅能用于location上下文

      location /status {

stub_status on;

allow 192.168.0.0/16;

 deny all;

       }

wKiom1Vhcv2xiH5YAADI9lmk6qM380.jpg

结果说明:

Active connections: 1   # 当前所有处于打开状态的连接数; 

server accepts handled requests  

19 19 30 

(1) 已经接受过的连接数

(2) 已经处理过的连接数

(3) 已经处理过的请求数;在“保持连接”模式下,请求数量可能会多于连接数量;

   Reading: 0 Writing: 1 Waiting: 5

   Reading:正处于接收请求状态的连接数;

   Writing: 请求已经接收完成,正处于处理请求或发送响应的过程中的连接数;

   Waiting:保持连接模式,且处于活动状态的连接数;

12、rewrite regex replacement flag;

      例如:

          rewrite ^/p_w_picpaths/(.*\.jpg)$ /imgs/$1 break;

          http://www.magedu.com/p_w_picpaths/a/b/c/1.jpg-->http://www.magedu.com/a/b/c/imgs/1.jpg

flag:

last:一旦此rewrite规则重写完成后,不再被后面其它的rewrite规则进行处理,而是由User Agent重新      对重写的URL再一次发起请求,并从头开始执行类似的过程

break:一旦此rewrite规则重写完成后,由User Agent对新的URL重新发起请求,且不再会被当location      内的任何rewrite规则所检查

       redirect:以302响应码(临时重定向)返回新的URL;

       permanent:以301响应码(永久重定向)返回新规则;

 13、if

    语法:if (condition) {...}

      应用环境:server,location

      condition:

         (1)变量名

            变量值为空串,或者以0开始,则为false;其它的均为true

         (2)以变量为操作数构成的比较表达式

            可使用=,!=类似的比较操作符进行测试

         (3)正则表达式的模式匹配操作

            ~:区分大小写的模式匹配检查

            ~*:不区分大小写的模式匹配检查

            !~和!~*:对上面两种测试取反

         (4)测试文件可能性:-f,!-f

         (5)测试指定路径为目录的可能性:-d,!-d

         (6)测试文件的存在性:-e,!-e

         (7)检查文件是否有执行权限:-x,!-x

         例如:

if ($http_user_agent ~* MSIE) {

  rewrite ^(.*)$ /msie/$1 break;

}


14、防盗链

    location ~* \.(jpg|gif|jpeg|png)$ {

valid_referer none blocked www.magedu.com;

 if ($invalid_referer) {

rewrite ^/  http://www.wmz.com/403.html;

}

}             

15、定制访问日志格式

    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;

                         注意:此处可用变量为nginx各模块内建变量;

本文对nginx进行了比较基础的讲解。(注:在进行测试时,请关闭防火墙#service iptables stop)