目录:
nginx作为web服务器时使用的配置.
网络连接相关的配置:
正文:
一、nginx作为web服务器时使用的配置.
1. http配置段:
Syntax: http { ... }
Default: —Context: mainhttp{}: 由ngx_http_core_module模块所引入;
Documentation: http://nginx.org/en/docs/http/ngx_http_core_module.html#http
2. server配置段:
Syntax: server { ... }
Default: —Context: httpserver{}: 由ngx_http_core_module模块所引入;
Documentation:http://nginx.org/en/docs/http/ngx_http_core_module.html#server
3. location配置段:
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }Default: —Context: server, locationlocation{}: 由ngx_http_core_module模块所引入;
4. 配置框架:
http { upstream { ... } server { location { root "/path/to/somedir"; ... } # 类似于httpd中的,用于定义URL与本地文件系统的映射关系; 一个server里面可以指定多个location; location URL { if ... { ... } } } # 每个server类似于httpd中的一个 ; server { ... } }
注:
http与http相关的指令仅能够放置于http, server, location, upstream, if 上下文,但有些指令仅应用于这5种上下文中的某些之中;
为了区分和方便管理每个server段,常用"include FILE_PATH"引用;
例:
http { ... include server.conf; //此处配置文件server.conf使用的是相对路径,是相对于根路径/usr/local/nginx而言的;}
3. 配置指令:
1) server {};
作用: 定义一个虚拟主机;server { listen 8080; server_name www.yangbin.com; root "/Web/html"; }
2) listen
作用: 指定监听的地址和端口;
listen ADDRESS[:PORT]listen PORT;
3) server_name NAME [...];
作用: 后面可跟多个主机,名称还可以使用正则表达式(~)或通配符:(~开头)匹配规则: (1) 先做精确匹配检查; (2) 左侧通配符匹配检查:*.yangbin.com (3) 右侧通配符匹配检查:如mail.* (4) 正则表达式匹配检查:如~^.*\.yangbin\.com$ (5) default_server;例:
server { server_name www.yangbin.com;} server { server_name *.yangbin.com;} server { server_name mail.*; }
4) root path;
作用: 设置资源路径映射,用于指明请求的URL所对应的资源所在的文件系统上的起始路径; 放置范围越大,生效范围越小;5) location [ = | ~ | ~* | ^~ ] uri {...}
location @name { ... }功能:允许根据用户请求的URL来匹配定义的各location,匹配到时,此请求将被相应的location配 置块中的配置所处理,例如做访问控制等功能;匹配规则:
1) =: 精确匹配检查; 2) ~: 正则表达式模式匹配检查,区分字符大小写; 3) ~*: 正则表达式模块匹配检查,不区分字符大小写; 4) ^~: URI的前半部分匹配,不支持正则表达式;匹配的优先级:精确匹配(=),^~,~,~*,不带任何符号的location; 即先匹配普通,再匹配正则;
例:
server { listen 80; server_name www.yangbin.com; location / { root "/Web/html/"; index index.html index.htm; } location /p_w_picpaths/ { root "/Web/p_w_picpaths/"; } //上面两行其实表示的完整路径是/Web/p_w_picpaths/p_w_picpaths //目录名后面一定要加"/". location ~* \.php$ { fcgipass; } }
如:
/Web/p_w_picpaths下有个xx.png,访问时: http://10.68.7.223/p_w_picpaths/p_w_picpaths/xx.png即可,注意与第一部分/的那个区分开。
出错可查看相应error日志和access日志;6) alias path;
作用:用于location配置段,定义路径别名;
location /p_w_picpaths/ { root "/Web/web1"; }location /p_w_picpaths/{ alias "/www/pictures"; } //此处访问/p_w_picpaths/xx.html,就是访问的/www/pictures/xx.html.
注:
root表示指明路径为对应的location "/" URL;
alias表示路径映射, 即location指令后定义的URL是相对于alias所指明的路径而言; 一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯. 例:One. location ~ ^/awstats/ { alias /Web/ } 访问:http://yangbin.com/awstats/ 实际访问的是http://yangbin.com/Web/ First. location ~ ^/awstats/ { #使用alias时目录名后面一定要加“/” alias /Web/awstats/; } 访问:http://yangbin.com/awstats/ 实际访问的是http://yangbin.com/Web/awstats/ Third. location ~ ^/awstats/ { root /Web/; } 访问:http://yangbin.com/awstats/ 实际访问的是http://yangbin.com/web/awstats/
7) index file;
作用: 设置默认主页面;index index.php index.html;
8) error_page code [...] [=code] URI | @name
作用: 根据http响应状态码来指明特定的错误页面;error_page 404 /404_customed.html; //即把404错误的页面设定为我们自己指定的页面;
[=code]: 以指明的响应码进行响应,而非默认的原来的响应,默认表示以新资源的响应码为其响应码;
例:在server段配置server{ ... fastcgi_intercept_errors on; error_page 404 /309.html; //此处的/309.html是相对于网站根目录而言的,即 location / 对应的root路径. location / { root "/web/www"; } }[root@nginx nginx]# ls /Web/www/309.html index.html[root@nginx nginx]#
总结:
fastcgi_intercept_errors语法:fastcgi_intercept_errors on|off 默认值:fastcgi_intercept_errors off 使用字段:http, server, location 该指令指定是否传递4xx和5xx错误信息到客户端,或允许nginx使用error_page处理错误信息。必须明确在error_page中指定处理方法使这个参数有效。9) 基于IP的访问控制:
allow IP/Network; deny IP/Network;示例:
location /js/ { root /Web/www/; allow 10.68.7.0/24; deny all; }
10) 基于用户的访问控制
语法: auth_basic STRING | off;
默认值: auth_basic off;配置段: http, server, location, limit_except默认表示不开启认证,后面如果跟上字符,这些字符会在弹窗中显示。
语法: auth_basic_user_file "/PATH/TO/PASSWORD_FILE";
默认值: —配置段: http, server, location, limit_except可使用相对路径.账号密码文件建议使用htpasswd来创建;
htpasswd命令需要安装apache httpd服务获得.
示例:
[root@nginx nginx]# which htpasswd/usr/bin/htpasswd [root@nginx nginx]# htpasswd --help [root@nginx nginx]# id yangbinuid=1000(yangbin) gid=1000(yangbin) 组=1000(yangbin)[root@nginx nginx]# htpasswd -cm conf/htpasswd/.htpasswd yangbinNew password: Re-type new password: Adding password for user yangbin[root@nginx nginx]# ll ./htpasswd/ -a总用量 4drwxr-xr-x. 2 root root 23 1月 12 16:07 .drwxr-xr-x. 13 root root 182 1月 12 16:06 ..-rw-r--r--. 1 root root 46 1月 12 16:07 .htpasswd[root@nginx nginx]# chown nginx:root ./htpasswd/.htpasswd
[root@nginx nginx]# vim conf/server.conf ... location /p_w_picpaths/ { alias /Web/p_w_picpaths/; auth_basic INPUT_PASSWORD; auth_basic_user_file htpasswd/.htpasswd; } ...[root@nginx nginx]# ./sbin/nginx -s reload
浏览器访问:
完成!
11) https服务
实现方法:生成私钥, 生成证书签署请求,并获得证书; 例:server { listen 443 ssl; server_name localhost; ssl_certificate /usr/local/nginx/ssl/nginx.crt; ssl_certificate_key /usr/local/nginx/ssl/nginx.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; }
https的具体配置过程,我在lvs那一篇博客有写,这里不再重复了.
12) stub_status {on|off}
Context:
仅用于location上下文;作用: 主要用于查看Nginx的一些状态信息.本模块默认是不会编译进Nginx的,如果要使用该模块,则要在编译安装Nginx时指定: 例:
[root@nginx nginx-1.10.2]# pwd/mnt/tools/nginx-1.10.2[root@nginx nginx-1.10.2]# ./configure --help |egrep "stub" --with-http_stub_status_module enable ngx_http_stub_status_module[root@nginx nginx-1.10.2]# ./configure –with-http_stub_status_module
查看已安装的Nginx是否包含"stub_status"模块:
#/usr/local/nginx/sbin/nginx -V
结果示例:
server { listen 80; server_name yangbin.com; location / { root "/web/www"; stub_status on; }}
[root@nginx ~]# curl 10.68.7.223Active connections: 6server accepts handled requests 241 241 431 Reading: 0 Writing: 1 Waiting: 0 [root@nginx ~]#
说明:
(1) Active connections: 6 # 当前所有处于打开状态的连接数;
(2) server accepts handled requests (3) 241 241 431 241 已经接受过的连接数 241 已经处理过的连接数 431 已经处理过的请求数: 在"保持连接"模式下,请求数量可能会多于连接数量;(4)Reading: 0 Writing:1 Waiting:5 Reading: 正处于接收请求状态的连接数;Nginx 读取到客户端的Header信息数,即连接数; Writing: 请求已经接收完成,正处于处理请求或发送响应的过程中的连接数;Nginx 返回给客户端的Header信息数.即响应数据到客户端的数量; waiting: 保持连接模式,且处于活动状态的连接数; 开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是Nginx已经处理完成,正在等候下一次请求指令的驻留连接.13) rewrite regex replacement flags;作用:路由重写是Web服务器中的一个很重要的基本功能。通过路由重写,可以结构化URL,更具语义化(对SEO有益)。另外,分享出去的URL可能会因程序路由变动而导致URL失效,而路由的重写可以很好的解决这类问题。
regex: 用于匹配URI的正则表达式。使用括号"()"标记要截取的内容。使用环境:server, location, if注:该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效;例:
rewrite ^/p_w_picpaths/(.*\.jpg)$ /imgs/$1 break; http://www.magedu.com/p_w_picpaths/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg
flags:
1) last: 一旦此rewrite规则重写完成后,就不再被后面其他的rewrite规则进行处理,而是由User Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程; 2) break: 一旦此rewrite规则重写完成后,由User Agent对新的URL重新发起请求,且不会再被当前location内的任何rewrite规则所检查; 3) redirect: 以302响应码(临时重定向)返回新的URL. 4) permanent: 以301响应码(永久重定向)返回新的URL;14) if
语法: if (condition){...} 应用环境: server, location condition:(1) 变量名: 变量值为空串,或者以"0"开始,则为false; 其他的均为true; (2) 以变量为操作数构成的比较表达式; 可使用=,!=类似的比较操作符进行测试;(3) 正则表达式的模式匹配操作: ~: 区分大小写的模式匹配检查; ~*: 不区分大小写的模式匹配检查; !~和!~*: 对上面两种测试取反; (4) 测试路径为文件可能性: -f, !-f (5) 测试指定路径为目录的可能性: (6) 测试文件的存在性: -e, !-e (7) 检查文件是否有执行权限: -x, !-x 例如:if($http_user_agent ~* MSIE) { rewrite ^(.*)$ /msie/$1 break; }
15) 图片防盗链;
语法: valid_referers none | blocked | server_names | string ...;
默认值: —配置段: server, location作用: 指定合法的来源'referer',它决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1.此变量不区分大小写.参数说明:
none: "Referer"来源头部为空的情况
blocked: "Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头.server_names: "Referer"来源头部包含当前的server_names(当前域名)arbitrary string: 任意字符串,定义服务器名或者可选的URI前缀.主机名可以使用*开头或者结尾,在检测来源头部这个过程中,来源域名中的主机端口将会被忽略掉regular expression: 正则表达式,~表示排除https://或http://开头的字符串.location ~* \.(jpg|gif|jpeg|png)$ {
valid_referer none blocked www.yangbin.com; if ($invalid_referer) { rewrite ^/ http://www.yangbin.com/403.html; }
16) 定制访问日志格式;
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各模块内建变量;
二、网络连接相关的配置:
1. keepalive_timeout TIME; 长连接的超时时长,默认是75s; 2. keepalive_requests N; 在一个长连接上所能允许请求的最大资源数; 3. keepalive_disable [msie6|safari|none]; 位指定类型的User Agent禁用长连接; 4. tcp_nodelay on|off; 是否对长连接使用TCP_NODELAY选项; 5. client_header_timeout TIME; 读取http请求报文首部的超时时长;
6. client_body_timeout TIME; 读取http请求报文body部分的超时时长; 7. send_timeout TIME; 发送响应报文的超时时长;
--- 第二部分完成!