1,常用配置
worker_processes 1;#开启线程数,一般和CPU核心数相等即可
access_log logs/access.log;#访问日志,局部也可以设置,将取代全局配置
error_log logs/error.log;#错误日志,局部也可以设置,将取代全局配置
pid logs/nginx.pid;/#本文件,里面就一个数字代表nginx主进程pid
listen 80;#监听端口
server_name www.sheep.com;#监听主机,可以是域名也可以是IP,支持正则表达式
何为监听主机?
一台主机可能有多个IP,一个IP可能有多个域名。
www.domain1.com:81---------->IPa---------->host(nginx)
www.domain2.com:82---------->IPa---------->host(nginx)
www.domain3.com:83---------->IPb---------->host(nginx)
www.domain4.com:84---------->IPb---------->host(nginx)
www.domain5.com:85---------->IPb---------->host(nginx)
其中nginx是同一个nginx,分析你走了哪条线过来的。配置无论是使用域名还是IP,最终都是解析到nginx所在的服务器。
2,Location
这个算是nginx最重要的部分了,语法是location [空|=|~|~*|!~|!~*|^~] /uri/ { … }
我把“[空|=|~|~*|!~|!~*|^~]”这部分看成运算符
再把“/uri/ { … }”这部分看成运算值
2-1,运算符和优先级
a. 为空 未知
b. = 严格精确匹配,多一个符号都不行,不支持正则,一旦成功立刻停止
c. ~ 大小写敏感的匹配,正则
d. ~* 大小写不敏感的匹配,正则
e. !~ 大小写敏感的不匹配,正则
f. !~* 大小写不敏感的不匹配,正则
g. ^~ 大小写不敏感的匹配,不支持正则,一旦成功立刻停止
优先级方面
【=】>【^~】>【~|~*|!~|!~*】>【为空】
并且【=】和【^~】都是一旦遇到成功就停止匹配。其他的匹配成功后往下走,如果没有优先级比自己大的就使用自身规则。
2-2,运算值(匹配规则)
严格匹配/,例如http://127.0.0.1/
location = /
匹配任何请求,优先级最低
location/
匹配/web12,如果是/web1也不通过
location/web12
匹配/web12/,如果是/web12也不通过
location/web12/
匹配以gif,jpg,js结尾,区分大小写,主义\.转义后是.,$代表结尾
location ~ \.(gif|jpg|png|js|css)$
匹配紧跟/static/目录,/fk/static/a.js失败,/static/a.js成功
location ^~/static/
3,其他
3-1,关于url指向一个目录如何自动在后面加/。
高版本的nginx(我的是1.4)自动跳转了,跟踪日志access.log可以看到请求了两次,做了301跳转。低版本的需要自己去写rewrite。
3-2,关于root属性。
局部模块的root属性会覆盖外部root属性。局部不定义root属性则使用外部root值。
3-3,简单的反向代理
location /8080 {
proxy_pass http://10.80.12.196:8080/;
proxy_redirect off;
}
3-4,集群
upstream tomcat_group {
server 192.168.0.11:8080 weight=10;
server 192.168.0.11:8081 weight=10;
server 192.168.0.12:8080 weight=10;
server 192.168.0.12:8081 weight=10;
server 192.168.0.13:8080 weight=10;
server 192.168.0.13:8081 weight=10;
}