Day 59 Nginx常见问题与总结

1.1 NginxServer,导致Server_name优先级

在开始处理一个HTTP请求时,Nginx会读取header(请求头)中的host,与每个server中的server_name进行匹配,,来决定用哪一个server标签来完成处理这个请求。有可能一个Host与多个server中的server_name都匹配,这个时候就会更具匹配优先级来选择实际处理的server块。优先级匹配结果如下:

    1.首先选择所有的字符串完全匹配的server_name。(完全匹配)

    2.选择通配符在前面的server_name,如*.sentinel.org.cn

    3.选择通配符在后面的server_name,如sentinel.*

    4.最后选择使用正则表达式匹配的server_name

    5.如果全部都没有匹配到,那么将选择在listen配置项后加入[default|default_server]server块。

    6.如果没写,那么就找到匹配listen端口的第一个server

 

1.1.1 准备nginx对应的配置文件

[root@web02 conf.d]# cat code1.conf

server {

    listen 80;

    server_name localhost;

    location / {

       root /code1;

       index index.html;

    }

}

[root@web02 conf.d]# cat code2.conf

server {

    listen 80;

    server_name localhost;

    location / {

       root /code2;

       index index.html;

    }

}

[root@web02 conf.d]# cat code3.conf

server {

    listen 80;

    server_name localhost;

    location / {

       root /code3;

       index index.html;

    }

}

 

1.1.2 准备站点目录

[root@web02 conf.d]# mkdir /code{1..3} -p

[root@web02 conf.d]# for i in {1..3};do echo "Code$i" > /code$i/index.html;done

[root@web02 conf.d]# cat /code1/index.html

Code1

[root@web02 conf.d]# cat /code2/index.html

Code2

[root@web02 conf.d]# cat /code3/index.html

Code3

 

1.1.3 检查语法

[root@web02 conf.d]# nginx -t

nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored

nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

1.1.4 正常重启

[root@web02 conf.d]# systemctl restart nginx

Nginx 禁止IP访问 只允许域名访问

https://blog.csdn.net/weixin_40064477/article/details/78970862

1.2 Nginx Include 包含文件

一台服务器配置多个server网站,会导致nginx.conf主配置文件变得非常庞大而且可读性非常的差。

目的:为了简化主配置文件,便于人类可读

1.3 nginx配置下有两个指定目录的,rootalias,那nginxrootalias指令的区别

root配置实例:

用户访问/image/db.jpg,实际上Nginx会上/code/image/目录下找去找db.jpg文件。

location /image/ {

    root /code/;

}

alias配置实例:

用户访问/image/db.jpg,实际上Nginx会上/code/目录下找去找db.jpg文件

location /image/ {

    alias /code/;

}

alias是一个目录别名的定义,root则是最上层目录的定义。

1.4 error_page错误日志

error_page  404              /404.html;

# redirect server error pages to the static page /50x.html

 

如下错误状态码进行跳转/500.jpg

error_page 500 502 503 504  /500.jpg;

 

当有人访问500.jpg 则进行精准匹配

location = /500.jpg {

    root   /code/error;

}

1.5 Nginx Try_file 按顺序检查文件是否存在

Nginx try_files路径匹配

location / {

try_files $uri $uri/ /index.php;

}

#1.检查用户请求的uri内容是否存在本地,存在则解析

#2.将请求加/, 类似于重定向处理

#3.最后交给index.php处理

 

1.5.1 演示环境准备

[root@Nginx ~]# echo "Try-Page" > /code/index.html

[root@Nginx ~]# echo "Tomcat-Page" > /soft/app/apache-tomcat-9.0.7/webapps/ROOT/index.html

1.5.2 配置Nginxtryfiles

[root@Nginx ~]# cat /etc/nginx/conf.d/try.conf

server {

        listen 80;

        server_name localhost;

        root /code;

        index index.html;

       

        # 默认找/code/index.html

        location / {

                try_files $uri @java_page;

        }

       

        location @java_page {

                proxy_pass http://127.0.0.1:8080;

        }

}

//重启Nginx

[root@Nginx ~]# nginx -s reload