Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,它由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,其特点是占有内存少,并发能力强、模块化设计,有较好的扩展性、高可靠性、支持热部署等。

下面我们基于源码编译的方式进行安装

Nginx编译安装和配置文件详解_配置详解

从Nginx官网(http://nginx.org/)可以看到,目前Nginx官方稳定版已到1.8.0,此处使用的是1.6.2版本,我们下载安装包开始编译。

================================

# tar xf nginx-1.6.2.tar.gz

# cd nginx-1.6.2

# ./configure --help | less    #可查看安装选项帮助信息

# groupadd -r nginx

# useradd -g nginx -r 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 启动Nginx服务

# ss -tnlp      检查80端口是否已监听

LISTEN     0      128                                                  *:80                                                  *:*      users:(("nginx",3542,6),("nginx",3543,6))

 

接下来对主文件进行配置分段介绍:/etc/nginx/nginx.conf

配置文件有以下几部分组成:

main配置段:全局配置段

event:定义event模式型工作特性

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

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

         directive value1 [value2..]

支持使用变量

         内置变量:模块会提供内建变量定义

         自定义变量

                   set var_name value

1)Nginx正常运行时配置说明

1user USERNAE [GROUPNAME];指定运行worker进程的用户和组

         示例:user nginx nginx;         

2pid /path/to/pid_file; 指定nginx守护进程的pid文件

         示例:pid /var/run/nginx/nginx.pid;

3、worker_rlimit_nofile #; 指定所有worker进程所能够打开的最大文件句柄数

 

2)性能优化相关的配置:

1worker_processes #; worker进程的个数,通常应该略少于cpu物理核心数;

2worker_cpu_affinity cpumask ...; 提升[cpu]缓存命中率

                   cpumask:cpu掩码

        示例:worker_cpu_affinity 00000001 00000010 00000100; [绑定前3cpu]

3time_resolution 计时器解析度,降低此值,可减少gettimeofday()系统调用的次数

4worker_priority number; 指明worker进程的nice值(-20,19100,139

3)事件相关的配置

1accept_mutex {off|on}; master调度用户请求至各worker进程时使用的负载均衡锁,on表示能让多个              worker轮流地、序列化地去响应新请求

2lock_file file; accept_mutex用到的索文件路径

3use [epoll|rtsig|select|poll]; 指明使用的事件模型,建议让Nginx自行选择

4worker_connections #; 设定单个worker进程所能够处理的最大并发连接数量

       worker_connections * work_processes

4)用于调试、定位问题

1daemon {on|off}; 是否以守护进程方式运行nginx,调试时应该设置为off,其它情况为on

2master_process {on|off};    是否以master/worker模型来运行nginx,调试时可以设置为off

3error_log file | stderr | syslog:server=assress [,parameter=value] | memory:size [debug | info | notice                 |warn|error | crit | alert | emerg];

5)若要使用debug级别,需要在编译nginx时,启用--with-debug选项

 

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相关的指令仅能够放置于httpserverlocationupstreamif上下文,但有些指令仅应用于这5种上下文中的某些种

准备:

# mkdir /vhosts/www 用于存放主页目录

# vim index.html 在主页目录下提供主页文件

1server {}      定义一个虚拟主机

         例:server {

                            listen 8080;

                            server_name www.a.com;

                            root "/vhosts/www";

                   }

测试访问结果:

   Nginx编译安装和配置文件详解_编译安装_02

2listen  指定监听的地址和端口

                   listen address [:port];

                   listen port;

3server_name NAME [...];     

         后可跟多个主机,名称还可以使用正则表达式(使用~开头进行引导)或通配符;

                   1)先做精确匹配检查

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

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

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

                  5default_server

例:server {

                listen 172.16.15.3:8080;
                server_name www.a.com;
                root /vhosts/www;
}

Nginx编译安装和配置文件详解_编译安装_03

注意:每次修改完配置后要进行语法测试,并用-s reload来重新加载配置如图

Nginx编译安装和配置文件详解_编译安装_04

 

4root path;   设置资源路径映射,用于指明请求的URL所对应的资源所在的文件系统上的起始路径 

5location [ = | ~ | ~* | ^~ | uri { ... }

                   location @name { ... }

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

         =       精确匹配检查

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

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

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

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

 如:

server {

                   listen 80;

                   server_name www.a.com;

                   location / {

                            root "/vhosts/www";

                   }

 

                   location /p_w_picpaths/ {

                            root "/vhosts/p_w_picpaths";

                   }

                  

                   location ~* \.php$ {

                            fcgipass;

                   }

         }

6alias path;   用于location配置段,定义路径别名

 

location /p_w_picpaths/ {

         alias "/www/pictures";

}

 

7、index file;    设置主页面

         例:index index.php index.html;

8、error_pagecode [ ... ] [ =code ] URI | @name 错误页,用于指明那些常见的错误,根据http响应状态码来指明特用的错误页面

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

例:error_page 404 /404_customed.html;

 

server {

                listen 172.16.15.3:8080;
                server_name www.a.com;
        location / {
                root /vhosts/www;
        error_page 404 /404.html;
        }
}

测试如下

Nginx编译安装和配置文件详解_编译安装_05

9、基于IP的访问控制

                 allow IP/Network

         deny IP/Network

 

10、基于用户的访问控制,basicdigest

         auth_basic "";

         auth_basic_user_file "/PATH/TO/PASSWORD_FILE"; //密码文件存放位置

         例:auth_basic "Only For You";

        auth_basic_user_file "/etc/nginx/users";

此处使用htpassd创建密码

         # mkdir /etc/nginx/users

# htpasswd -c -m /etc/nginx/users/.htpasswd tom