Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,它由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,其特点是占有内存少,并发能力强、模块化设计,有较好的扩展性、高可靠性、支持热部署等。
下面我们基于源码编译的方式进行安装
从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正常运行时配置说明
1、user USERNAE [GROUPNAME];指定运行worker进程的用户和组
示例:user nginx nginx;
2、pid /path/to/pid_file; 指定nginx守护进程的pid文件
示例:pid /var/run/nginx/nginx.pid;
3、worker_rlimit_nofile #; 指定所有worker进程所能够打开的最大文件句柄数
2)性能优化相关的配置:
1、worker_processes #; worker进程的个数,通常应该略少于cpu物理核心数;
2、worker_cpu_affinity cpumask ...; 提升[cpu]缓存命中率
cpumask:cpu掩码
示例:worker_cpu_affinity 00000001 00000010 00000100; [绑定前3颗cpu]
3、time_resolution 计时器解析度,降低此值,可减少gettimeofday()系统调用的次数
4、worker_priority number; 指明worker进程的nice值(-20,19100,139)
3)事件相关的配置
1、accept_mutex {off|on}; master调度用户请求至各worker进程时使用的负载均衡锁,on表示能让多个 worker轮流地、序列化地去响应新请求
2、lock_file file; accept_mutex用到的索文件路径
3、use [epoll|rtsig|select|poll]; 指明使用的事件模型,建议让Nginx自行选择
4、worker_connections #; 设定单个worker进程所能够处理的最大并发连接数量
worker_connections * work_processes
4)用于调试、定位问题
1、daemon {on|off}; 是否以守护进程方式运行nginx,调试时应该设置为off,其它情况为on
2、master_process {on|off}; 是否以master/worker模型来运行nginx,调试时可以设置为off
3、error_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相关的指令仅能够放置于http、server、location、upstream、if上下文,但有些指令仅应用于这5种上下文中的某些种
准备:
# mkdir /vhosts/www 用于存放主页目录
# vim index.html 在主页目录下提供主页文件
1、server {} 定义一个虚拟主机
例:server {
listen 8080;
server_name www.a.com;
root "/vhosts/www";
}
测试访问结果:
2、listen 指定监听的地址和端口
listen address [:port];
listen port;
3、server_name NAME [...];
后可跟多个主机,名称还可以使用正则表达式(使用~开头进行引导)或通配符;
1)先做精确匹配检查
2)左侧通配符匹配检查,如*.magedu.com
3)右侧通配符匹配检查,如mail.*
4)正则表达式匹配检查,如~^.*\.magedu\.com$
5)default_server
例:server {
listen 172.16.15.3:8080;
server_name www.a.com;
root /vhosts/www;
}
注意:每次修改完配置后要进行语法测试,并用-s reload来重新加载配置如图
4、root path; 设置资源路径映射,用于指明请求的URL所对应的资源所在的文件系统上的起始路径
5、location [ = | ~ | ~* | ^~ | 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;
}
}
6、alias 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;
}
}
测试如下
9、基于IP的访问控制
allow IP/Network
deny IP/Network
10、基于用户的访问控制,basic和digest
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