nginx 配置日记
1. root与alias 的区别
一般nginx映射资源文件大多数都是这样写
# 被访问的资源目录为/nice/ooxx/路径下的文件
# 写法 1
server {
location ^~ /ooxx/ {
root /nice/;
index index.html index.hml index;
}
}
# 写法 2
server {
location ^~ /xxxoodd/ {
alias /nice/ooxx/;
index index.html index.hml index;
}
}
这两种写法都是为了访问/nice/ooxx/路径下的资源文件,但是却有所区别
- 写法1的匹配规则是 root + location的到请求资源的路径,
- alias 之间将请求xxxoodd的路径改名为/nice/ooxx/ + 请求url去除location部分的内容(如请求的路径是/xxxoodd/nice.html那么真实访问的路径是/nice/ooxx/nice.html。location的内容被截断,并将后面的内容映射到alias路径的后面)
- alias 后面跟随的路径必以“/”结尾,否则无法请求到对应的路径
2. nginx 映射文件路径
写法如下
server {
listen 80;
charset utf-8;
location /nice/ {
root /data/nice/imgs;
autoindex on; # 显示目录
autoindex_excat_size on; # 显示文件大小
autoindex_locationtime on; # 显示文件的修改时间
}
}
3. nginx中的server_name
nginx配置中的server_name用于区分通过不同域名发来的请求访问不同的服务。可能比较绕举个例子
假设你有个IP:10.143.110.110有两个域名都映射到了这个IP上分别是www.nice1.com和www.nice2.com
如果你想同请求的域名来去分,当请求是通过www.nice1.com访问时,将请求转发到服务A(www.a.com),如果是通过www.nice2.com域名访问的将请求转发到服务B(www.b.com)该怎么做?
这时server_name就派上用场了将配置改成如下:
server {
listen 80;
charset utf-8;
server_name www.nice1.com;
location / {
proxy www.a.com;
}
}
server {
listen 80;
server_name www.nice2.com;
location / {
proxy www.b.com;
}
}
这样就可以通过域名区分请求了
注意: 通过server_name设置后只能通过server_name设置的域名来请求服务,其他的域名的请求是没法请求到的。
如:通过IP去请求curl 10.143.110.110。返回404。
4. nginx的正则
符号 | 描述 |
---|---|
\ | 转义字符将特殊字符如要转义正则中的?字符,在正则中应这样写 \\\\? |
^ | 匹配字符串的开始位置,如匹配以/vip/nice开头的字符串,正则应这样写 ^/vip/nice.* |
$ | 匹配字符串的结束位置,如匹配以/vip/nice结尾的字符串,正则应这样写 .*/vip/nice$ |
. | 匹配出换行符’\n’以外的所有单个字符 |
* | 匹配前面字符的0次或多次 |
+ | 匹配前面字符的1次或多次 |
? | 匹配前面字符的0次或1多次 |
(pattern) | 括号内匹配的内容,取值时,通常$1、$2、$3… 数字为取第几个括号匹配到的内容 |
5. rewrite的使用
rewrite是本质是实现请求的重定向(请区分请求转发、重定向的区别)
使用语法:rewrite <regex> <replacement[flag]>;
应用位置:server、location、if
示例:
# 将指定url前缀的请求转发到其他的服务器上
server {
listen 80;
charset utf-8;
server_name www.nice.com;
location /web/s/ {
# $1 表示取(.*)匹配到的内容, 如果后面还有(...)则为$2、$3 ...
rewrite ^/(.*)$ www.baidu.com/$1 permanent;
}
}
rewrite 最后的flag参数:
标记符号 | 说明 |
---|---|
last | 本条规则匹配完成后继续向下匹配新的location URI规则 |
break | 本条规则匹配完成后终止,不在匹配任何规则 |
redirect | 返回302临时重定向 |
permanent | 返回301永久重定向 |