server

一个 server 称为一个虚拟主机, server 是 nginx 中的核心机制

server_name   域名或则 ip
listen        端口号
root          项目静态目录地址

location 简单配置介绍

proxy_pass 设置代理地址
root       设置本地目录地址
alias      设置本地目录地址
autoindex  是否开启本地目录列表展示
autoindex_exact_size 是否显示文件大小
autoindex_localtime  是否显示文件更新时间

配置静态服务

server {
	# 配置项目域名
	server_name localhost;
	# 配置项目端口号
	listen 8080;
	# 配置项目目录地址
	root /PATH/TO/WEBROOT;
	index index.html index.htm;
	
	# 当当前访问目录下无 index.html index.htm 时列出当前文件下的所有文件名称
	autoindex on;
	autoindex_exact_size on;
	autoindex_localtime on;
}

路由

所有的路有都需要在 server 下设置

相对路由

当网站的路由没有其它匹配条件时则会全部访问这个条件

location / {
	# 设置静态文件目录
	root  /PATH/TO/WEBROOT;
	# 当路由没有具体的文件名时默认访问下面的配置
	index index.html index.htm;
}

绝对路由

只有完全匹配的才会执行

location =/path/glob {
	# 设置静态文件目录
	root /PATH/TO/WEBROOT;
	# 当路由没有具体的文件名时默认访问下面的配置
	index index.html index.htm;
}

动态路由 - RegExp

路由的开头必须是 /static/

location ^~ /static/ {
	alias /PATH/TO/WEBROOT/;
	index index.html index.htm;
}
# 如上面的配置, 假如请求的 url 为 http://location/static/a/b/c.html;
# 会被解析成 /PATH/TO/WEBROOT/a/b/c.html;

alias 设置的静态文件目录服务不会带上 location 规则, 与 root 的区别请看下面的介绍

路由中只要包含 /static/

location ~ /static/ {
	alias /PATH/TO/WEBROOT/;
	index index.html index.htm;
}
# 如上面的配置, 假如请求的 url 为 http://location/1/2/static/a/b/c.html;
# 会被解析成 /PATH/TO/WEBROOT/a/b/c.html;

location ^~ /web/ {
	proxy_pass http://www.domain.com;
}

# 如上面的配置, 假如请求的 url 为 http://location/web/a/b/c.html;
# 会被解析成 http://www.domain.com/web/a/b/c.html;

location ^~ /web/ {
	proxy_pass http://www.domain.com/;
}

# 如上面的配置, 假如请求的 url 为 http://location/web/a/b/c.html;
# 会被解析成 http://www.domain.com/a/b/c.html;

location ~* \.(gif|jpg|jpeg|js|css|html)$ {
	root /PATH/TO/WEBROOT;
}

# 假如请求的 url 为 http://location/web/main.js;
# 会被解析成 /PATH/TO/WEBROOT/web/main.js;

# 假如请求的 url 为 http://location/web/main.css;
# 会被解析成 /PATH/TO/WEBROOT/web/main.css;

location 中的规则可以设置正则表达式, 因此可以配置很多实用的功能, 世界这么大就看你敢不敢去尝试。

root vs alias

alias

location /js/ {
	 alias /PATH/TO/WEBROOT/;
}

# 假如请求的 url 为 http://location/js/main.js;
# 会被解析成 /PATH/TO/WEBROOT/main.js;

root

location /js/ {
	 root /PATH/TO/WEBROOT/;
}

# 假如请求的 url 为 http://location/js/main.js;
# 会被解析成 /PATH/TO/WEBROOT/js/main.js;

用 alias 设置的镜像会忽略 location 表达式, 使用 root 设置的镜像会包含 location 表达式

使用 alias 设置镜像时结尾处必须填写 / 否则会出现找不到具体文件的情况
使用 root 结尾处的 / 可有可无, 有则更好