1 页面登录权限
2 显示nginx状态信息
3 访问权限控制
可以设置白名单和黑名单
allow 192.168.75.139;
deny all;
4 rewirte 重写
last
break 中止rewrite,不在 继续匹配
redirect 返回 临时 重定向的http状态302
permanent 返回永久重定向的http状态301
rewrite ^/shop/(.*\.html)$ /tuangou/$1 break;
rewrite ^/shop/(.*\.php)$ http://www.dianping.com/ redirect;
if
语法:if (condition){...}
应用环境:server,location
if ($http_user_agent ~ Chrome){
rewrite ^(.*)$ /chrome/$1 break;
}
匹配用户浏览器
main配置段
http {
}
http配置:http core 配置一个静态web服务器
ngx_http_core_module
配置框架:
http {
upstream {
.,..
}
server {
listen IP:PORT;
# 虚拟主机
location /URL {
if ...{
...
}
root "/path/to/somewhere";
...
}
}
server {
,,.
}
}
注意:与http配置相关的指令必须放在http、server、location、upstream、if块中;
虚拟主机相关的配置:
1、server {}
定义一个虚拟主机;
2、listen
监听的端口
完整格式 :listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen address[:port] [default_server] ssl
backlog=number: 指明TCP协议backlog队列的大小。默认为-1,表示不设置;
rcvbuf=size:设定监听句柄的SO_RCVBUF参数;
例如:
listen 172.16.100.8:8080
3、server_name name [...];
后可跟多个主机名;名称还可以使用通配符和正则表达式(~);
(1) 先做精确匹配;www.captain.com:
(2) 左侧通配符匹配,例如:*.captain.com;
(3) 右侧通配符匹配,例如:www.*;
(4) 正则表达式匹配,例如: ~^.*\.captain\.com$
(5) default_server
4、location [=|~|~*|^~] /uri {...}
location @name
功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;
=: 精确匹配检查;
~: 正则表达式模式匹配,区分字符大小写;
~*:正则表达式模式 匹配,不区分字符大小写;
^~:URI的前半部分匹配,不检查正则表达式;
匹配优先级:精确匹配(=)、^~、~和~*、由不带符号的URL进行左侧匹配;
5、root
设置web资源路径映射;用于指明请求的URL所对应的文档的根目录路径;
location /images/ {
root "/web/imgs/";
}
6、alias path
用于location配置段,定义路径别名
location /images/ {
alias /www/pictures/;
}
注意:root表示指明路径为对应location的“ /” URL;alias表示路径映射,即location中的URL是相对于alias所指明的路径而言;
7、index file
默认主页面
index index.html;
8、error_page code [...] [=code] URI | @name
根据http状态码重定向错误页面
error_page 404 /404.html
=[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;
9、基于IP的访问控制
allow IP/Network
deny IP/Network
10、基于用户的访问控制
basec,digest
auth_basic “”;
auth_basic_user_file "/PATH/TO/PASSWORD_FILE"
账号密码文件建议使用htppasswd来创建
htpasswd -c -m /PATH/TO/PASSWORD_FILE username
#htpasswd -c -m /usr/local/nginx/conf/.htpasswd captain
11、https服务
生成私钥,生成证书签署请求,并获得证书;
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
ssl
#cd /etc/pki/CA
#(umask 077;openssl genrsa -out private/cakey.pem 2048)
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
>CN
>HA
>ZZ
>Captain
>Ops
>ca.captian.com
>caadmin@captain.com
#ls
cacert.pem
#touch serial index.txt
#echo 01 > serial
#cd /usr/local/nginx/conf/
#mkdir ssl
#cd ssl
#(umask 077;openssl genrsa -out nginx.key 1024)
#openssl req -new -key nginx.key -out nginx.csr
>CN
>HA
>ZZ
>Captain
>Ops
>www.captain.com
>webadmin@captain.com
12、stub_status {on|off};
仅能用于location上下文;
location /status {
stub_status on;
allow IP;
deny all;
}
结果实例:
Active connections: 2 #当前所有处于打开状态的连接数
server accepts handled requests
16 16 84
1)已经接受过的连接数
2)已经处理过的连接数
3)已经处理过的请求数;在“保持连接”模式下,请求数量可能会多于链接数量
Reading: 0 Writing: 1 Waiting: 1
reading:正处于接受请求状态的连接数;
Writing:请求已经接受完成,正处于处理请求或发送响应的过程中的连接数;
Waiting:保持连接模式,且处于活动状态的连接数;
13、rewrite regex replacement flag;
例如:
...
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
...
http://www.captain.com/images/a/b/c/1.jpg --> http://www.captain.com/imgs/a/b/c/1.jpg
flag:
last:此rewrite规则重写完成后,就不再被后面其它的rewrite规则进行处理;而是由user Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的执行过程
break:一旦此rewrite规则重写完成后,由User Agent对新的URL重新发起请求,且不再会被当前location内的任何rewrite规则所检查;
redirect:以302响应码(临时重定向)返回新的URL;
permanent:以301响应码(永久重定向)返回新的URL;
14、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;
}
15、防盗链
location ~* \.(jpg|gif|jpeg|png)$ {
valid_referer none block www.captain.com; #合法引用者
if ($invalid_referer) {
rewrite ^/ http://www.captain.com/403.html;
}
}
16、定制访问日志格式
log_format www '$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 www; #www是格式名称
注意:此处可用变量为nginx各模块内建变量;
网络连接相关的配置:
1、keepalive_timeout time;
保持连接的超时时长,默认为75s;
2、keepalive_requests #;
在一次保持连接上允许承载最大资源请求数;
3、keepalive_disable [msie6|safari|none]
为指定类型的浏览器禁用长连接;
4、tcp_nodelay on|off
对长连接是否使用TCP_NODELAY选项;
5、client_header_timeout #;
读取http请求报文首部的超时时长;
6、client_body_timeout #;
读取http请求报文body部分的超时时长;
7、send_timeout #;
发送响应报文的超时时长;
fastcgi的相关配置:
LNMP:php启用fpm模型
cp命令技巧:cp nginx {,.bak}