Day 59 Nginx常见问题与总结
1.1 Nginx多Server,导致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配置下有两个指定目录的,root和alias,那nginx的root和alias指令的区别
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 配置Nginx的tryfiles
[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