第二节:nginx常见问题二

Nginx常见问题

一、server优先级

1.首先选择所有的字符串完全匹配的server_name。(完全匹配)
2.选择通配符在前面的server_name,如.egonlin.com blog.egonlin.com
3.选择通配符在后面的server_name,如egonlin. egonlin.com egonlin.cn
4.最后选择使用正则表达式匹配的server_name
5.如果全部都没有匹配到,那么将选择在listen配置项后加入[default_server]的server块
6.如果没写,那么就找到匹配listen端口的第一个Server块的配置文件

二、禁止IP访问

当用户通过访问IP或者未知域名访问你得网站的时候,你希望禁止显示任何有效内容,可以给他返回500,目前国内很多机房都要求网站关闭空主机头,防止未备案的域名指向过来造成麻烦
[root@lb01 conf.d]# cat server4.conf 
server {
    listen 80 default_server;           #默认优先返回;
    server_name _;                      #空主机头或者IP;
    return 500;                         #直接返回500错误;
}

三、Nginx try_file路径匹配

nginx的try_file路径匹配,Nginx会按顺序检查文件及目录是否存在(根据 root 和 alias 指令设置的参数构造完整的文件路径),并用找到的第一个文件提供服务。在元素名后面添加斜杠 / 表示这个是目录。如果文件和目录都不存在,Nginx会执行内部重定向,跳转到命令的最后一个 uri 参数定义的 URI 中。

1.正常的配置文件

[root@web01 conf.d]# vim linux.try.com.conf 
server {
    listen 80;
    server_name linux.try.com;

    location / {
        root /code;
        index index.html;
    }
}

[root@web01 conf.d]# systemctl restart nginx
[root@web01 conf.d]# echo "test try_file" > /code/index.html

2.使用try_file的配置

[root@web01 conf.d]# vim linux.try.com.conf 
server {
    listen 80;
    server_name linux.try.com;

    location / {
        root /code;
        try_files $uri /1.jpg;
    }
}

#访问测试:
1.访问域名时 linux.try.com,返回的结果是 1.jpg
由于请求的是域名,后面没有 uri,那么 $uri 匹配到的就是 "空",匹配不到内容的情况下,返回 1.jpg

2.访问域名 linux.try.com/index.html,返回的结果是 index.html
由于请求的是linux.try.com/index.html,$uri 匹配到的是 index.html,就返回相应内容

3.修改try_file配置

[root@web01 conf.d]# vim linux.try.com.conf 
server {
    listen 80;
    server_name linux.try.com;

    location / {
        root /code;
        try_files $uri $uri/ /1.jpg;
    }
}

#访问测试:
1.访问域名 linux.try.com,返回的结果是 index.html
由于请求的是域名,后面没有 uri,那么 $uri 匹配到的就是 "空",$uri 匹配不到内容的情况下,匹配 $uri/,匹配到的是 "空/",/ 配置的是 /code,那么就回去请求code目录下的 index.html

4.一般使用场景

1)配置nginx

[root@lb01 conf.d]# vim linux.try.com.conf
server {
    listen 80;
    server_name linux.try.com;
    root /code;

    location / {
        try_files $uri $uri/ @java;           #当$uri和$uri/都匹配不到时,由后端的java来进行处理,名字可自定义,但一定要加@
    }

    location @java {
        proxy_pass http://172.16.1.8:8080;          #配置后端tomcat
    }
}

2)安装tomcat

[root@web01 ~]# yum install -y tomcat
[root@web01 ~]# cd /usr/share/tomcat/webapps/
[root@web01 webapps]# mkdir ROOT
[root@web01 webapps]# echo "test try_file @java" > ROOT/index.html

3)测试

1.code目录下游index.html的情况,访问域名正常显示 index.html
2.把code目录改名,访问域名,返回的时tomcat下面配置的页面

四、Nginx优雅显示错误页面

联系管理员微信tutu19192010,注册账号

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 沪ICP备2022009235号 沪公网安备31011802005110号 青浦区尚茂路798弄 联系方式-13697081366