环境说明: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端口
使用浏览器查看nginx是否安装成功(http://192.168.84.101),出现如下显示则nginx安装成功。
三、配置文件说明
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种上下文中的某些种;
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
location /p_w_picpath/ {
alias "/www/pictures/";
}
http://www.wmz/p_w_picpath/a.jpg <-- /www/picuters/a.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
添加账号和密码
在浏览器中测试
出现此提示框,则添加用户访问控制成功
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;
}
结果说明:
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)