Nginx反向代理域名无法访问问题
问题描述:nginx正常启动,ip访问能正常访问项目,域名访问显示无法访问此网站(DNS_PROBE_FINISHED_NXDOMAIN),意思是当浏览器无法找到您尝试访问的网站时会出现,其实看网站报错我们就知道大概率是DNS解析相关问题,但是如果下次我们不知道DNS报错应该怎么去排除并找出错误呢?下面就是相关思路。
解决思路
一、查看是否服务器问题
查看防火墙是否关闭,防火墙是否放行端口,如果是云服务器查看安全组是否放行端口(相关运营商有设置安全组手册)。
如果第一次安装22端口是会给我们开放一次的,如果发现没有开一定要第一时间开放22端口以下是Ubuntu服务器防火墙相关命令:
sudo ufw status #查看防火墙状态
sudo apt-get install ufw #安装防火墙
sudo ufw enable #开启防火墙
sudo ufw allow 22 #开放22端口
sudo ufw delete allow 22 #关闭22端口(开启关闭端口都需要重启才能生效)
sudo ufw reload #重启防火墙
sudo ufw disable #关闭防火墙
进入端口在线测试网站,查看80和443端口是否对外放行 可以找一个在线测试端口网站这样比一个个的去测方便点,我用的是端口在线检测工具
二、项目本身问题
项目部署完毕看本地是否能正常访问,或者开通端口进行外部浏览器访问。 本地访问: curl 127.0.0.1:项目端口
三、nginx问题
查看nginx是否正常启动 sudo systemctl status nginx
四、nginx配置问题
防止出现多个nginx配置文件,我们并不知道实际上调用的是哪个配置文件,因此我们必须找到实际调用的配置文件才能进行修改。
查看nginx安装路径 ps aux | grep nginx
查看nginx生效配置文件路径 nginx -t
五、 配置文件书写问题
1. 注意Location 的语法问题,这里是很多人出错的问题
Location具体语法: location [ = | ~ | ~* | ^~ ] uri { ... }
- = 表示精确匹配 - ~ 表示区分大小写的正则匹配 - * 表示不区分大小写的正则匹配 - ^ 表示 uri 以某个字符串开头 - / 表示通用匹配
2. root与alias区别
nginx指定文件路径有两种方式root和alias,root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。 root使用范围:http、server、location、if alias使用范围:location 下面举给个例子:
server {
location /static/ {
root /var/www; #请求 /static/file.txt 将映射到 /var/www/static/file.txt
}
}
在这个例子中,当请求匹配到/static/路径时,Nginx会在/var/www目录下寻找对应的文件。 root 的处理结果是:root 路径 + location 路径,location 路径包括匹配后面的请求,即 /var/www+ /static/file.txt
server {
location /static/ {
alias /var/www/data/; # 请求 /static/file.txt 将映射到 /var/www/data/file.txt
}
}
在这个例子中,alias指示Nginx将路径重写为/var/www/data/,而不是简单地将请求路径添加到/var/www中。 alias 的处理结果是:使用 alias 路径替换 location 路径,即 /static/file.txt的/static/ 会变成/var/www/data/,比如请求 /static/file.txt 将映射到 /var/www/data/file.txt
3. proxy_pass结尾带 / 和不带 / 的区别
如果请求成功匹配到 location 的规则,不同的请求类型对应的转发配置不同
静态资源: 使用 alias、root 关键字。
API接口: 使用 proxy_pass 关键字。
proxy_pass 结尾带/的场景中,会截断匹配成功的location规则,转发剩余的 URI。 proxy_pass 结尾不带带/的场景中,会保留匹配成功的location规则,并且转发剩余的 URI。
详情请看文章 Nginx学习笔记
4.利用日志查看错误点
可以查看我上篇文章如何在自己的Ubuntu服务器上快速的使用Nginx中的第四点,日志配置,分点开启日志,然后查看日志,确定是否进行请求,以及请求的地址等等。
六.域名问题
域名过期/没有进行备案 这些都有很明显的报错信息。 DNS解析问题 确定主域名@,DNS解析是用A记录来绑定服务器的ip地址进行解析(因为我nginx设置的反向代理规则为主机ip端口转发给域名) A记录、CNAME解析区别
A 记录(Address Record)是一种 DNS 记录类型,用于将域名映射到一个 IPv4 地址。通过设置 A 记录,你可以将特定的域名直接指向一个具体的 IP 地址,从而使用户能够通过这个域名访问相应的服务器或网络资源。
CNAME 是 DNS(Domain Name System)中的一种记录类型,全称为 Canonical Name(规范名)。CNAME 记录用于将一个域名映射到另一个域名,实现域名的别名或重定向。 功能: CNAME 记录用于创建别名,将一个域名映射到另一个域名。 用途: 主要用于将一个域名的访问重定向到另一个域名,方便管理和维护。当目标域名的 IP 地址变化时,只需更新目标域名的 DNS 记录,而不必更改所有引用该域名的记录。
总结:
A 记录直接将域名映射到一个 IPv4 地址,而 CNAME 记录将域名映射到另一个域名。 A 记录速度较快,因为它直接映射到 IP 地址,不会引入额外的查询步骤。CNAME 记录可能稍微减慢解析速度,因为它需要额外的查询步骤以查找目标域名的 IP 地址。 A 记录适用于需要直接映射到 IP 地址的情况,而 CNAME 记录适用于创建别名或者需要更灵活管理目标位置的情况。
停留在世界边缘,与之惜别