最近初学nginx,把踩到的坑记录
1.root与alias
[root]
语法: root path
段落: http server location
[alias]
语法: alias path
段落: location
-------------------------------------------------------------------------------------------------
location /abc/ {
root /home/html/abc;
index index.html
}
这个指向的是/home/html/abc/abc/这个目录
path=$root+$location+$index=/home/html/abc+/abc+/index.html
=/home/html/abc/abc/index.html
location /abc/ {
alias /home/html/abc/;
index index.html
}
这个配置实际上指向的是/home/html/abc/目录。
path=$root+$location=/home/html/abc/+index.html
alias是将location中的匹配项去除,所以alias指定的路径最后必须加/
2.精准匹配(=)
/usr/share/nginx下有html和html2两个目录
--------------------------------------------------------------------
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location = /html2/ {
root /usr/share/nginx;
index index.html;
}
当访问http://localhost/时,实际访问的是http://localhost/index.html,所以匹配到第一个location
当访问http://localhost/html2/时,实际访问的是http://localhost/html2/index.html,匹配到第一个location
此时uri变成path=$+/html2/index.html=/usr/share/nginx/html+/html2/index.html
实际没有该路径,所以返回404
--------------------------------------------------------------------
此时应该使用普通匹配
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /html2/ {
root /usr/share/nginx;
index index.html;
}
--------------------------------------------------------------------
或前缀匹配
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ^~ /html2/ {
root /usr/share/nginx;
index index.html;
}
--------------------------------------------------------------------
或完全精准匹配
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location = /html2/index.html {
root /usr/share/nginx;
index index.html;
}
3.wordpress的反向代理
由于特殊原因,wordpress只能部署在家里(主要想省钱),想要通过VPS反向代理访问已实现去端口,其他网站都很轻松解决,唯有wordpress,因为它有不少链接是绝对路径,所以不做特殊处理一般只能看到首页,往其他页面跳转就会失效,解决方法也很简单,通过sub_filter 把域名进行替换就行了
location /{
proxy_set_header Accept-Encoding "";
proxy_pass https://blog.luckinserver.cn:88;
sub_filter https://blog.luckinserver.cn:88 http://luckinserver.cn;
sub_filter_once off;
}
以上可以实现http://luckinserver.cn对https://blog.luckinserver.cn:88的替换
proxy_set_header Accept-Encoding “”; 可以让nginx 不发送 Accept-Encoding HTTP header。这个时候,wordpress 返回的页面是不做 gzip压缩的。因为gzip 压缩之后,文本替换就会失效了。